개요
대미지가 가해졌을 때 대미지 리액션을 출력하는 것을 개발했다.
이때 대미지 리액션을 하기 전 캐릭터의 회전에 대해 3가지 옵션을 개발했다.
- 맞기 전의 회전을 유지, 방향에 따른 대미지 리액션 애니메이션 출력
- 대미지를 준 캐릭터를 바라보게 설정, 정면에서 맞는 대미지 리액션 애니메이션을 출력
- 대미지 리액션 애니메이션의 루트 모션에 의해 맞은 방향으로 이동하도록 캐릭터의 회전을 설정
개발 내용

- OnRegister()에서 액터 컴포넌트를 소유한 캐릭터가 대미지를 받을 경우, HandleDamageEvent가 호출되도록 델리게이트에 함수를 바인딩했다.

- 대미지를 받았을 때 호출되는 HandleDamageEvent() 함수이다.
- 먼저, 인자로 넘어온 DamageType을 캐스팅해 재생해야하는 대미지 리액션 크기를 얻어온다.
- 대미지를 일으킨 액터의 위치를 이용해 대미지를 받은 방향을 얻어오고 Multicast RPC로 대미지 리액션 애니메이션을 재생한다.

- 대미지를 받은 방향을 계산하는 함수이다. 내적과 외적을 이용해 각도로 리턴한다.

- 대미지 리액션 몽타주를 재생하는 Multicast RPC 함수이다. 서버에선 캐릭터가 바라볼 방향을 설정한다.
- 대미지 리액션에 따라 몽타주를 재생한다.

- 대미지를 준 캐릭터를 바라보는 2번 방법에 해당하는 옵션이다. 각도를 라디안으로 바꾸고 Cos과 Sin을 이용해 XY를 얻어 대미지를 준 캐릭터를 향하는 벡터를 구한다.
- 현재 캐릭터 회전의 Yaw에 대미지를 준 캐릭터를 향하는 벡터의 Yaw를 더한 회전으로 캐릭터의 회전을 설정해 대미지를 준 캐릭터를 바라보도록 설정한다.
- 이후, bSetCharacterRotationToHitDirection 옵션이 켜져있다면 정면에서 맞는 대미지 리액션 애니메이션을 출력하게 된다.

- 루트 모션에 의해 맞은 방향으로 이동하도록 캐릭터의 회전을 설정하는 3번 방법에 해당하는 옵션이다.
- 2번 방법과 마찬가지로 대미지를 준 캐릭터를 향하는 벡터를 구하고 -를 곱해 캐릭터가 루트 모션에 의해 이동하고 싶은 방향을 구한다.
- UMADirectionalMontageData의 GetMontageRootMotionDirection()를 이용해 루트 모션에 의해 이동하게 될 방향을 구하고 루트 모션의 방향이 캐릭터가 이동하고 싶은 방향이 되도록 캐릭터의 회전을 설정한다.
두 옵션에 해당하지 않으면 1번 방법으로 실행되게 된다.


- 대미지 리액션 애니메이션 재생하는 PlayDamageReactMontage() 함수이다. 캐릭터 회전 방향을 설정하는 옵션에 첫번째가 설정되어 있다면 정면에서 맞는 애니메이션이 재생되도록 하며 이외의 경우에는 인자로 넘어온 대미지 리액션 크기과 방향을 이용해 애니메이션 몽타주와 몽타주 섹션 이름을 얻어와 대미지 리액션 애니메이션을 재생한다.
개발 결과
1. 회전을 건드리지 않고 그대로 애니메이션을 재생하는 방법
2. 대미지를 준 캐릭터를 바라보게 하는 방법
3. 맞은 방향으로 루트 모션이 재생되는 방법
'Unreal Engine 프로젝트 > 개인 공부 프로젝트(RPG 전투, Multiplay, AI)' 카테고리의 다른 글
| Multiplay RPG 전투 개발 - Soft Lock 시스템 (0) | 2024.10.16 |
|---|---|
| Multiplay RPG 전투 개발 - Targeting Component (0) | 2024.10.16 |
| Multiplay RPG 전투 개발 - Combat Component(공격 판정) (0) | 2024.10.16 |
| Multiplay RPG 전투 개발 - Combat Component(회피 동작) (0) | 2024.10.16 |
| Multiplay RPG 전투 개발 - Combat Component(콤보 공격) (0) | 2024.10.16 |