Running
지금까지 아무것도 변한게 없어보입니다. 이제 본격적으로 게임을 만들어 봅시다. 이제 Runner을 오른쪽으로 이동시켜 봅시다.
Runner이름을 같는 C# 스크립트를 생성합니다. Runner 클래스는 Runner 폴더에 집어넣고 스크립트를 Runner 큐브에 붙입니다.. 아래코드를 작성하자.
using UnityEngine; public class Runner : MonoBehaviour { void Update () { transform.Translate(5f * Time.deltaTime, 0f, 0f); } }
play 버튼을 눌렀을때 약간의 문제가 있다. 이 camera는 cube를 따라가지 않는다. 이것을 고치려면 camera를 cube의 자식으로 놓는다.
지금은 Runner는 가만히 있고 skyline이 왼쪽으로 이동하는것 처럼보인다.

Skyline을 생성하는 방법
우리는 기초적인 움직임을 배웠고, 이제는 skyline이 무한으로 생성되는 법을 배울것 입니다. 우리가 해야되는 첫번째 일은 skyline의 보이는 부분이 존재해야된다는 것입니다. 큐브가 왼쪽스크린으로 안보이게 되면 이것은 파괴하거나, 이것을 다시 skyline의 일부분으로 재사용할수도 있다. 우리는 큐브를 생성하는 방법과 뒤로 가서 더이상 보이지 않는 큐브를 앞으로 이동시키는 스크립트를 만들수 있습니다.
SkylineManager이름을 가지는 C# script를 Skyline 폴더에 만듭니다. 우리는 2개의 매니저 클래스를 만드는데,skyline 레이어에 각각 집어넣는다. 최소한, 프리팹을 사용할수 있게 skyline을 생성할수 있게 변수를 집어넣는다.
using UnityEngine; public class SkylineManager : MonoBehaviour { public Transform prefab; }
empty object를 생성한다 (GameObject / Create Empty) namedManagers의 이름으로 지정합니다. 또다른 empty object 를 생성합니다. Skyline Close Manager라고 , Managers의 하위 오브젝트로 설정하고, SkylineManager 스크립트를 추가한다.
Now turn both skyline 큐브를 Skyline 폴더에 끌어당겨 프리팹을 만든다. 그후, Hierarchy에 있는 두개의 큐브를 삭제합니다. Skyline Close 프리팹을 Skyline Close Manager
에 집어넣습니다.

public Transform prefab; public int numberOfObjects; public Vector3 startPosition; private Vector3 nextPosition; void Start () { nextPosition = startPosition; }
localScale.x와 같다. void Start () {
nextPosition = startPosition;
for (int i = 0; i < numberOfObjects; i++) {
Transform o = (Transform)Instantiate(prefab);
o.localPosition = nextPosition;
nextPosition.x += o.localScale.x;
}
}

distanceTraveled 의 변수를 Runner 스크립트에 집어넣습니다.using UnityEngine; public class Runner : MonoBehaviour { public static float distanceTraveled; void Update () { transform.Translate(5f * Time.deltaTime, 0f, 0f); distanceTraveled = transform.localPosition.x; } }
큐란 무엇일까요?(자료구조) 바로가기
using UnityEngine; using System.Collections.Generic; public class SkylineManager : MonoBehaviour { public Transform prefab; public int numberOfObjects; public float recycleOffset; public Vector3 startPosition; private Vector3 nextPosition; private Queue<Transform> objectQueue; void Start () { objectQueue = new Queue<Transform>(numberOfObjects); nextPosition = startPosition; for (int i = 0; i < numberOfObjects; i++) { Transform o = (Transform)Instantiate(prefab); o.localPosition = nextPosition; nextPosition.x += o.localScale.x; objectQueue.Enqueue(o); } } void Update () { if (objectQueue.Peek().localPosition.x + recycleOffset < Runner.distanceTraveled) { Transform o = objectQueue.Dequeue(); o.localPosition = nextPosition; nextPosition.x += o.localScale.x; objectQueue.Enqueue(o); } } }

작업이 끝났다! 플레이 모드를 누르면 큐브는 다시 설정된다. 하지만 이것은 스카이라인처럼 보이지 않는다 좀더 스카이라인을 , 하지만 아직은 스카이 라인 처럼 보이지않는다. 좀더 스카인 라인처럼 보일려면, 이것을 재활용 시킬때 좀더 다양한 모양으로 만들어보자.
첫번째, 처음에 배치하는 큐브든 나중에 배치하는 규브든 모두 같은 것을 기본적으로 알자.아래 코드를 보자.
void Start () {
objectQueue = new Queue<Transform>(numberOfObjects);
for (int i = 0; i < numberOfObjects; i++) {
objectQueue.Enqueue((Transform)Instantiate(prefab));
}
nextPosition = startPosition;
for (int i = 0; i < numberOfObjects; i++) {
Recycle();
}
}
void Update () {
if (objectQueue.Peek().localPosition.x + recycleOffset < Runner.distanceTraveled) {
Recycle();
}
}
private void Recycle () {
Transform o = objectQueue.Dequeue();
o.localPosition = nextPosition;
nextPosition.x += o.localScale.x;
objectQueue.Enqueue(o);
}public Vector3 minSize, maxSize; private void Recycle () { Vector3 scale = new Vector3( Random.Range(minSize.x, maxSize.x), Random.Range(minSize.y, maxSize.y), Random.Range(minSize.z, maxSize.z)); Vector3 position = nextPosition; position.x += scale.x * 0.5f; position.y += scale.y * 0.5f; Transform o = objectQueue.Dequeue(); o.localScale = scale; o.localPosition = position; nextPosition.x += scale.x; objectQueue.Enqueue(o); }
Start Position (-60, -60, 50) 설정하고, Min Size 는 (10, 20, 10), Max Size는 (30, 60, 10)으로설정하고 , Recycle Offset to 60로 설정한다.
위와 마찬가지로 두번째 스카이라인을 만든다. Skyline Close Manager를 복사하고 이름을 Skyline Far Away Manager로 변경한다.
Skyline Far Away prefab으로 변경한다. Start Position 을 (-100, -100, 100)으로 설정하고 Recycle Offset을 75로 설정한다, Min Size를 (10, 50, 10) 설정하고 Max Size를 (30, 100, 10)로 설정한다. 물론 너가 원하는 값으로 변경할수도있다.


'유니티 > 스크립트' 카테고리의 다른 글
| [런게임] 유니티 3D로 러너 게임 만들기 - 게임 이벤트들 (0) | 2014.01.13 |
|---|---|
| [런게임] 유니티 3D로 러너 게임 만들기 - 길의 종류 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 점프와 점프 실패 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 플랫폼(길) 생성하기 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - Runner, Skyline 만들기 (0) | 2014.01.12 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 씬 설정하기 (0) | 2014.01.12 |


