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: 프로필 정보를 사용해 감지
캐릭터 공격 판정의 구현 예시
- 캐릭터의 위치에서 시선 방향으로 물체가 있는지 감지한다.
- 작은 구체를 제작하고 시선 방향으로 특정 거리까지만 투사한다.
- 하나의 물체만 감지한다.
- 트레이스 채널을 사용해 감지한다.
=> {Sweep}{Single}{ByChannel}
물리 충돌 테스트
- 디버그 드로잉 함수를 사용해 물리 충돌을 시각적으로 테스트
- 90도로 회전시킨 캡슐을 그리기
- Origin
- HalfHeight
- Radius
Dead 애니메이션 몽타주
- 죽는 모션의 경우에는 바로 재생할 수 있도록 Enable Auto Blend Out 기능을 해제해준다.