본문 바로가기
엔진 공부/Buildbox_Classic

07. 첫 프로젝트 만들기 | 충돌 처리 및 점수 획득

by OhEasy 2023. 3. 5.
728x90

지난 글에서 아쉽긴 하지만

캐릭터 쪽으로 이동하는 적을 구현 하였다.

적을 어떻게든 캐릭터 쪽으로 보내는 것에 성공하였으므로

각 오브젝트 간 충돌 시 처리 되는 부분을 구현한다.


충돌 처리

각 오브젝트간 충돌 시 처리는 다음과 같다.

캐릭터
방어막
캐릭터
충돌할 수 없음
게임 오버
( 캐릭터 체력 = 0 )
방어막
충돌할 수 없음
점수 획득
( 적 체력 = 0 )
게임 오버
( 캐릭터 체력 = 0 )
점수 획득
( 적 체력 = 0 )

적은

1. 방어막과 충돌했을 때는 충돌한 적이 파괴되고 점수를 획득한다.

2. 캐릭터와 충돌했을 경우 캐릭터가 파괴 되고 게임 오버 된다.

매우 간단해 보인다.

캐릭터간 충돌 처리를 설정해보자.

충돌 처리 방법은 간단하다.

씬에 올려놓은 오브젝트를 선택한 뒤

오른쪽 화면을 보면 properties라는 공간이 있는데

Collision Type

Collide = 충돌함

No Collide = 충돌 안함

Destroy Type

1. No Destroy : "파괴 안함"

2. Destroy Character : 캐릭터를 파.괴.한.다.

3. Destroy Enemy : 적을 파.괴.한.다.

4. Destroy All : 모든 것을 파.괴.한.다.

캐릭터는 처음에 리소스를 드래그드롭으로 넣을 때 설정했으니

Enemy ( 적 )은 어떻게 설정할 수 있을까?

방법은 매우 간단하다.

Properties 위쪽에 보면 Preset이 보이는데

거기서 Enemy로 바꿔주면 된다.

위에서 봤던 Destroy Type이 판단하는 녀석은

캐릭터, 적, 전부 인데

여기서 구현하고자 하는 게임의 방어막은

파괴되면 안되는 녀석이다.

파괴되면 안되는 녀석은 Platform으로 설정해주면 된다.

그래서 캐릭터, 방어막, 적의 설정 값은 다음과 같다.

구분
Preset
Collision Type
Destroy Type
캐릭터
Character ( 변경 불가 )
설정 불가
설정 불가
방어막
Platform
Collide
Destroy Enemy
Enemy
Collide
Destroy Character

여기까지만 하고 플레이를 해보면

방어막이 적과 충돌 시 방어막도 없어지는 것을 확인할 수 있다. ㅋ

이제 적과 충돌해도 파괴 되지 않는 방어막을 구현해보기 전에

Destroy Type이라는 것에 대해 좀 알아보면

 

Destroy Type

직역하면 파괴 타입인데

사실상 파괴는 아니고

충돌 대상이라고 보는 것이 맞다.

아래에서 설명하겠지만 Damage 컴포넌트의 여부에 따라

없다면 Destroy Type으로 설정 된 대상과 자신을 파괴하고

있다면 Destroy Type으로 설정된 대상에게 데미지를 입히는 것

일단 Damage 컴포넌트도 추가가 안되어 있고,

때렸는데 살아있는지를 판단할 체력 (Health)도 추가가 되어있지 않다.

Damage와 Health 컴포넌트 추가는

왼쪽에서 추가시킬 대상을 선택하고

오른쪽 Add Component를 눌러 추가시키면 된다.

방어막의 경우 아래처럼 셋팅을 해주었고

혹시 모르니 체력은 넉넉하게 했다.

적의 경우는 아래처럼 셋팅을 해주었다.

캐릭터의 경우 체력이 필요하지 않기 때문에

( 충돌하면 바로 게임오버 )

별도로 설정해주지 않았다.

위와 같이 전부 셋팅해주면

방어막이 적을 막고도 파괴되지 않는다.

