'유니티/스크립트'에 해당되는 글 123건
- 2014.01.14 [런게임] 유니티 3D로 러너 게임 만들기 - 완성본
- 2014.01.14 [런게임] 유니티 3D로 러너 게임 만들기 - 파티클 이펙트
- 2014.01.14 [런게임] 유니티 3D로 러너 게임 만들기 - GUI 설정
- 2014.01.14 [런게임] 유니티 3D로 러너 게임 만들기 - 파워업!
- 2014.01.14 [런게임] 유니티 3D로 러너 게임 만들기 - 이벤트 사용하기
- 2014.01.13 [런게임] 유니티 3D로 러너 게임 만들기 - 게임오버
- 2014.01.13 [런게임] 유니티 3D로 러너 게임 만들기 - GUI 와 게임시작
- 2014.01.13 [런게임] 유니티 3D로 러너 게임 만들기 - 게임 이벤트들
- 2014.01.13 [런게임] 유니티 3D로 러너 게임 만들기 - 길의 종류
- 2014.01.13 [런게임] 유니티 3D로 러너 게임 만들기 - 점프와 점프 실패
'유니티 > 스크립트' 카테고리의 다른 글
| Unity2D 스프라이트 렌더러 동적할당 (0) | 2014.01.26 |
|---|---|
| 유니티 코루틴 관련 함수(대화 관련) (0) | 2014.01.26 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 완성본 (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 파티클 이펙트 (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - GUI 설정 (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 파워업! (0) | 2014.01.14 |
파티클 이펙트
지금 까지 우리는 게임의 기능적인 면을 만들었다. 하지만 Scene 공간에 텅 빈 느낌을 채워주고 싶다. 이것을 파티클 이펙트로 채울 생각이다.
particle system을 생성하자. (GameObject / Create Other / Particle System) 이름은 Dust Emitter로 짓자. Runner의 자식으로 두고 위치는 (25, 0, 0)로 설정하고 rotation은 reset해준다, 이렇게 하면 항상 카메라를 따라다닌다.
Set Start Lifetime 를 Random Between Two Constants 으로 설정하고 값을 6과 10으로 설정해준다. 그리고 Start Speed 는 0으로 설정해준다. 이것을 사용하면 입자의 크기가 일정하게 시작된다. 또한 Simulation Space는 World로 변경해준다. 이것은 Runner에 의해서 파티클이 움직이지 않게 해준다. Start Size는 Random Between Two Constants으로 설정해주고 값은 0.2 와 0.8로 맞춰준다.
shape 는 box로 설정하고 with 수치는 (1, 30, 10)로 설정해주고 Emission 는 20으로 설정한다.
Velocity Over Lifetime은, world space로 설정하고 random range between two constants로 설정해준다 값은 (-1, -1, 0) 그리고 (-4, 1, 0)로 설정한다. 이것은 파티클 각각의 움직임을 나타내어준다.
마지막으로 Color over Lifetime 의 그라디언트를 처음에는 0 그리고 나중에는 100%로 맞춰주자. 이것은 페이드인 효과가 나타난다.
그다음 particle system을 복제하고, Runner의 자식으로 둔다, position을 reset 하고 이름은 Trail Emitter로 짓는다. 이것은 러너의 흔적을 나타낼 파티클입니다.
Shape를 Mesh로 변경하고 and cube로 설정해준다. 그리고 Velocity over Lifetime을 해제한다.
Start Lifetime을 1 과 2 로 Start Size 는 0.2 와 0.4로 설정한다.

우리는 게임중일때 파티클을 생성할때는 매니저 클래스를 만들어서 생성할수 있습니다. ParticleSystemManager라는 C# script를 만들고 Managers 폴더에 넣습니다. 또한 이 스크립트를 넣을 빈 오브젝트도 생서해줍시다.
ParticleSystemManager 에서는 오직 파티클의 보이고 안보이고 만 해줍니다. 우리는 particleSystems 배열을 사용해서 관리합니다.
using UnityEngine; public class ParticleSystemManager : MonoBehaviour { public ParticleSystem[] particleSystems; void Start () { GameEventManager.GameStart += GameStart; GameEventManager.GameOver += GameOver; GameOver(); } private void GameStart () { for(int i = 0; i < particleSystems.Length; i++){ particleSystems[i].Clear(); particleSystems[i].enableEmission = true; } } private void GameOver () { for(int i = 0; i < particleSystems.Length; i++){ particleSystems[i].enableEmission = false; } } }


패키지 파일
'유니티 > 스크립트' 카테고리의 다른 글
| 유니티 코루틴 관련 함수(대화 관련) (0) | 2014.01.26 |
|---|---|
| [런게임] 유니티 3D로 러너 게임 만들기 - 완성본 (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 파티클 이펙트 (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - GUI 설정 (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 파워업! (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 이벤트 사용하기 (0) | 2014.01.14 |
GUI 설정
부스터 아이템 작업을 완료 했습니다. 하지만 부스터 아이템을 몇개 가지고 있는지 알수있는 방법은 플레이어가 그것을 기억하는수 밖에 없습니다. 이 방법을 개선하려면 GUI를 통해서 화면에 표시하는 방법이 있습니다. 아이템 개수 뿐만아니라 얼마나 이동했는지 또한 표시할수있씁니다.
GUIText를 생성하고 GUI의 자식으로 둡니다. 위치는 (0.01, 0.99, 0), Anchor 는 upper left, font size 20 그리고 normal style로 설정하니다. 이름은 Boosts Text입니다..
Distance Text도 생성합니다. 위치는 (0.5, 0.99, 0), font size 30 그리고 bold style.Anchor 는upper center.
GUIManager 에 두개의 변수를 선언하고 할당합니다.
public GUIText boostsText, distanceText, gameOverText, instructionsText, runnerText;

GUIManager 를 수정할수 있게 스테틱 변수와 함수들을 만듭니다. 아래와 같이 스테틱 함수를 만들면 어디서든 접근이 가능합니다. private static GUIManager instance;
void Start () {
instance = this;
GameEventManager.GameStart += GameStart;
GameEventManager.GameOver += GameOver;
gameOverText.enabled = false;
}
public static void SetBoosts(int boosts){
instance.boostsText.text = boosts.ToString();
}
public static void SetDistance(float distance){
instance.distanceText.text = distance.ToString("f0");
}Runner 에서 위에 함수를 호출해서 값들을 변경해줍니다. 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;
GUIManager.SetBoosts(boosts);
}
}
distanceTraveled = transform.localPosition.x;
GUIManager.SetDistance(distanceTraveled);
if(transform.localPosition.y < gameOverY){
GameEventManager.TriggerGameOver();
}
}
private void GameStart () {
boosts = 0;
GUIManager.SetBoosts(boosts);
distanceTraveled = 0f;
GUIManager.SetDistance(distanceTraveled);
transform.localPosition = startPosition;
renderer.enabled = true;
rigidbody.isKinematic = false;
enabled = true;
}
public static void AddBoost(){
boosts += 1;
GUIManager.SetBoosts(boosts);
}
'유니티 > 스크립트' 카테고리의 다른 글
| [런게임] 유니티 3D로 러너 게임 만들기 - 완성본 (0) | 2014.01.14 |
|---|---|
| [런게임] 유니티 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 |
파워업
공중 부스터를 가능하게하는 파워업 아이템을 만들어보자. 우리는 랜덤하게 회전하는 큐브를 길 위에 생성할수 있습니다. 우리는 한가지의 부스터 큐브를 사용할것이며 이것은 재사용 됩니다.
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 체크시 통과됨)

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);
}
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;
}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 |
이벤트 사용하기
우리의 게임이벤트는 제대로 동작한다, 이제 Runner를 고려할 시간입니다..
우리는 Runner 가 게임 시작전에는 안보이길 원합니다. 그리고 중력의 영향을 받지 않길 원하니다. 우리는 Start 메서드에서 이벤트를 설정하고, 각각의 함수에서 값들을 조정합니다.
아래는 Runner 스크립트 입니다.
private Vector3 startPosition; void Start () { GameEventManager.GameStart += GameStart; GameEventManager.GameOver += GameOver; startPosition = transform.localPosition; renderer.enabled = false; rigidbody.isKinematic = true; enabled = false; } private void GameStart () { distanceTraveled = 0f; transform.localPosition = startPosition; renderer.enabled = true; rigidbody.isKinematic = false; enabled = true; } private void GameOver () { renderer.enabled = false; rigidbody.isKinematic = true; enabled = false; }
PlatformManager 도 마찬가지로 수정합니다.
void Start () {
GameEventManager.GameStart += GameStart;
GameEventManager.GameOver += GameOver;
objectQueue = new Queue<Transform>(numberOfObjects);
for (int i = 0; i < numberOfObjects; i++) {
objectQueue.Enqueue((Transform)Instantiate(
prefab, new Vector3(0f, 0f, -100f), Quaternion.identity));
}
enabled = false;
}
private void GameStart () {
nextPosition = startPosition;
for(int i = 0; i < numberOfObjects; i++){
Recycle();
}
enabled = true;
}
private void GameOver () {
enabled = false;
}SkylineManager 도 마찬가지로 아래와 같이 수정합니다. void Start () {
GameEventManager.GameStart += GameStart;
GameEventManager.GameOver += GameOver;
objectQueue = new Queue<Transform>(numberOfObjects);
for(int i = 0; i < numberOfObjects; i++){
objectQueue.Enqueue((Transform)Instantiate(
prefab, new Vector3(0f, 0f, -100f), Quaternion.identity));
}
enabled = false;
}
private void GameStart () {
nextPosition = startPosition;
for(int i = 0; i < numberOfObjects; i++){
Recycle();
}
enabled = true;
}
private void GameOver () {
enabled = false;
}

