수류탄 기능 구현하기

Ryan Ham·2024년 8월 14일
2

Unreal Engine

목록 보기
20/27
post-thumbnail

저번에는 수류탄이 Spawn되는 Location 및 Rotation을 Player Controller Rotation에 따라 다르게 잡는 것을 해보았다. 이제는 실제로 수류탄이 Character 주변에 떨어졌을때 Damage를 가하는 작업을 해보자.

Apply Damage VS Apply Radial Damage

Rifle을 발사했을때 데미지 이펙트를 가하는 로직은 LineTraceByChannel을 사용해서 Hit된 result에 Apply Damage를 통해 데미지를 가하는 방식이였다. 하지만 수류탄의 경우에는 수류탄이 떨어진 지점을 기준으로 구 형태의 데미지를 주어야 한다. 따라서 Apply Radial Damage 노드를 사용한다.

하지만, Apply DamageApply Radial Damage에는 사용법에서 다른 점이 있다. 가장 큰 차이점은 Apply Damage는 어떠한 대상에게 데미지를 줄지 정해준다면 Apply Radial Damage는 어떠한 대상에게 데미지를 제외시킬지를 정한다.

Apply Damage에서 데미지 가할 엑터 설정

기존 Rifle에서는 Apply Damage의 Damaged Actor 핀에 Trace Channel에 의해 감지된 Actor를 연결하였다.

Apply Radial Damage에서 데미지 제외할 엑터 설정

Apply Radial Damage는 Ignore Actors에 데미지를 제외할 엑터를 지정할 수 있다(지정하지 않으면 Damage Radius안의 모든 엑터에게 데미지 수행).


Apply Radial Damage의 중요 핀 분석

  • Base Damage

    Base Damage는 반경 내 모든 엑터에게 가해질 기본 피해량이다. 중심으로부터 데미지거리 감쇠에 해당하는 Do Full Damage를 false로 체크해 놓으면 반경 내 엑터들에게 동일한 데미지를 가한다.

  • Damage Radius

    피해가 적용될 반경

  • Origin

    Radial Damage 구의 중심점

  • Do FullDamage

    이 핀을 True로 설정하면 범위 안 엑터들에게 모두 동일한 데미지를 가한다. False로 지정하면 중심으로부터 구의 끝 표면까지 데미지가 거리에 따라 감쇠적으로 들어가게 된다.

  • Damage Prevention Channel

    필자는 이 핀 때문에 많은 고생을 했다. 이 핀의 설정을 통해 폭발의 중심과 엑터사이에 가로막는 물체에 의해 데미지를 받을 지 안 받을지를 설정할 수 있다. 수류탄을 던졌는데 만약 엑터가 반경안에 있다 할지라도 벽 뒤에 숨어있으면 데미지를 안받는 상황을 이 핀을 통해 재현할 수 있다.

    Default 값으로는 Visibility Channel이 설정 되어있는데, 이를 WorldStatic Channel로 바꾸니 문제가 해결되었다(필자는 폭발안에 있는 dummy 엑터의 collision preset을 BlockAll로 설정).


Radial Force

Apply Radial Damage로 데미지를 가하는 부분이 있다면 이제 물리적으로 데미지가 가해진 엑터를 튕겨내는 효과가 필요하다. 시각적으로 생각한다면, 중심을 기준으로 점점 커지는 sphere collision을 만들고 없어지는 물체를 만든다고 생각해보자. 처음에는 Radial Force와 Apply Radial Damage가 헷갈릴 수 있으니 둘의 차이를 명확히 이해해보자.

Radial Force의 여러 property를 하나씩 바꿔가면서 알맞은 효과를 찾아보자. 방사형 포스 컴포넌트의 반경, 임펄스의 세기, 포스의 세기 강제의 속성 값들을 조절하면서 이펙트를 결정하였다.


RagDoll

캐릭터가 죽으면 Set Simulate Physic을 활성화시켜 RagDoll 모션을 추가해봤다. AnimGraph에서 죽는 애니메이션을 만들어 추가해도 되지만, 간편하게 다양한 죽는 자세를 만드는데는 RagDoll은 정말 획기적인 기능이다.


최종 화면

캐릭터의 체력을 100으로 설정하고 수류탄의 중심점의 데미지를 200으로 설정하였다. 폭발 가운데 지점의 더미 엑터들은 사망하여서 RagDoll 상태로 변하였고 주변 더미 엑터들은 거리에 따른 데미지 감쇠효과를 받아 살아있는 모습을 확인할 수 있다.

수류탄이 터질때 나타나는 빨간색 구는 DrawDebugSphere로 만든 Apply Radial Damage의 영역이다. 캐릭터는 RagDoll이 된후 10초가 지나면 Destory하게 만들었다.

profile
🏦KAIST EE | 🏦SNU AI(빅데이터 핀테크 전문가 과정) | 📙CryptoHipsters 저자

0개의 댓글