Priv's Blog

Programming Basics: Unit 2 - Basic Gameplay) Lesson 2.4 - Collision Decisions 본문

Unity Learn/Pathway: Junior Programmer

Programming Basics: Unit 2 - Basic Gameplay) Lesson 2.4 - Collision Decisions

Priv 2021. 2. 14. 15:59

출처

 

Lesson 2.4 - Collision Decisions - Unity Learn

Overview: Our game is coming along nicely, but there are are some critical things we must add before it’s finished. First off, instead of pressing S to spawn the animals, we will spawn them on a timer so that they appear every few seconds. Next we will a

learn.unity.com


 

 

1. 서언


(영상: 링크 참조)

 

Lesson 2.4 - Collision Decisions - Unity Learn

Overview: Our game is coming along nicely, but there are are some critical things we must add before it’s finished. First off, instead of pressing S to spawn the animals, we will spawn them on a timer so that they appear every few seconds. Next we will a

learn.unity.com


 


 

2. 동물 생성을 위한 새로운 메서드 만들기

여러분의 Spawn Manager는 보기에 좋은 것 같지만, 여전히 S 키를 눌러야 작동이 됩니다!  만약 여러분이 게임에서 동물들이 자동으로 생성되게 만들고 싶으시다면, 여러분의 첫 번째 사용자 지정 함수를 작성해볼 시간입니다.

 


(영상: 링크 참조)

 

Lesson 2.4 - Collision Decisions - Unity Learn

Overview: Our game is coming along nicely, but there are are some critical things we must add before it’s finished. First off, instead of pressing S to spawn the animals, we will spawn them on a timer so that they appear every few seconds. Next we will a

learn.unity.com


 

  1. SpawnManager.cs 내에 새로운 void SpawnRandomAnimal() {} 함수를 Update() 밑에 생성해주세요.

  2. if문 코드를 잘라내기하여 새로운 함수에 붙여 넣어주세요.

  3.  S키가 누르면, SpawnRandomAnimal();이 호출됩니다.

 

void Update()
{
     if (Input.GetKeyDown(KeyCode.S))
     {
          SpawnRandomAnimal();
     }
}

void SpawnRandomAnimal()
{
     int animalIndex = Random.Range(0, animalPrefabs.Length);
     Vector3 spawnPos = new Vector3(Random.Range(-spawnRangeX, spawnRangeX), 0, spawnPosZ);
     
     Instantiate(animalPrefabs[animalIndex], spawnPos, 
     animalPrefabs[animalIndex].transform.rotation);
}

 


 

3. 시간 간격에 따라 동물 생성하기

사용자 지정 함수에 생성 코드를 저장했지만, 여전히 S 키를 눌러야 합니다! 동물들이 타이머에 맞춰 생성되도록 만들어서 몇 초 간격으로 무작위로 나타나게 해야 합니다.

 


(영상: 링크 참조)

 

Lesson 2.4 - Collision Decisions - Unity Learn

Overview: Our game is coming along nicely, but there are are some critical things we must add before it’s finished. First off, instead of pressing S to spawn the animals, we will spawn them on a timer so that they appear every few seconds. Next we will a

learn.unity.com


 

  1. Start() 안에 InvokeRepeating을 사용하여 동물들이 간격에 따라 생성되도록 만드신 뒤에 테스트해주세요.

  2. S 키 입력을 감지하는 if 문은 삭제해주세요.

  3. 새로운 private startDelayspawnInterval 변수를 선언하고 플레이 테스트 및 변수 값을 조정해주세요.

 

private float startDelay = 2;
private float spawnInterval = 1.5f;

void Start() {
    InvokeRepeating("SpawnRandomAnimal", startDelay, spwanInterval);
}

 


 

4. collider와 trigger 컴포넌트 추가하기

동물들의 생성은 이제 완벽하고, 플레이어는 동물들을 향해 발사체를 쏠 수 있습니다. 하지만 발사체와 동물이 충돌했을 때 아무 일도 일어나지 않습니다! 만약 여러분이 발사체와 동물들이 충돌했을 때 파괴되기를 원하신다면, "colliders"라는 익숙한 컴포넌트를 적용해주어야 합니다.

 


(영상: 링크 참조)

 

Lesson 2.4 - Collision Decisions - Unity Learn

