프로젝트 이름에 들어가는 암살기능을 드디어 구현한다. 암살 시스템을 위해서는 AI의 감지 레벨이나 플레이어가 벽에 은신하는 기능등 다양한 기능이 필요하지만 일단 암살하는 애니메이션을 실행하는 기능을 구현해보자. 해당 기능은 이전에 Finisher를 구현할 때 구현해보았다. 이를 구현하기 위해 플레이어와 적의 Rotation과 Location을 변경했다. 하지만 이번에 구현하기 위해 비슷한 기능을 찾아보니 언리얼엔진5에서 출시된 모션 워핑이라는 기능이 있었다. 새 기능은 해봐야 제맛이니 새로운 방법으로 같은 기능을 구현해보자.
캐릭터의 루트 모션이 타깃과 일치하도록 동적으로 정렬하는 기능
관련문서: https://docs.unrealengine.com/5.1/ko/motion-warping-in-unreal-engine/
FVector TargetLoc = TargetCharacter->GetActorLocation() - TargetCharacter->GetActorForwardVector()*137.f; //137은 오차
FRotator TargetRot = TargetCharacter->GetActorRotation();
MotionWarpingComp->AddOrUpdateWarpTargetFromLocationAndRotation(TEXT("AssassinTarget"), TargetLoc, TargetRot)
Root Motion을 사용하면서 Actor의 Transform을 변경하기에 너무 좋다. 다음에 Climbing이나 Finisher를 구현할 때도 Motion Warping을 구현해야겠다. 코드내용도 훨씬 가독성 좋아진다. 다만 아쉬운 부분은 nofity에 Target이름을 String으로 적어줘야 된다는 점이다. Name을 등록하고 Enum으로 관리하여 선택하는 방법이 더 좋을것 같다.