'유니티 > 스크립트' 카테고리의 다른 글
| [런게임] 유니티 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 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 게임 이벤트들 (0) | 2014.01.13 |
게임 오버
void Start () {
GameEventManager.GameStart += GameStart;
GameEventManager.GameOver += GameOver;
gameOverText.enabled = false;
}
private void GameOver () {
gameOverText.enabled = true;
instructionsText.enabled = true;
enabled = true;
}Runner 에 추가하고 값을 -6으로 설정합니다,그리고 이것을 체크하여 그 밑으로 떨어지면 gameOver 이벤트를 발생하게 합니다. public float gameOverY;
void Update () {
if(touchingPlatform && Input.GetButtonDown("Jump")){
rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange);
touchingPlatform = false;
}
distanceTraveled = transform.localPosition.x;
if(transform.localPosition.y < gameOverY){
GameEventManager.TriggerGameOver();
}
}
'유니티 > 스크립트' 카테고리의 다른 글
| [런게임] 유니티 3D로 러너 게임 만들기 - 파워업! (0) | 2014.01.14 |
|---|---|
| [런게임] 유니티 3D로 러너 게임 만들기 - 이벤트 사용하기 (0) | 2014.01.14 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 게임오버 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - GUI 와 게임시작 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 게임 이벤트들 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 길의 종류 (0) | 2014.01.13 |
GUI 와 게임 시작
현재 우리는 game start 이벤트를 가지고 있습니다. GUI를 생성하고 매니저 클래스에서 이것을 사용할 것입니다.
우리의 scene에 텍스트 라벨을 하나 더할것 입니다. 우리가 오브젝트 그룹들을 편리하게 관리하기 위해서, 빈 게임 오브젝트를 만들고 포지션은 (0,0,0)으로 설정하고 이것의 이름을 GUI라고 정합니다. 빈 게임 오브젝트에 guiText 컴포넌트를 생성하고 하위에 추가합니다. (Component / Rendering / GUIText). GUIText의 Anchor 필드값을 middle center로 맞춥니다.
첫번째 오브젝트의 이름은 Game Over Text 이고, Text 필드값에 "GAME OVER"를 입력하고 Font Size는 40, Font Style은 bold로 설정합니다. 위치를 (0.5, 0.2, 0)로 수정하면 화면의 밑에 나타날 것입니다.
두번째 오브젝트의 이름은 Instructions Text이고, 또한 bold로 맞추고 font size는 20, 그리고 text필드에는 "press Jump (x or space) to play"를 설정합니다. 위치는 (0.5, 0.1, 0)로 수정합니다.
세번째 오브젝트는 Runner Text이고, text "RUNNER"이고, 스타일 bold, 그리고 font size 는 60으로 설정하고. 위치는 (0.5, 0.5, 0)로 설정합니다.
GUIManager 클래스를 생성하고 Managers 폴더에 집어넣고 GUIText 변수들을 만듭니다. 새로운 오브젝트 GUI Manager를 생성하고 스크립트를 컴포넌트에 붙입니다. 그리고 매너저의 하위 에
붙입니다. 그리고 각 텍스트 오브젝트를 필드에 할당해줍니다.
using UnityEngine; public class GUIManager : MonoBehaviour { public GUIText gameOverText, instructionsText, runnerText; }




