#16 AI Strafe Animation with Root motion
카테고리 없음

#16 AI Strafe Animation with Root motion

Root motion

UE4의 AI Controller에는 AI Move To나  Add Movement Input과 같이 AI를 움직이는 것을 쉽게 해주는 여러 함수가 있다. 그래서 맨 처음에 Enemy AI에서 이런 함수를 썼는데, 이 방식은 Animation과 실제 Mesh의 움직임이 조금 어색한 느낌을 지우기 힘들다. 이 방식은 Controller가 움직임을 넣으면 Character의 Velocity와 Direction이 바뀌고 이걸 이용해서 Animation을 일치하게 재생하는 원리다. 그렇다보니 특히 Strafe(게걸음) 같은 경우, 마치 슬라이딩 하는 듯한 느낌이 든다. 현재 Main Character가 그런 느낌이다.

뭔가 쑥쑥 움직여버리는게 슬라이딩하는 느낌

Root motion은 이 문제를 피하기 위해 만들어진 것인데, 실제로 애니메이션의 움직임을 그대로 쓸 수 있게 해준다. 애니메이터의 의도대로 쓸 수 있는 것이다. 여러 방식으로 애니메이션과 동기화할 수 있는데, 여기선 BlendSpace의 Parameter를 수정하는 방식으로 구현했다. 코드의 작동방식은 다음과 같다.

  1. Behavior Tree에서 일정확률로 Strafe Task를 수행한다.
  2. Strafe Task는 AnimInstance의 AnimationStatus를 변경한다. (Normal -> Strafe_Right)
  3. AnimInstace는 매 프레임(NativeUpdateAnimation())마다 AnimationStatus에 맞게 Speed와 Direction을 바꾼다.
    Strafe_Right 상태라면 MovementSpeed = StrafeSpeed, MovementDirection = 90.f;
  4. 이렇게 결정된 Speed와 Direction은 BlendSpace의 Parameter로 들어가고 그에 알맞는 애니메이션을 루트모션으로 재생한다.

결과

짤로 보면 애매한데, 실제로 보면 이게 더 걷는 것 같아 보인다.

* Strafe를 그림처럼 빙빙 돌게 하려면 AIController의 Focus를 타겟으로 설정해주면 된다.