Priv's Blog
Programming Basics: Unit 2 - Basic Gameplay) Lesson 2.4 - Collision Decisions 본문
Programming Basics: Unit 2 - Basic Gameplay) Lesson 2.4 - Collision Decisions
Priv 2021. 2. 14. 15:59출처
1. 서언
(영상: 링크 참조)
2. 동물 생성을 위한 새로운 메서드 만들기
여러분의 Spawn Manager는 보기에 좋은 것 같지만, 여전히 S 키를 눌러야 작동이 됩니다! 만약 여러분이 게임에서 동물들이 자동으로 생성되게 만들고 싶으시다면, 여러분의 첫 번째 사용자 지정 함수를 작성해볼 시간입니다.
(영상: 링크 참조)
-
SpawnManager.cs 내에 새로운 void SpawnRandomAnimal() {} 함수를 Update() 밑에 생성해주세요.
-
if문 코드를 잘라내기하여 새로운 함수에 붙여 넣어주세요.
-
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 키를 눌러야 합니다! 동물들이 타이머에 맞춰 생성되도록 만들어서 몇 초 간격으로 무작위로 나타나게 해야 합니다.
(영상: 링크 참조)
-
Start() 안에 InvokeRepeating을 사용하여 동물들이 간격에 따라 생성되도록 만드신 뒤에 테스트해주세요.
-
S 키 입력을 감지하는 if 문은 삭제해주세요.
-
새로운 private startDelay와 spawnInterval 변수를 선언하고 플레이 테스트 및 변수 값을 조정해주세요.
private float startDelay = 2;
private float spawnInterval = 1.5f;
void Start() {
InvokeRepeating("SpawnRandomAnimal", startDelay, spwanInterval);
}
4. collider와 trigger 컴포넌트 추가하기
동물들의 생성은 이제 완벽하고, 플레이어는 동물들을 향해 발사체를 쏠 수 있습니다. 하지만 발사체와 동물이 충돌했을 때 아무 일도 일어나지 않습니다! 만약 여러분이 발사체와 동물들이 충돌했을 때 파괴되기를 원하신다면, "colliders"라는 익숙한 컴포넌트를 적용해주어야 합니다.
(영상: 링크 참조)
-
animal 프리팹들 중에 하나를 더블-클릭하시고, Add Component > Box Collider로 가주세요.
-
Edit Collider를 클릭하시고, collider 핸들을 오브젝트를 감싸도록 드래그해주세요.
-
"Is Trigger" 체크박스를 클릭해주세요.
-
각각의 동물들과 발사체에도 해당 과정을 반복해주세요.
-
RigidBody 컴포넌트를 발사체에 추가하시고 "use gravity" 항목을 해제해주세요.
5. 충돌한 오브젝트 삭제하기
이제 동물들과 발사체가 trigger가 있는 Box Collider를 가지고 있으므로, 충돌 시 이를 파괴하기 위한 새로운 스크립트를 작성해야 합니다.
(영상: 링크 참조)
-
DetectCollisions.cs 스크립트를 새로 제작하고, 각각의 동물 프리팹을 추가하신 뒤, 스크립트 파일을 열어주세요.
-
마지막 } 전에 자동완성 기능을 사용해 OnTriggerEnter 함수를 추가해주세요.
-
OnTriggerEnter 안에 Destroy(gameObject); 추가하고 테스트해주세요.
-
OnTriggerEnter 안에 Destroy(other.gameObject);를 추가해주세요.
void OnTriggerEnter(Collider other) {
Destroy(gameObject);
Destroy(other.gameObject);
}
6. "Game Over" 메시지 출력하기
플레이어는 그들의 필드를 동물로부터 원하는 기간 동안 방어할 수 있지만, 여러분은 동물들이 플레이어를 지나쳐가서 게임에서 패배했을 때, 플레이어가 이를 알아챌 수 있도록 "Game Over" 메시지를 출력되게 만들어야 합니다.
(영상: 링크 참조)
-
DestroyOutOfBounds.cs 내에 동물들이 스크린의 하단에 닿았는지를 확인하는 else-if문을 작성하고, Game Over 메시지를 추가합니다:Debug.Log("Game Over!")
-
주석을 사용해 여러분의 코드를 정리해주세요.
-
Visual Studio를 사용하고 계신다면, Edit > Advanced > Format document (편집 > 고급 > 문서 서식)으로 가셔서 들여 쓰기 문제를 해결해주세요.
(Mac에서는 Edit > Format > Format Document (편집 > 서식 > 문서 서식) 순입니다.)
7. 내용 복습
(영상: 링크 참조)
- 새로 배운 기능들
-
동물들이 시간 간격마다 생성되고 화면 아래로 내려오도록 만들기
-
동물들이 플레이어를 지나쳐 갈 때, "Game Over" 메시지 출력시키기
-
발사체가 동물과 충돌하면, 두 오브젝트 모두 삭제하기
- 새로 배운 개념과 기술들
-
사용자 지정 메서드/함수 생성하기
-
InvokeRepeating()으로 코드 반복시키기
-
Collider와 Trigger
-
함수 재정의(Override)
-
로그 디버그 메시지 콘솔에 출력시키기