이번 강좌는 원근감 있는 무한 배경 만들기에 관한 강좌다.
빈 오브젝트 3개를 만들고 각 오브젝트에 하위 오브젝트로 배경 스프라이트를 3개씩 생성한다.
그리고 Order Layer로 순서를 조정하고, 서로 나란히 있도록 오브젝트의 Y축을 10, 0, -10으로 설정한다.
그런 다음 'Background.cs' 파일을 만든 후, 상위 배경 오브젝트에 넣고 다음과 같이 코드를 작성한다.
using UnityEngine;
public class Background : MonoBehaviour
{
public float speed;
void Update()
{
Vector3 curPos = transform.position;
Vector3 nextPos = Vector3.down * speed * Time.deltaTime;
transform.position = curPos + nextPos;
}
}
다만 계속해서 실행하면 더 이상 배경이 나오지 않고 잘리게 된다.
그렇기에 카메라에서 보이지 않는 배경을 다시 위로 이동시켜 무한한 것처럼 만들어야 한다.
다음과 같이 코드를 추가한다.
...
public int startIndex;
public int endIndex;
public Transform[] sprites;
float viewHeight;
void Awake()
{
viewHeight = Camera.main.orthographicSize * 2;
}
void Update()
{
...
if (sprites[endIndex].position.y < viewHeight * (-1))
{
Vector3 backSpritePos = sprites[startIndex].localPosition;
Vector3 frontSpritePos = sprites[endIndex].localPosition;
sprites[endIndex].transform.localPosition = backSpritePos + Vector3.up * viewHeight;
int startIndexSave = startIndex;
startIndex = endIndex;
endIndex = (startIndexSave - 1 == -1) ? sprites.Length - 1 : startIndexSave - 1;
}
}
orthographicSize : orthographic 카메라 Size
패럴랙스(Parallax) : 거리에 따른 상대적 속도를 활용한 기술
각 배경의 속도를 다르게 설정해 배경에 원근감을 준다. (제일 위에 보이는 배경이 가장 빠르고, 제일 밑에 보이는 배경이 가장 느리게 설정한다)
배경에 원근감을 주는 방법이 궁금했는데 생각보다 간단한 방법이어서 놀랐다.