/ UNITY

미니게임 제작 06

앞으로는 간단한 게임들을 만들어보며 추가적인 기능에 대해 공부를 해보려한다. 간단한 것부터 만들기 시작하여 만든 결과물을 레퍼런스 하여 덩치를 조금씩 키워나가는 과정을 밟아보자. 지식이 많지 않아 부족할 수 있지만, 하는데까지 해보겠다.

오늘은 Enemy 오브젝트에 간단한 애니메이션을 추가하고, 플레이어와 부딛혔을 때의 처리를 해보려고 한다. 일단은 Enemy가 플레이어 오브젝트에 부딪힐 경우 부딪힌 Enemy 오브젝트가 사라지게 해보겠다.

game_41

이전 글에서 몬스터의 포지션이 겹치는 현상이 발생했는데, 이 문제는 Enemy의 RigidBody에 대해 테스트 해보다가 되돌려 놓지 않은 키네마틱 리지드바디에 대한 설정 때문이었다. 이전 글의 본문에서는 다이나믹 설정에 무게를 300으로 해두었다고 설명했기 때문에 이 부분을 다시 설정대로 돌려놓겠다.

game_42

Rigidbody2D의 BodyType를 Kinematic에서 Dynamic으로 바꿔주고 mass값을 300으로 바꿔주었다.

game_43

몬스터끼리도 콜라이더가 제대로 작용하여 겹처지지 않는 모습이다.

이제, 해당 Enemy에 간단한 애니메이션을 추가하고, 플레이어와 부딛혔을 때의 로직 처리를 해볼 것이다.

game_44

먼저 Enemy가 이동할 때의 간단한 애니메이션으로, 기존의 스프라이트에 살짝만 변형을 준 스프라이트를 새로 만들었다. 위의 그림처럼 움직일 것이다.

game_45

이렇게 생성된 2개의 스프라이트를 Enemy Prefab 오브젝트에 드래그 & 드롭한다.

game_46

애니메이션 파일은 에셋 폴더 아래에 Animation 폴더에 저장한다. 앞으로 Enemy의 종류가 추가될 수 있기 때문에 애니메이션 이름은 Enemy01Idle으로 지었다.

game_47

애니메이션을 유니티에서 오픈하여 속도를 0.5로 바꿔주었다.

game_48

기존에 프로젝트 창의 Enemy Prefab은 지우고, Enemy 게임 오브젝트의 이름을 Enemy01으로 바꾸고 프로젝트 창에 드래그 & 드롭하여 저장한다.

game_49

EnemySpawner 게임 오브젝트의 스크립트에 위와 같이 기존에 있던 Prefab이 사라져 Missing으로 바뀌어 있을 테니, 새로운 Enemy01 Prefab을 할당해준다.

game_50

애니메이션이 적용된 모습이다.

이제, 플레이어가 Enemy에 충돌 시에 Enemy를 삭제하도록 해보자.

플레이어가 적 개체와 충돌했을 때, 적 개체가 사라지게 하기 위해서는 먼저 충돌한 게임 오브젝트가 적 개체인지 확인을 해야한다. 다시 Enemy01 Prefab를 열어보자.

game_51

위 사진과 같이 태그를 설정할 수 있다. Add Tag를 누른 뒤 Enemy 태그를 추가해보자.

game_52

태그를 추가했고, Enemy01 오브젝트에 태그 설정까지 해주었다.

PlayerControl.cs

void OnCollisionEnter2D(Collision2D other)
{
    if (other.gameObject.tag == "Enemy")
    {
        Debug.Log("적 개체 제거!");
        Destroy(other.gameObject);
    }
}

OnCollisionEnter 콜백 함수는, 충돌이 일어난 시작점에 호출되는 함수이다. 위 코드를 PlayerControl 스크립트에 추가했다. 부딪힌 게임 오브젝트의 Tag가 “Enemy”라면, 해당 객체를 제거하도록 한다.

game_53

Enemy가 생성되어 플레이어에게 다가오고, 부딪히면 콘솔창에 메시지가 나타나고 해당 게임오브젝트가 삭제되는 모습이다.

오늘은 랜덤하게 생성되는 Enemy에 간단한 애니메이션을 추가하고, 플레이어와 충돌했을 때의 처리를 구현해보았다. 다음에는 이 충돌에 대해 어떤 처리를 할 지 구상하고 게임에 적용시켜 볼 것이다.