Unity 강의 3일차 (4) - 피자 날리기 게임 4
본 강의는 다음 문서를 참고하여 제작하였습니다. 자세한 내용은 하단 링크를 참조하시거나 댓글로 질문 남겨주시면 성심성의껏 답변 드리겠습니다.
2.4강 - 충돌 판정 - Unity Learn
개요: 게임이 순조롭게 제작되고 있지만 마무리하기 전에 추가해야 할 중요한 요소가 있습니다. 먼저 S 키를 눌러 동물을 생성하는 대신, 몇 초 간격으로 나타나도록 타이머를 기반으로 동물을
learn.unity.com
게임의 마무리를 지어봅시다! 우선 S키를 눌러야만 동물이 생성되는것, 해결할 수 있을것같지 않나요? 랜덤 수를 생성하는 법도 배웠는데 말이죠!
또한 게임의 충돌도 배웠고, 게임 오브젝트의 제거도 배웠습니다. 그러면 피자를 날렸을 때 동물과 피자가 동시에 제거되서 피격 이벤트도 제작할 수 있을 것 입니다.
자자. 어려운 것은 하나도 없어 보이죠. 쭈우욱 가봅시다!
SpawnManager 스크립트를 다음과 같이 수정합시다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnManager : MonoBehaviour
{
public GameObject[] animalPrifabs;
private float startDelay = 2;
private float spawnInterval = 1.5f;
// Start is called before the first frame update
void Start()
{
InvokeRepeating("SpawnRandomAnimal", startDelay, spawnInterval);
}
// Update is called once per frame
void Update()
{
}
void SpawnRandomAnimal()
{
int animalIndex = Random.Range(0, animalPrifabs.Length);
int xPos = Random.Range(-20, 20);
Instantiate(animalPrifabs[animalIndex], new Vector3(xPos, 0, 20), animalPrifabs[animalIndex].transform.rotation);
}
}
헉! 뭐가 많이 바뀐것 같은데요?
하지만 천천히 보면 그리 바뀐것은 없는 걸 알 수 있습니다.
첫번째로 S키를 눌러서 랜덤한 위치를 할당하고 동물을 생성했던 작업이 SpawnRandomAnimal이라는 함수로 넘어갔습니다. 이 경우에는 잘라 붙여넣기 하면 되겠네요.
그리고 Start 메소드에 InvokeRepeating이라는 함수가 실행되었습니다. InvokeRepeating 함수는 시작할 함수 이름의 문자열을 첫번째 인자로, 처음 반복을 시작할 시간을 두번째 인자로, 그리고 반복할 시간 단위를 마지막 인자로 받습니다.
즉 2초가 지나면 1.5초마다 SpawnRandomAnimal 함수를 실행시키도록 한다는 뜻입니다. 매우 쉽죠?
마지막으로 동물과 피자가 닿으면 파괴되도록 만들면 끝입니다.
동물 프리팹에게 BoxCollider 컴포넌트를 추가합니다.
그 후 Edit Collider를 클릭한 후 오브젝트를 둘러싸도록 콜라이더 핸들을 드래그 합니다.
마지막으로 Is Trigger 체크박스를 선택합니다. 모든 동물 프리팹과 피자에도 동일하게 적용합니다.
피자에는 Rigidbody 컴포넌트를 추가하고, use gravity를 선택 해제합니다.
이제 피자와 동물들이 닿으면 없어지도록 스크립트를 생성합시다.
DetectCollision 스크립트를 생성하고 다음과 같이 작성합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DetectCollisions : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
Destroy(gameObject);
Destroy(other.gameObject);
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
해당 스크립트 컴포넌트를 피자나 동물에게 붙이면 이제 둘이 닿게 되면 없어지는 것을 확인할 수 있습니다.
게임이 완성되었습니다! 개인적으로는 동물의 속도가 너무 빠른 것 같으니 조금 조절해보도록 하겠습니다.
이번시간에만 함수를 생성해서 사용해보고, 코드를 반복해보며, 콜라이더와 트리거를 사용해서 충돌판정을 배워보았습니다.
고생많으셨습니다!