파워업
공중 부스터를 가능하게하는 파워업 아이템을 만들어보자. 우리는 랜덤하게 회전하는 큐브를 길 위에 생성할수 있습니다. 우리는 한가지의 부스터 큐브를 사용할것이며 이것은 재사용 됩니다.
Booster 폴더를 만듭니다. Booster Mat 이름의 material 생성합니다 . 우리는 메트리얼 쉐이더를 Specular shader 로 설정하고, Main Color은 녹색 (0, 255, 0) 으로 설정합니다 그리고 specular color 색상은 하얀색으로 설정합니다.
cube를 생성하고, 이름은Booster로 그리고 scale은 각각 0.5로 설정합니다. 충돌하기 쉽게 콜라이더의 크기는 1.5로 설정합니다.
콜라이더의 Is Trigger field에 체크합니다. 왜냐하면 Runner이 충돌에 영향을 받지 않아야 되기 때문입니다.(IS Trigger 체크시 통과됨)

Booster라는 C# script 를 생성하고 in the Booster 폴더에 집어넣고 Booster 큐브에 집어넣습니다. 우리는 4개의 변수를 만들것입니다. 첫째 우리는 길 중안에 부스터 아이템을 놔두기 위해서 좌표가 필요합니다 이 좌표를 (0, 2.5, 0)로 설정합니다. 둘째 우리는 회전을 하기위해서 회전 값을 설정합니다. 이값은 (45, 90, 1)로 설정합니다. 셋째 우리는 재활용 하는 위치를 설정해 줘야 됩니다. 이것은 Runner이 파워업 아이템을 놓쳣을때 사용합니다 우리는 이 값을 20으로 설정합니다. 넷째, 우리는 부스터 아이템을 생성할수 있도록 25퍼 센트 확률 정도로 설정할것입니다
using UnityEngine; public class Booster : MonoBehaviour { public Vector3 offset, rotationVelocity; public float recycleOffset, spawnChance; }

부스터 아이템을 생성하는 방법중 하나는 길이 생성될때 부스터 아이템을 생성하는 방법이 있습니다. 그리고 이 로직은 부스터 스크립트에서 처리할것입니다. 우리는 이
SpawnIfAvailable 메서드를 Booster 에 추가합니다. 부스터 아이템을 배치하려면 길의 좌표가 필요합니다. 일단은 비워 두겠습니다.public void SpawnIfAvailable(Vector3 position){ }
PlatformManager 에 Booster를 할당할수 있도록 변수를 선언합니다. Recycle 메서드에서 PlaceIfAvailable 메서드를 호출합니다. public Booster booster;
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;
booster.SpawnIfAvailable(position);
Transform o = objectQueue.Dequeue();
o.localScale = scale;
o.localPosition = position;
int materialIndex = Random.Range(0, materials.Length);
o.renderer.material = materials[materialIndex];
o.collider.material = physicMaterials[materialIndex];
objectQueue.Enqueue(o);
nextPosition += new Vector3(
Random.Range(minGap.x, maxGap.x) + scale.x,
Random.Range(minGap.y, maxGap.y),
Random.Range(minGap.z, maxGap.z));
if(nextPosition.y < minY){
nextPosition.y = minY + maxGap.y;
}
else if(nextPosition.y > maxY){
nextPosition.y = maxY - maxGap.y;
}
}
위 처럼 연결하고 나서, 우리는
SpawnIfAvailable 메서드에서 위치를 설정하고 활성화 시켜줍니다. 그리고 게임오버인 경우에는 비활성화 시켜주고 함수가 호출되기 전에도 비활성화를 시켜줍니다. void Start () {
GameEventManager.GameOver += GameOver;
gameObject.SetActive(false);
}
public void SpawnIfAvailable (Vector3 position) {
if(gameObject.activeSelf || spawnChance <= Random.Range(0f, 100f)) {
return;
}
transform.localPosition = position + offset;
gameObject.SetActive(true);
}
private void GameOver () {
gameObject.SetActive(false);
}Update 메서드에서는 부스터 아이템을 회전 시키며, 일정 위치를 넘어갔을시에는 부스터 아이템을 비활성화 시켜줍니다. void Update () {
if(transform.localPosition.x + recycleOffset < Runner.distanceTraveled){
gameObject.SetActive(false);
return;
}
transform.Rotate(rotationVelocity * Time.deltaTime);
}
아직은 Runner이 부스터를 통과해도 아무일도 일어나지 않습니다. 이것을 변경하기 위해서 우리는 유니티 메서드인
OnTriggerEnter 을 Booster에 더합니다. 이 메서드는 콜라이더가 충돌될때 호출됩니다. 현재 부스터 아이템과 부딪힐수있는건 Runner밖에 없기 때문에 다른 처리는 해주지 않습니다. Runner 에 스테틱 메서드인 AddBoost 을 만들어 주고 이것을 사용하겠습니다. void OnTriggerEnter () {
Runner.AddBoost();
gameObject.SetActive(false);
}AddBoost 를 메서드를 만들어 줍니다. private static int boosts;
private void GameStart () {
boosts = 0;
distanceTraveled = 0f;
transform.localPosition = startPosition;
renderer.enabled = true;
rigidbody.isKinematic = false;
enabled = true;
}
public static void AddBoost () {
boosts += 1;
}실제로 공중에서 부스터를 사용할수 있도록 아래처럼 설정해줍니다. boost velocity 값은 적절하게 (10, 10, 0) 로 설정해 줍니다.
public Vector3 boostVelocity, jumpVelocity; void Update () { if(Input.GetButtonDown("Jump")){ if(touchingPlatform){ rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange); touchingPlatform = false; } else if(boosts > 0){ rigidbody.AddForce(boostVelocity, ForceMode.VelocityChange); boosts -= 1; } } distanceTraveled = transform.localPosition.x; if(transform.localPosition.y < gameOverY){ GameEventManager.TriggerGameOver(); } }

'유니티 > 스크립트' 카테고리의 다른 글
| [런게임] 유니티 3D로 러너 게임 만들기 - 파티클 이펙트 (0) | 2014.01.14 |
|---|---|
| [런게임] 유니티 3D로 러너 게임 만들기 - GUI 설정 (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 파워업! (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 이벤트 사용하기 (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 게임오버 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - GUI 와 게임시작 (0) | 2014.01.13 |
Trackback 0 And
Comment 0