Start 메서드에서는 gameOverText 를 enabled를 false로 설정하여 보이지 않게 설정하고, Update 메서드에서는 점프 버튼을 누를시 game-start event 상태로 변경되게 됩니다. void Start () {
gameOverText.enabled = false;
}
void Update () {
if(Input.GetButtonDown("Jump")){
GameEventManager.TriggerGameStart();
}
}GameStart. 우리는 이 메서드를 사용해서 text를 없어지게 할것이다. Update 메서드에서도 더이상 호출이 되지 않습니다. private void GameStart () {
gameOverText.enabled = false;
instructionsText.enabled = false;
runnerText.enabled = false;
enabled = false;
}GameStart 메서드를 우리의 매니저 클래스에 더해줍니다. void Start () {
GameEventManager.GameStart += GameStart;
gameOverText.enabled = false;
}'유니티 > 스크립트' 카테고리의 다른 글
| [런게임] 유니티 3D로 러너 게임 만들기 - 이벤트 사용하기 (0) | 2014.01.14 |
|---|---|
| [런게임] 유니티 3D로 러너 게임 만들기 - 게임오버 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - GUI 와 게임시작 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 게임 이벤트들 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 길의 종류 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 점프와 점프 실패 (0) | 2014.01.13 |
게임 관련 이벤트들
현재 게임은 플레이 버튼을 누르면 즉시 실행되며, 플레이어가 길 아래로 추락해도 게임이 끝나지도 않습니다. 우리가 원하는 것은 게임 타이틀 화면으로 시작하고 점프 버튼 중 하나를 누르면 새로운 게임을 시작 한다는 말과 함께 플레이어가 죽으면 게임이 끝나는 것입니다
위와 같은 방법을 구현하기 위해서는 세가지 이벤트들을 구현해야 됩니다. 첫번째는 게임 실행시 Start 메서드에서 구현합니다. 나머지 두가지는 게임 시작과 게임오버인데 이것은 사용자 정의 방식을 필요로합니다. 우리는 이것들을 관리하기 위해서 간단한 이벤트 매니저를 생성할것입니다.
Managers 폴더를 만듭니다.그리고 GameEventManager라는 C# 스크립트를 생성합니다. 우리는 GameEventManager 를 스테틱 클래스로 만들것이고 이안에 GameEvent 딜리게이트를 집어넣을것입니다. manager 클래스는 MonoBehaviour 를 상속받지 않으며 오브젝트에도 붙지 않습니다.

