1 minute read


음 일기?

요즘 마음이 조급해서 뭐든 후다닥 구현하려고 하니 공부한 것들을 금세 잊어버린다. 내 텐션 찾자~

이번 주랑 다음 주는 로코모션 프로젝트 뜯어보고 구현해 보는 걸로 하자.

로코모션이 제대로 만들어지니 캐릭터가 이동하기만 해도 재밌더라!! 내 프로젝트도 ALS처럼 구현이 잘 되었으면 좋겠다ㅎㅎ


그리고 캐릭터 관련 클래스들을 싹 고쳐야 할 것 같다.

메시를 관리하는 코드가 난잡하고, 무기 종류별로 메시를 전환해 주는 코드도 이렇게 쓰면 안 될 것 같음

무기들을 다 enum으로 관리해서 예쁘게 만들어보자.

지금 장착된 무기 종류에 맞게 애님 블루프린트를 바꾸어 주었는데, 아예 스테이트 머신으로 레이어를 쌓는게 맞다.

애님 블루프린트는 가급적 캐릭터마다 한 개씩 만들어 두는 게 좋겠다…ㅎㅎ


마음을 좀 내려놓으니까 언리얼이 재밌다 !!!! 이 마음가짐으로 프로젝트 쭉 진행해 보자🤭


0. 개요

  • Foot IK Offset
  • 애님 블루프린트
  • 트레이스


1. Foot IK

1.1. IK Setting

image

짱 신기하다!!!!!!!

  • Mannequin에 타기팅된 체인을 기반으로 IK 리타기팅


1.2. Foot Rotation


Foot IK Component

  1. Actor Component를 부모로 하는 클래스 생성
  2. foot_lfoot_r 위치를 기반으로 lineTrace를 통해 양 발이 닿는 지면 위치 계산
  3. 지면 위치를 기반으로 Normal Vector를 계산한 후 발이 회전할 경사각 저장
  4. TickCompoenetRInterpTo 함수를 호출해 양 발 회전값 보간


Animation Graph

image

  1. FootIK 클래스의 양 발 회전 변수를 본 트랜스폼 인자로 설정


1.3. Hip Offset


Foot IK Component

  1. 캐릭터의 Capsule Component 위치 변경
  2. 현재 캡슐 컴포넌트와 낮은 곳에 있는 발을 기준으로 하는 컴포넌트의 위치 보간
  3. Hipfoot 정보를 불러와 위치 벡터 보간


Animation Graph

image

  • 발의 회전값을 구한 후 pelvis의 위치 변경
  • 2 본 IK 노드를 두어 발부터 골반까지의 관절 연결



ezgif com-crop

결과 화면


티스토리 블로그를 참고해 코드를 작성했다. 동작 방식과 구현 과정이 잘 정리되어 있다!

이벤트 그래프 부분은 애님 인스턴스 클래스에서 따로 작성했다.



#. 구현하면서~

  • 엉망이 되어버린 클래스 코드들을 개선하는 중이다.
    • 근데 어쩌다보니 다 뜯어버려야 하는 상황이 와버림
      • 앞으로는 설계부터 제대로 준비하고 코드를 쓰자…


  • ​ 그리고 틈틈히 C++ 공부도 해두기
    • 요즘 기본기 한계를 여실히 느끼고 있다.🥲


  • IK릭에서 캐릭터의 발 위치를 변경했을 때는 관절이 자연스럽게 움직였는데, 문제가 생겼다.

    image

    • 경사가 크면 무릎 관절이 부자연스럽게 꺾인다…!

    image

    2본IK 적용 전, 후

    2본IK 노드를 적용하면 무릎 관절이 안쪽으로 꺾인다.

    • 애니메이션 그래프에서도 foot과 thigh를 2본IK로 연결하면 무릎 관절 위치가 바뀌더라.
    • foot bone을 2 본 IK 노드로 연결하지 말고, IK릭 Goal을 변수로 만들어 연결하는 방법을 찾아보자.
    • 근데 사실 IK릭 본도 2본IK 구조일 것 같아서 큰 차이가 있을 지는 모르겠음


Leave a comment