이렇게 충돌 시 적을 파괴하는 방어막을 구현하였다.

이제 적을 파괴했을 때 점수를 얻게 하면 된다.


점수 획득 UI

일단 파괴한 적의 수량을 보여줄 텍스트가 필요하다.

World UI 화면으로 넘어가서

라벨에 있는 디폴트 폰트를 화면에 추가해주자.

화면에 추가했다면 추가한 디폴트 폰트를 선택하고 일단 이름을 바꿔주었다.

뭔가가 많아질수록 이름을 알아보기 쉽게 바꿔주는게 좋다.

아래쪽 프로퍼티를 보면

Funtion에 Score가 있다.

변경해주고 아래쪽을 보면 Score Type이 있는데

funtion == Score여야 나온다.

거리나 코인은 아닌 것 같으니 포인트로 바꿔준다.

보여줄 UI는 생성해두었으니

이제 포인트를 주는 방법만 남았다.

( 사실 포인트 얻게 하는 방법이 제일 찾기 어려웠다. )

포인트는 Action을 통해 획득할 수 있다.

Action도 처음 오브젝트들을 추가했던 것처럼 파일을 드래그드롭 한 뒤

Action으로 해주면 알아서 액션으로 생성 된다.

액션 타입을 보면 뭐가 많다...

뭐가 타입이 많긴 많은데 아래를 보면

리워드 포인트가 있다.

무서운건 굳이 안건드리지말고 None으로 두고

파괴한 적의 수량만 볼거니까 스코어는 Reward Points는 1로 두자

이제 좀 과정이 복잡해진다.


점수 획득 Action 적용

아래에서 설명하는 포인트 획득 과정은

방어막이 [ 적 파괴 -> 생성된 점수 오브젝트 파괴 -> 점수 획득 액션 재생 ]순서로 진행 된다.

딱히 오브젝트를 추가하지 않고 [ 적 파괴 -> 점수 획득 액션 재생 ]만 사용해도 똑같이 점수를 획득할 수 있다.

하지만

RPG 게임을 만들고 있고, 적을 파괴했을 때

파괴된 적의 위치에서 아이템을 드랍시키고 싶은 경우가 아래와 같이 하면 된다.

우선 안보이는(투명한) Object를 하나 만든다.

( 체력 설정 안해도 됨 )

point로 만들어주었다.

그 뒤 액션을 드래그해서 게임 화면에 생성 시킨다.

생성 시킨 액션을 선택하고

CTRL + C를 눌러 해당 액션을 복사한 뒤 생성되어 있는 액션을 삭제해준다.

그 뒤 위에 만들어 둔 point 오브젝트를 선택한뒤

Defeated Animation(사망 시 애니메이션)에 마우스를 올려두고 연필 모양 아이콘을 클릭한다.

그러면 Animation Editor 창이 나오는데

여기에다가 아까 복사했던 액션을 CTRL + V 로 붙여넣기 한다.

그러면 Position 값이 매우 이상한데 (0,0)으로 맞춰주고

보기 싫으니 Opacity (투명도)는 0으로 맞춰주고

오른쪽 아래쪽에 작게 있는 Loop도 꺼주고 창을 닫아준 뒤

적 총알의 사망 애니메이션을 창을 켜준다.

Animation Editor 창의 왼쪽 Objects에서 아까 만들어 두었던 point 오브젝트를

드래그로 추가해주고 좌표를 ( 0,0) 으로 맞춰준다.

그리고

Preset = Enemy, Destroy Type = Destroy Character로 변경해준 뒤

Add Componenet를 눌러 Spawner를 추가해준다.

추가한 Spawner의 Spawn Rate를 큰수로 넣은 이유는

매우 작은 수를 넣을 경우 여러개가 생성 되어

1개를 파괴했음에도 높은 점수를 획득할 수 있기 때문에

큰 수를 넣어주면 완료!

( 이전 글을 읽었다면 Spawn Rate의 값과 상관 없이 일단 한번 생성 시킨 다는 것을 알 수 있다. )

728x90

댓글