🎮Unreal4/Blueprint

[UE4] IK 구현하기 -1 (Feet Data 구조체, Feet Trace)

공대 컴린이 2023. 2. 10. 20:11
728x90

⚒️ IK 구현 순서

캐릭터의 발 보다 위에 물체가 존재하면 발이 그만큼 올라가야 하고, 반대로 캐릭터의 발 아래 땅이 떨어져있다면 그만큼 발이 내려가야 한다. 

이렇게 움직이는 간격을 먼저 Feet Component에서 구한 뒤, 움직일 간격을 애니메이션 블루프린트에서 가져올 것이다.

이후 애니메이션의 Component 공간에서 Two Bone IK를 이용하여 발의 위치를 움직여줄 것이다.

(IK를 구현하는 내용은 매우 어려우니 차근차근 공부하자)

📚 IK 구현하기

가장 먼저, Feet Component를 만들고 Feet Data라는 구조체를 만들었다.

👣 Feet Data 구조체

  • LeftDistance
    - 왼발이 움직일 위아래 간격
    - 이때 Bone의 축이 부모부터 누적되면서, 축이 회전되어 발의 윗 부분은 Z축이 아닌 X축이다.

  • RightDistance
    - 오른발이 움직일 위아래 간격
    - 디자이너들이 Mesh를 디자인할 때, 캐릭터의 절반을 나눈 다음, 오른쪽이나 왼쪽을 먼저 디자인하고 대칭을 이루기 위해 반대편을 돌려서 붙인다. 따라서 오른발의 X축은 발의 아래 부분을 가리킨다.

  • PelvisDistance
    - 허리가 움직일 간격
    - 내리막길로 캐릭터가 내려갈 때 발이 내려가면 발과 연결된 허리도 함께 내려가게 되는데 이때의 발과 허리의 간격을 가리킨다.
    - Pelvis는 Z축 값을 사용한다.
  • LeftRotation
    - 왼발의 회전 값
    - 오르막길이나 내리막길에 발을 딛을 때 자연스럽게 발이 꺾이거나 회전되기 위해 필요한 값
  • RightRotation
    - 오른발의 회전 값
    - 왼발과 같은 기능이다.

이렇게 만들어진 Feet Data 구조체를 Feet Component에서 변수로 생성하여 초기화해주었다.

 

FeetComponent : Apply Inverse Kinematics

🔫 발이 움직이는 간격 범위 추적하기

FeetComponent : Trace

캐릭터의 발의 간격을 알아내기 위해 Line Trace 기능을 사용하였다.

 

Line Trace의 시작점은 캐릭터 Mesh의 중심점(위치)를 사용한다. 시작점이니 X와 Y는 Mesh의 Socket Location을 사용하면 되지만, Z축은 캐릭터의 Get Actor Location을 통해 구할 수 있다.

 

끝지점은 캐릭터의 발 위치에서 추적거리만큼 더 감소시키면 되는데, 이때 발의 위치는 캐릭터 Capsule Collision의 절반 위치를 빼서 구하면 된다. 따라서 캡슐의 절반을 구하는 Get Scaled Capsule Half Height 함수를 사용하여 발 위치를 구하고, 중심점의 Z값에서 발 위치를 빼고, 임의로 설정한 추적 거리 50 까지 빼면 끝지점을 구할 수 있다.

728x90