public static class GameEventManager {
public delegate void GameEvent();
}gameEvent 타입을 사용합니다. manager 에 두가지 타입을 더합시다. GameStart 와 GameEnd. 이제 다른 스크립트에서 이벤트를 구독하여 이벤트를 호출 할수있습니다.public static class GameEventManager {
public delegate void GameEvent();
public static event GameEvent GameStart, GameOver;
}public static class GameEventManager {
public delegate void GameEvent();
public static event GameEvent GameStart, GameOver;
public static void TriggerGameStart(){
if(GameStart != null){
GameStart();
}
}
public static void TriggerGameOver(){
if(GameOver != null){
GameOver();
}
}
}'유니티 > 스크립트' 카테고리의 다른 글
| [런게임] 유니티 3D로 러너 게임 만들기 - 게임오버 (0) | 2014.01.13 |
|---|---|
| [런게임] 유니티 3D로 러너 게임 만들기 - GUI 와 게임시작 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 게임 이벤트들 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 길의 종류 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 점프와 점프 실패 (0) | 2014.01.13 |
| [런게임] 유니티 3D로 러너 게임 만들기 - 플랫폼(길) 생성하기 (0) | 2014.01.13 |
길의 종류
게임을 좀더 재미있게 하기 위해서 두가지 길을 더 추가 하겠습니다. 한가지 길은 Runner이 길 위에 있을시 속도가 느려지는 것이고 나머지 하나는 속도가 빨라지는 것 입니다. 우리는 두가지 physic materials을 만들고 두가지 색상을 만듭니다 그리고 길에 랜덤하게 이것을 사용합니다.
Platform Regular PMat 2번 복사합니다. 이름을 Platform Slowdown PMat, 그리고 Platform Speedup PMat이라고 설정합니다. 또한 비슷한 방식으로 Platform Regular Mat를 두번 복제하고 이름을 지읍시다. friction값을 0.15 그리고 0으로 설정하고, 색상은 (255, 255, 0) 그리고 (60, 130, 255)으로 설정합니다.

