728x90
반응형
이번에는 플레이어를 움직일 때마다 같이 무한히 반복되는 맵을 만들어보겠습니다.
구성은 다음과 같습니다.
빈 게임 오브젝트인 Background를 만들고
그 아래에 배경 역할을 하는 두개의 이미지를 가져옵니다.
각각 Layer Order를 알맞게 설정하여 어떻게 보여질지를 결정하겠습니다.
이때 두개의 이미지를 각각 2개씩 복사하여 복사한 이미지들을 원본 이미지의 자식으로 배치합니다.
배치하는 정도는 x축으로 40씩 간격을 잡겠습니다.
즉, 원본은 (0,0,0) / 복사본1은 (-40, 0, 0) / 복사본2는 (40, 0, 0)으로 잡겠습니다.
그리고 원본에 적용할 스크립트를 작성하겠습니다.
1) 스크립트
public class ParallaxBackground : MonoBehaviour
{
[SerializeField]
private float _parallaxEffect;
private float _xPosition;
private GameObject _camera;
private float _spriteLength;
void Start()
{
_camera = GameObject.Find("Main Camera");
_spriteLength = GetComponent<SpriteRenderer>().bounds.size.x;
_xPosition = gameObject.transform.position.x;
}
void Update()
{
float _distanceToMoved = _camera.transform.position.x * (1 - _parallaxEffect);
float _distanceToMove = _camera.transform.position.x * _parallaxEffect;
gameObject.transform.position = new Vector3(_xPosition + _distanceToMove, gameObject.transform.position.y);
if (_distanceToMoved > _xPosition + _spriteLength)
_xPosition += _spriteLength;
else if (_distanceToMoved < _xPosition - _spriteLength)
_xPosition -= _spriteLength;
}
}
현재 MainCamera는 CinemachineCamera가 적용되어 플레이어의 움직임에 따라 같이 움직이게 됩니다.
이때 이미지가 움직인 위치와 움직여야 하는 위치를 결정하여 이를 매 프레임마다 적용하게 됩니다.
따라서 플레이어가 뒤로 움직이면, 배경도 뒤로 움직이고
플레이어가 앞으로 움직이면 배경도 앞으로 움직이게 됩니다.
한번 확인해보겠습니다.
배경이 플레이어의 움직임을 따라 움직이게 되어 무한히 반복되는 느낌을 줍니다.
또 같은 배경을 3개씩 연달아 사용하여
이미지가 중간에 끊기지 않는 것을 확인할 수 있습니다.
728x90
반응형
'유니티 > 게임 프로젝트' 카테고리의 다른 글
2D RPG - (9) 스켈레톤 만들기 (1) (0) | 2024.12.18 |
---|---|
2D RPG - (8) 적을 위한 세팅 (1) | 2024.12.18 |
2D RPG - (6) Tilemap을 통한 배경 그리기 + Cinemachine (0) | 2024.12.11 |
2D RPG - (5) StateMachine의 구성과 완성 (마지막) (0) | 2024.12.09 |
2D RPG - (4) StateMachine의 구성과 완성 (3) (1) | 2024.12.09 |