미니게임 제작 06
앞으로는 간단한 게임들을 만들어보며 추가적인 기능에 대해 공부를 해보려한다. 간단한 것부터 만들기 시작하여 만든 결과물을 레퍼런스 하여 덩치를 조금씩 키워나가는 과정을 밟아보자. 지식이 많지 않아 부족할 수 있지만, 하는데까지 해보겠다.
오늘은 Enemy 오브젝트에 간단한 애니메이션을 추가하고, 플레이어와 부딛혔을 때의 처리를 해보려고 한다. 일단은 Enemy가 플레이어 오브젝트에 부딪힐 경우 부딪힌 Enemy 오브젝트가 사라지게 해보겠다.
이전 글에서 몬스터의 포지션이 겹치는 현상이 발생했는데, 이 문제는 Enemy의 RigidBody에 대해 테스트 해보다가 되돌려 놓지 않은 키네마틱 리지드바디에 대한 설정 때문이었다. 이전 글의 본문에서는 다이나믹 설정에 무게를 300으로 해두었다고 설명했기 때문에 이 부분을 다시 설정대로 돌려놓겠다.
Rigidbody2D의 BodyType를 Kinematic에서 Dynamic으로 바꿔주고 mass값을 300으로 바꿔주었다.
몬스터끼리도 콜라이더가 제대로 작용하여 겹처지지 않는 모습이다.
이제, 해당 Enemy에 간단한 애니메이션을 추가하고, 플레이어와 부딛혔을 때의 로직 처리를 해볼 것이다.
먼저 Enemy가 이동할 때의 간단한 애니메이션으로, 기존의 스프라이트에 살짝만 변형을 준 스프라이트를 새로 만들었다. 위의 그림처럼 움직일 것이다.
이렇게 생성된 2개의 스프라이트를 Enemy Prefab 오브젝트에 드래그 & 드롭한다.
애니메이션 파일은 에셋 폴더 아래에 Animation 폴더에 저장한다. 앞으로 Enemy의 종류가 추가될 수 있기 때문에 애니메이션 이름은 Enemy01Idle으로 지었다.
애니메이션을 유니티에서 오픈하여 속도를 0.5로 바꿔주었다.
기존에 프로젝트 창의 Enemy Prefab은 지우고, Enemy 게임 오브젝트의 이름을 Enemy01으로 바꾸고 프로젝트 창에 드래그 & 드롭하여 저장한다.
EnemySpawner 게임 오브젝트의 스크립트에 위와 같이 기존에 있던 Prefab이 사라져 Missing으로 바뀌어 있을 테니, 새로운 Enemy01 Prefab을 할당해준다.
애니메이션이 적용된 모습이다.
이제, 플레이어가 Enemy에 충돌 시에 Enemy를 삭제하도록 해보자.
플레이어가 적 개체와 충돌했을 때, 적 개체가 사라지게 하기 위해서는 먼저 충돌한 게임 오브젝트가 적 개체인지 확인을 해야한다. 다시 Enemy01 Prefab를 열어보자.
위 사진과 같이 태그를 설정할 수 있다. Add Tag를 누른 뒤 Enemy 태그를 추가해보자.
태그를 추가했고, Enemy01 오브젝트에 태그 설정까지 해주었다.
PlayerControl.cs
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "Enemy")
{
Debug.Log("적 개체 제거!");
Destroy(other.gameObject);
}
}
OnCollisionEnter 콜백 함수는, 충돌이 일어난 시작점에 호출되는 함수이다. 위 코드를 PlayerControl 스크립트에 추가했다. 부딪힌 게임 오브젝트의 Tag가 “Enemy”라면, 해당 객체를 제거하도록 한다.
Enemy가 생성되어 플레이어에게 다가오고, 부딪히면 콘솔창에 메시지가 나타나고 해당 게임오브젝트가 삭제되는 모습이다.
오늘은 랜덤하게 생성되는 Enemy에 간단한 애니메이션을 추가하고, 플레이어와 충돌했을 때의 처리를 구현해보았다. 다음에는 이 충돌에 대해 어떤 처리를 할 지 구상하고 게임에 적용시켜 볼 것이다.