Unreal5/Engine

[Anim, Coll] 캐릭터 공격 판정, 죽는 모션

taene_ 2024. 8. 13. 19:02

< 충돌 채널의 설정 >

캐릭터 액션의 충돌 판정

  • 월드가 제공하는 충돌 판정 서비스를 사용한다.
  • 월드는 크게 세 가지의 충돌 판정 서비스를 제공한다. (LineTrace, Sweep, Overlap)
  • 월드 내 배치된 충돌체와 충돌하는지 파악하고, 충돌한 액터 정보를 얻을 수 있다.

 

트레이스 채널과 충돌 프로필 생성

  • 충돌 판정 기능을 구현하기 위해서는 언리얼 엔진이 제공하고 있는 기본적인 물리 설정에 별도로 프로젝트 상황에 맞춰 채널이나 프로필을 생성해주는 것이 좋다.
  • 액션 판정을 위한 트레이스 채널의 생성: ABAction, 기본 반응(default response)은 무시
  • 캐릭터 캡슐용 프로필: ABAction 트레이스 채널에 반응, 오브젝트 타입은 Pawn
  • 스켈레탈 메시용 프로필: 랙돌(Ragdoll) 구현을 위해 주로 활용된다.
  • 기믹 트리거용 프로필: 폰 캡슐에만 반응하도록 설정, 오브젝트 타입은 WorldStatic
  • Edit - Project Settings - Collision 에서 트레이스 채널과 프로필 생성

 

애니메이션 노티파이

  • C++ 클래스의 AnimNotify를 상속받는 클래스 생성(ex. AnimNotify_AttackHitCheck)
  • 새로만든 AnimNotify_AttackHitCheck 클래스에서 AnimNotify의 Notify()를 override해서 사용
  • 애니메이션 에디터 창에서 공격 판정을 넣고 싶은 원하는 프레임에 Notifies 채널(Notifies 바로 아래 채널)에 우클릭 - Add Notify
  • 이때, Owner가 우리가 선언한 캐릭터인지 체크하고 맞을 경우 공격을 판정하라고 명령을 내릴 것인데 이 캐릭터를 사용할때마다 #include "CharacterBase.h" 와 같이 캐릭터에 대한 폴더의 헤더를 추가해줘야 하고 이러면 의존성이 생긴다. 노티파이 기능의 경우 공용으로 여러 종류의 캐릭터가 있을 때 같이 사용되는 것이 좋은데 사용할때마다 헤더를 추가하는 것은 바람직하지 않다. 따라서 좀 더 범용적으로 사용할 수 있게 만들기 위해 인터페이스를 구현해 준다.
  • 인터페이스의 구현은 Interface 폴더에 Unreal Interface를 상속받아 구현한다.

 

< 공격 판정의 구현 >

월드 트레이싱 함수의 선택

  • 세 가지 카테고리로 원하는 함수 이름을 얻을 수 있다. {처리방법}{대상}{처리설정}
  • 카테고리 1: 처리 방법
    • LineTrace: 지정한 방향으로 선을 투사해 어떤 물체와 충돌하는지 파악한다.
    • Sweep: 위와 유사하지만 선이 아닌 어떤 도형을 지정한 방향으로 투사해 어떤 물체와 충돌하는지 파악한다.
    • Overlap: 투사하는 것이 아닌 지정한 영역에 큰 범위의 도형을 설정해서 해당 볼륨 영역과 물체가 충돌되는지 파악한다.
  • 카테고리 2: 대상
    • Test: 무언가 감지되었는지를 테스트
    • Single / AnyTest: 감지된 단일 물체 정보를 반환 ( LineTrace, Sweep - Single / Overlap - AnyTest )
    • Multi: 감지된 모든 물체 정보를 배열로 반환
  • 카테고리 3: 처리 설정
    • ByChannel: 채널 정보를 사용해 감지
    • ByObjectType: 물체에 지정된 물리 타입 정보를 사용해 감지
    • ByProfile: 프로필 정보를 사용해 감지

 

캐릭터 공격 판정의 구현 예시

  1. 캐릭터의 위치에서 시선 방향으로 물체가 있는지 감지한다.
  2. 작은 구체를 제작하고 시선 방향으로 특정 거리까지만 투사한다.
  3. 하나의 물체만 감지한다.
  4. 트레이스 채널을 사용해 감지한다.

=> {Sweep}{Single}{ByChannel}

 

물리 충돌 테스트

  • 디버그 드로잉 함수를 사용해 물리 충돌을 시각적으로 테스트
  • 90도로 회전시킨 캡슐을 그리기
    • Origin
    • HalfHeight
    • Radius

 

Dead 애니메이션 몽타주

  • 죽는 모션의 경우에는 바로 재생할 수 있도록 Enable Auto Blend Out 기능을 해제해준다.