✍ 원근감있는 무한배경 만들기
- 배경 스크롤링과 패럴랙스 기법을 이용해 원근감있는 배경을 만듦.
준비하기
배경 스크롤링
- Transform 배열을 이용해 시야에서 벗어난 부분을 위로 이어붙이고 , 인덱스 번호를 스왑해서 sprite 3개로 무한한 배경을 만듦
- 카메라 크기를 이용해 카메라 밖으로 나간 부분을 계속 위로 이어붙임.
- 카메라 시야의 밖을 벗어났으면 인덱스를 스왑해줘야함
- 인스펙터 창에 자물쇠를 누르면 인스펙터창이 고정되므로, 고정시킨 후 Transform배열에 끌어 당겨준다.
- 인덱스에 맞게 제대로 잘 끌어넣어야 한다.
if (sprites[endidx].position.y < viewHeight * (-1))
{
// #. Sprite ReUse
Vector3 backSpritePos = sprites[startidx].localPosition;
Vector3 frontSpritePos = sprites[endidx].localPosition;
sprites[endidx].transform.localPosition = backSpritePos + Vector3.up * 10;
// #. Index Change
int tmp = startidx;
startidx = endidx;
endidx = ((tmp - 1) == -1) ? sprites.Length - 1 : tmp - 1;
}
계층 구조를 이루고 있으면 젤 상위 position을 알고 싶으면 position을 사용하고, 내부에 있는 위치를 알고 싶으면 localPosition을 사용한다.
Parallax (패럴랙스)
- 거리에 따른 상대적 속도를 활용한 기술
- 보통 패럴랙스 기법은 플랫포머같은 횡스크롤 게임에 자주 적용된다.
- 각각의 speed를 조절해 원근감이 있어보이게 표현
BackGround.cs 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BackGround : MonoBehaviour
{
public float speed;
public int startidx;
public int endidx;
public Transform[] sprites;
float viewHeight;
private void Awake()
{
viewHeight = Camera.main.orthographicSize * 2;
}
void Update()
{
Move();
Scrolling();
}
void Move()
{
Vector3 curPos = transform.position;
Vector3 nextPos = Vector3.down * speed * Time.deltaTime;
transform.position = curPos + nextPos;
}
void Scrolling()
{
if (sprites[endidx].position.y < viewHeight * (-1))
{
// #. Sprite ReUse
Vector3 backSpritePos = sprites[startidx].localPosition;
Vector3 frontSpritePos = sprites[endidx].localPosition;
sprites[endidx].transform.localPosition = backSpritePos + Vector3.up * 10;
// #. Index Change
int tmp = startidx;
startidx = endidx;
endidx = ((tmp - 1) == -1) ? sprites.Length - 1 : tmp - 1;
}
}
}
출처 - https://www.youtube.com/c/GoldMetal