PlatformManager 를 수정할것입니다. 우리는 두가지 배열을 더해서 랜덤하게 위에서 설정한 깂들을 사용할 것입니다.public Material[] materials; public PhysicMaterial[] physicMaterials; 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; 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; } } }


'유니티 > 스크립트' 카테고리의 다른 글
| [런게임] 유니티 3D로 러너 게임 만들기 - GUI 와 게임시작 (0) | 2014.01.13 |
|---|---|
| [런게임] 유니티 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 |
점프와 점프 실패
우리는 길을 가지고 있다, 우리는 이 게임을 좀더 업그레이드 할수있다. 우리는 유니티의 물리 엔진을 사용하여 점프를 구현할 것이다. 점프와 떨어지는 것을 구현할려면 콜라이더가 필요하다. Rigidbody 컴포넌트를 Runner 에 추가하자(Component / Physics / Rigidbody). 우리는 특정방향으로 회전하거나 이동하는것을 원하지 않으므로, constrain 값을 freezing Z position 과모든 rotation axes에 체크하자.
길위를 움직일때 어떠한 physic material 이 일어납니다. physic material 을 생성하고 모든 필드를 0으로 설정하고 combine options은 둘다 max로 설정합니다.
Runner PMat를 Runner folder 폴더에 넣고, Runner의 박스 콜라이더에 집어넣는다.
Runner 의 위치를 (0, 2, 0)로 설정하고 길 위로 떨어트린다. 그리고 플레이 버튼을 눌러서 어떤일이 일어나는지 봐라!


Runner는 오른쪽으로 이동하다 보면 구멍에 떨어지게 됩니다. 길을 빠르게 지나가도 다시 떨어지게 되있습니다. 하지만 길의 옆면에 충돌이 발생할 경우 이상한 일이 일어납니다.
Update함수에서 위치를 변경하기 때문입니다. 우리는 물리엔진을 그대로 두고 forces를 적용해야 됩니다.
Update 에서 Translate 을 부르는걸 제거합니다((Runner 스크립트). 대신에 우리는 유니티 collision 이벤트 메서드를 부릅니다(OnCollisionEnter ,OnCollisionExit ) – 길위에 부딪히거나 떨어질때 호출됩니다. 길위에 터치되면 우리는 가속도가 적용되어 속도가 빨라집니다.
acceleration를 5로 설정합시다.
using UnityEngine; public class Runner : MonoBehaviour { public static float distanceTraveled; public float acceleration; private bool touchingPlatform; void Update () { distanceTraveled = transform.localPosition.x; } void FixedUpdate () { if(touchingPlatform){ rigidbody.AddForce(acceleration, 0f, 0f, ForceMode.Acceleration); } } void OnCollisionEnter () { touchingPlatform = true; } void OnCollisionExit () { touchingPlatform = false; } }
이 작업을 하기 전에 한가지 더 할 일이 있습니다. Runner PMat을 복사하고, Platform Regular PMat이라고 지정해서 Platform 폴더에 집어넣습니다. friction 값은 0.05로 설정하고 physic material을 Platform prefab에 드래그합니다.
우리의 길은 약간의 마찰력을 제공하지만 Runner은 움직일수 있는 충분한 가속도가 있습니다.



Runner에 점프 관련 변수를 더합니다. 우리는 수평과 수직을 조작할수 있도록 float대신 Vector3 클래스를 사용할 예정입니다. 필드의 값을 (1, 7, 0)로 설정합니다.
Update 함수에 아래 내용을 추가하면 Runner이 점프버튼을 누를시 점프하게 될 것입니다.
public Vector3 jumpVelocity; void Update () { if(touchingPlatform && Input.GetButtonDown("Jump")){ rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange); } distanceTraveled = transform.localPosition.x; }

void Update () {
if(touchingPlatform && Input.GetButtonDown("Jump")){
rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange);
touchingPlatform = false;
}
distanceTraveled = transform.localPosition.x;
}
'유니티 > 스크립트' 카테고리의 다른 글
| [런게임] 유니티 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 |
runner.unitypackage