Overview: Our game is coming along nicely, but there are are some critical things we must add before it’s finished. First off, instead of pressing S to spawn the animals, we will spawn them on a timer so that they appear every few seconds. Next we will a

learn.unity.com


 

  1. animal 프리팹들 중에 하나를 더블-클릭하시고, Add Component > Box Collider로 가주세요.

  2. Edit Collider를 클릭하시고, collider 핸들을 오브젝트를 감싸도록 드래그해주세요.

  3. "Is Trigger" 체크박스를 클릭해주세요.

  4. 각각의 동물들과 발사체에도 해당 과정을 반복해주세요.

  5. RigidBody 컴포넌트를 발사체에 추가하시고 "use gravity" 항목을 해제해주세요.

 


 

5. 충돌한 오브젝트 삭제하기

이제 동물들과 발사체가 trigger가 있는 Box Collider를 가지고 있으므로, 충돌 시 이를 파괴하기 위한 새로운 스크립트를 작성해야 합니다.

 


(영상: 링크 참조)

 

Lesson 2.4 - Collision Decisions - Unity Learn

Overview: Our game is coming along nicely, but there are are some critical things we must add before it’s finished. First off, instead of pressing S to spawn the animals, we will spawn them on a timer so that they appear every few seconds. Next we will a

learn.unity.com


 

  1. DetectCollisions.cs 스크립트를 새로 제작하고, 각각의 동물 프리팹을 추가하신 뒤, 스크립트 파일을 열어주세요.

  2. 마지막 } 전에 자동완성 기능을 사용해 OnTriggerEnter 함수를 추가해주세요.

  3. OnTriggerEnter 안에 Destroy(gameObject); 추가하고 테스트해주세요.

  4. OnTriggerEnter 안에 Destroy(other.gameObject);를 추가해주세요.

 

void OnTriggerEnter(Collider other) {
    Destroy(gameObject);
    Destroy(other.gameObject);
}

 


 

6. "Game Over" 메시지 출력하기

플레이어는 그들의 필드를 동물로부터 원하는 기간 동안 방어할 수 있지만, 여러분은 동물들이 플레이어를 지나쳐가서 게임에서 패배했을 때, 플레이어가 이를 알아챌 수 있도록 "Game Over" 메시지를 출력되게 만들어야 합니다.

 


(영상: 링크 참조)

 

Lesson 2.4 - Collision Decisions - Unity Learn

Overview: Our game is coming along nicely, but there are are some critical things we must add before it’s finished. First off, instead of pressing S to spawn the animals, we will spawn them on a timer so that they appear every few seconds. Next we will a

learn.unity.com


 

  1. DestroyOutOfBounds.cs 내에 동물들이 스크린의 하단에 닿았는지를 확인하는 else-if문을 작성하고, Game Over 메시지를 추가합니다:Debug.Log("Game Over!")

  2. 주석을 사용해 여러분의 코드를 정리해주세요.

  3. Visual Studio를 사용하고 계신다면, Edit > Advanced > Format document (편집 > 고급 > 문서 서식)으로 가셔서 들여 쓰기 문제를 해결해주세요.
    (Mac에서는 Edit > Format > Format Document (편집 > 서식 > 문서 서식) 순입니다.)

 


 

7. 내용 복습


(영상: 링크 참조)

 

Lesson 2.4 - Collision Decisions - Unity Learn

Overview: Our game is coming along nicely, but there are are some critical things we must add before it’s finished. First off, instead of pressing S to spawn the animals, we will spawn them on a timer so that they appear every few seconds. Next we will a

learn.unity.com


 

- 새로 배운 기능들

  • 동물들이 시간 간격마다 생성되고 화면 아래로 내려오도록 만들기

  • 동물들이 플레이어를 지나쳐 갈 때, "Game Over" 메시지 출력시키기

  • 발사체가 동물과 충돌하면, 두 오브젝트 모두 삭제하기

 

- 새로 배운 개념과 기술들

  • 사용자 지정 메서드/함수 생성하기

  • InvokeRepeating()으로 코드 반복시키기

  • Collider와 Trigger

  • 함수 재정의(Override)

  • 로그 디버그 메시지 콘솔에 출력시키기

 


 


수고하셨습니다!


Comments