마우스를 드래그하면 캐릭터의 허리가 휘도록 해보겠다.
우선 BP_ThirdPersonCharacter를 BP_TPC로 카피한다.
ABP_Many도 ABP_MannySkeletonRotate로 카피한다
BP_TPC의 AnimClass를 ABP_MannySkeletonRotate로 지정한다.
게임모드오버라이드에서 BP_TPC를 지정해준다. Play시 BP_TPC가 나타난다.
BP_TPC에 roll과 pitch 변수를 float 타입으로 만든다.
EventGraph의 Camera Input Block뒤에 Control Rotation의 Pitch와 Yaw를 저장할 Set Pitch Set Roll을 추가해준다.
ABP_MannySkeletonRotate에 BeginPlay Event를 오버라이드하고 CastToBP_TPC Out을 변수로 승격해서 PlayerCharacter변수를 만들어주고
추가로 다음 변수를 만들어준다.
MyBlueprint Functions에 다음함수를 오버라이드하고
다음과 같이 Player Character의 Pitch와Roll을 지역변수 Pitch와 Roll에 저장해준다. PlayerCharacter의 Pitch와 Roll은 PropertyAccess노드를 이용했다.
AnimGraph에서 Transfom Bone을 3개를 StateMachine과 Pose사이에 넣어주면 LocalToComponent는 자동으로 생긴다.
Transfom Bone을 클릭하고 Detail에서 SkeletalControl을 spine_02,03,04차례대로 선택해주고
Rotation을 Add to Existing으로 변경해준다.
변수 Pitch와Roll을 이용해 MakeRotator노드에 연결해주고 Transform Bone의 Rotation과 연결해준다.
잘보면 Pitch는 X(Roll), Roll은 Z(Yaw)와 연결되어 있는데 이건 Controller Rotation과 Spine의 축이 달라서 그런것 같다.
마지막으로 BP_TPC FollowCamera를 Mesh의 자식으로 만들고
ParentSocket을 Head로 한다.
적당한 위치로 조정한다.
플레이 해보면 마우스를 움직이면 캐릭터의 허리가 앞뒤 좌우로 휘는걸 볼수 있다. 문제는 움직일때도 허리가 휘어 있다.
따라서 서 있을대만 허리가 휘게 해보겠다. 이전의 Transform Bone을 짤라내서 AnimGraph를 원래대로 돌려놓고 좌상 Locomotion을로 들어가자
다시 Idle로 들어가서
붙여줍니다.
플레이해보면 이동후 멈추었을때 이동시의 컨트롤러Rotation이 적용되어 허리가 너무 휜다.
따라서 BP_TPC 에서 Roll을 Set하기전 다음과 같이 캐랙터의 현재 로테이션의 차분만 Roll에 적용하여 오차를 없애준다.
이 멋진 강좌는 다음 사이트에서 참조했습니다.
'레퍼런스' 카테고리의 다른 글
Widget GamePause GameEnd 위젯 (0) | 2024.04.19 |
---|---|
매크로 함수 이벤트 차이 Macro Function Event (0) | 2024.04.17 |
Behavior Tree EQS - Unreal Document (0) | 2024.04.08 |
designerd.tistory (0) | 2024.03.29 |
비헤이버트리 AI Perception (0) | 2024.02.27 |