일단 유니티에서 반복적인 맵을 만들 때에는 땅 프리팹을 생성 / 삭제하는 것보다 최소한의 프리팹으로 위치만 바꾸어 주는 것이 좋다.
생성과 삭제는 비용이 많이 든다고 한다.
본론으로 들어가서 쿠키런처럼 플레이어가 단순히 오른쪽으로만 이동을 한다고 가정해보자.
ㅇ 방법
1. 플레이어의 X 포지션을 이용해서 오른쪽으로 이동시킨다.
제일 생각하기 쉬운 방법이다.
플레이어를 직접 이동시키기 때문에, 플레이어가 지나간 맵을 다시 플레이어 앞으로 위치를 바꿔주어야 한다.
2. 플레이어는 가만히 있고, 맵을 오른쪽에서 왼쪽으로 이동시킨다.
플레이어가 오른쪽으로 이동하는 것처럼 착각하게 만들 수 있다.
그래서 게임을 플레이하는 유저는 1번과 다름이 없게 느낀다.
내가 생각하기에 2번의 가장 큰 장점은 제작하는 단계에서 조금 더 수월해지는 것 같다.
왜냐히면 1번은 테스트 해보면서 X 포지션이 무한으로 늘어날 수 있지만, 2번의 경우 X 포지션이 0에서 머무르기 때문에 더 편한 것 같다.
ㅇ 소스 코드
2번 방법으로 구현해보았다.
맵 프리팹에 들어갈 스크립트이다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Circulation : MonoBehaviour { public float speed = 1.0f; public float startPosition; public float endPosition; void Update() { // x포지션을 조금씩 이동 transform.Translate(-1 * speed * Time.deltaTime, 0, 0); // 목표 지점에 도달했다면 if (transform.position.x <= endPosition) { ScrollEnd(); } } void ScrollEnd() { // 원래 위치로 초기화 시킨다. transform.Translate(-1 * (endPosition - startPosition), 0, 0); } }
speed , startPosition , endPosition 변수는 임의로 정하면 된다.
변수가 뜻하는 것은 순서대로 속도 / 반복될 시작 위치 / 반복될 마지막 위치
ㅇ 구현
1. 맵 이미지를 하나 구한다. 이미지를 스프라이트 형식으로 바꾸어 주어야 한다.
2. 씬으로 꺼내어서 위에서 만들었던 소스 코드를 추가하고, 프리팹으로 만든다.
2. 프리팹 여러 개를 붙여서 하나의 땅 처럼 자연스럽게 이어준다. 나는 총 5개의 스프라이트를 이용했다.
3. 게임 시작을 눌러본다.
스크립트의 변수 startPosition, endPosition을 설정할 때에는 주의할 점이 있다.
위의 캡처본에서 볼 수 있듯이 카메라가 비추는 화면에서 맵 스프라이크 크기 정도만큼의 거리를 좌우로 확보해주어야 빈공간이 생기지 않고, 부드럽게 이동된다.
거리를 확보해놓지 않으면, 밑의 사진처럼 뚝뚝 끊길 수 있다.
'기타 > Unity' 카테고리의 다른 글
[Unity Effect] Sword Effect 1 (0) | 2018.10.19 |
---|---|
[Unity] 유니티 c# 코드 구조 (0) | 2018.09.13 |
[Unity] 파티클 색상 바꾸기 / Color over Lifetime 설정 (0) | 2018.07.22 |
[Unity] 파티클시스템 첫 공부!! (0) | 2018.07.21 |
[Unity] 그림자 지우기 (0) | 2018.06.28 |