3D 캐릭터 리깅, 애니메이션 적용하기 등

이전 3ds Max에서 FBX로 내보내 유니티로 임포트한 파일에 애니메이션 적용하기. '유니티 애니메이션 에센셜' 5장 캐릭터 애니메이션의 기초 따라하기.

* FBX로 불러온 캐릭터 리깅 조정: 인간형일 경우 Inspector 창 Rig 탭에서 Animation Type: Humanoid로 설정. Configure 클릭한 뒤 Mapping, Muscles & Settings에서 리깅 제대로 되었는지 여부 확인, Done 클릭.

* 불러온 애니메이션 파일로 리타게팅 하기:
Assets > Import Package > Characters로 패키지 추가한 뒤 Standard Assets > ThirdPersonCharacter > Animation에서 HumanoidIdle, HumanoidJumpAndFall, HumanoidRun의 fbx 파일들을 복사하고 AnimatorController를 새로 생성하여 주인공 캐릭터에 적용한 뒤 Animator 창에서 Idle, Run, Jump 상태 생성하여 각각의 상태 선택한 뒤 Motion에 해당 애니메이션 파일 넣어 적용하기. Parameters에서 Idle, Run, Jump Trigger 변수 생성, 코드에서 달리기시 Run 트리거 호출, 멈출시 Idle 트리거 호출하게 하여 이동시 달리고 멈추면 아이들 애니메이션이 실행되게 하다.

* 애니메이션에 내장된 이동 유효/무효 선택:
걷기나 달리기 애니메이션엔 실제 앞으로 진행하는 모션이 애니메이션 호출시 실행되어 주인공이 앞으로 진행하는데 제자리 걸음으로 하고 싶을 경우 Animator 컴포넌트의 Apply Root Motion 체크를 해제하면 된다.

* 루트 모션 오프셋 교정:
앞으로 진행하는 루트 모션의 경우 비뚫어진 방향으로 진행할 수 있는데 이것의 경우 해당 애니메이션 파일 선택, Inspector 창의 Mirror에 표시된 Average Velocity를 보면 진행 방향이 표시된다. x방향에 약간의 값이 있을 경우 그 방향으로 점점 회전하게 되는데 Root Transform Rotation-Bake Into Pose에 체크한 뒤 Offset값을 조정하여 Mirror에 표시된 Average Velocity의 x값이 0이 되게 하면 똑바로 정방향으로 진행한다.
캐릭터가 바닥 위를 걷지 않고 너무 높거나 낮게 이동할 경우엔 Root Transform Position(Y)-Based Upon(at Start)를 Feat으로 맞춰주면 캐릭터 기본 y위치를 발을 기준으로 하게 된다.

'유니티 애니메이션 에센셜' 5장 캐릭터 애니메이션의 기초 따라하기 완료.

이전 160926test.sln의 YellowManCtrl.cs, Bullet.cs 코드(탱크 게임의 코드에 점프 기능과 애니메이션 구현을 넣어 살짝 바꾼 것)를 각각 주인공 여자와 총알 프리팹에 적용하고 주인공 가슴팍 쯤 위치에 BulletSpawnPoint를 빈 게임오브젝트로 생성하니 키보드로 회전, 달리기, 총알 발사까지는 구현이 되는데 점프 구현이 까다롭다. 현재 불러들인 여자 FBX는 눕혀져 불러지는 것이 기본이라 애니메이션 컨트롤러를 적용시키면 실행전엔 누워있지만 실행시 애니메이션대로 일어나는 형태가 되어 이동엔 문제가 없지만 RigidBody, Capsule Collider를 적용시킬 경우 아주 이상하게 구현된다. 예전 자동차 레이싱 게임 만들 때 바퀴의 축을 잡지 못해 헤메던 것과 비슷한 상황.

- RigidBody(Constraints-Freeze Rotation X,Y,Z 모두 체크), Capsule Collider 추가하고 기존의 Character Controller를 비활성화 하니 제대로 실행된다. 한데 점프시 가끔 원래의 아이들 상태로 애니메이션이 돌아가지 않는 문제가 발생. 이건 예전에도 똑같이 겪었던 문제인듯.

* 각 트렌지션들의 Settings-Transition Duration을 0.2, 0.5, 0.8등 적당히 주고 Interruption Source: Next State로 설정하니 애니메이션들이 훨씬 자연스러워졌다.

아이들에서 달리기, 달리기에서 아이들는 자연스럽고 아이들에서 점프도 그럭저럭 괜찮은데 달리기 중 점프의 경우 공중에서 점프중 달리기로 넘어가 좀 어색하거나 가끔 점프 중 멈춰서 아이들 상태로 애니메이션이 돌아가지 않는 버그가 있다.

PlayerCtrl.cs, CharacterMove.cs 은 test.unity, test2.unity 씬에 적용한 것으로 마우스로 바닥 클릭한 곳으로 주인공을 이동시키는 코드들.
GirlCtrl.cs, Bullet.cs은 keyboardMove.unity 씬에 적용한 것으로 화살표 상하좌우/wasd 키로 전후 이동, 좌우 방향 전환을 하고 스페이스키를 누르면 점프, 마우스 좌클릭이나 Ctrl키 클릭시 총알이 앞으로 날아가게 하는 코드들.
FollowCamera.cs는 공통으로 Main Camera에 적용하여 일정 거리에서 주인공을 따라가는 코드이고 화면을 클릭 드래그하는 것으로 카메라의 각도를 바꿀 수 있다.

17/9/18 월