Control Rig Goal 바꾸기
공격시 기본 애니메이션은 정해진 동작을 한다. Goal을 만들어 동적으로 Goal의 위치를 변경해 Bone의 Transform을 바꿔
https://youtu.be/uuFWqFExlW4?t=47
펀치 애니메이션은 찾기 귀찮아서 만들었다. 다만 UE5 SK_Manny를 사용해서 Control Rig를 다시만들어야 한다.
2024.05.14 - [레퍼런스/IK] - Control Rig Animation
SK_Manny를 우클릭하고 CR_UE5MannyGoal
컨트롤리그 에디터를 열어 UseSpecificAnimation>Punch를 선택해준다.
solve Graph에 Get Transform, Set Transform 노드를 추가하고 spine_03을 선택해주고 Transform과 Value를 연결해주고 컴파일후 에러가 없는지 확인한다. 노드를 추가할때 Transform을 꼭 선택한다. Translate가 선택될때가 많다.
Transform과 Value의 삼각형을 클릭해 확장한후 Translation만 연결하면 Transform값이 0이되므로 포즈가 이상하게된다.
Transform중 Rotation값을 변경시키기 위해 transform과 Rotation을 곱해준후 Rotation에 넣어준다. FromEuler의 Z값을 바꿔보면 Manny의 허리가 돌기 시작한다.
하이라키트리의 스크롤바를 맨 아래로 내리고 우클릭후 New Control을 만들고 이름을 initialTarget으로 만들어준다. 다리쪽에 빨간점이 생긴다.
애니메이션 프레임을 이동시켜 팔이 최대한 뻗는 포즈로 만들고 이 빨간점을 팔근처로 올려준다. 위치를 좀더 정확히 잡기위해 디테일에서 사이즈를 0.5로 줄여주자,
initialTarget을 우클릭후 SetOffset을 해주면 컴파일 후에도 포즈는 초기회 되지만 Target위치가 초기화 되지 않는다.
InitialTarget을 Duplicate해서 F2를 눌러 goalTarget으로 이름을 바꾼다
식별을 위해 디테일에서 색을 바꿔준다.
프리뷰에서 goalTarget위 위치를 약간 바꿔주고 우클릭후 SetOffsetTransform from Current를 해준다. 컴파일해준다.
현재상태에서애니메이션을 플레이해보면 빨간색 InitialTarget을 타격한다. 녹색 Goal을 치게 만들어보자.
GetTransform노드를 추가하고 spine_03을 지정하고 goalTarget을 끌어다 GetControl하면 자동으로 GetTransform이 추가된다. AimMath를 추가하고 다음과 같이 연결해준다.
3개의 노드를 복사해서 initialTarget으로 바꿔준다. 수학적으로 뭔짓을 하는지 이해는 안가지먄 spine03으로 부터 두타겟의 벡터를 구해서 두타켓의 회전량을 구하는듯 하다 회전각은 내적곱이라고 들었다.. 노드를 보면 한쪽에 인버스를 해서 곱하면 내적이 되는듯하다. 그리고 Translation이라는 용어가 많이 나오는데 공부하자.
2개의 AimMath rotation출력중 하나는 Inverse노드를 달아주고 Multiply한후 FromEuler와 연결된 Multiply노드의 Rotation에 연결해준다.
이제 goalTarget을 움직여보면 캐릭터의 허리가 회전해 자연스럽게 타겟을 치게된다.
애니메이션시퀀스를 교체하고 InitialTatget의 위치를 맞춰주고 SetOffer을 다시해주면 응용기 가능하다.
이제 이 컨트롤 리그를 애니메이션블루프린트에서 사용해보자. 애니메이션블루프린트를 하나만들고 애님그래프에 ControlRig를 추가하고 디테일에서 방금만든 컨트롤리그를 지정해준다.
버튼을 누루는 애니메이션을 연결해주고
컨트롤리그 노드를 선택하고 디테일에서 Input카테고리에서 goalTarget UsePin을 체크해주면
컨트롤리그 노드의 Input이 생긴다.
실제 게임에서 전달된 타겟위치는 월드이므로 컨트롤리그에서 리그좌표로 변경해야한다. FromWorldshemfmf cnrkgkrh
아래와 같이 연결한다.