Unity 5.2로 '유니티 애니메이션 에센셜' 6. 고급 캐릭터 애니메이션 따라하기.

* 블랜드 트리를 이용한 애니메이션:
- 'BlendTree' 씬을 새로 만들어 그곳에서 Girl-1708girl의 Animator 컴포넌트에 새로 GirlBlend란 명명한 애니메이션 콘트롤러를 적용, Girl에는 GirlCtrl.cs를 비활성시키고 GirlCtrlBlend.cs를 새로 추가한 뒤 테스트.

* Animator 창에서 우클릭, Create State-From New Blend Tree 클릭, 만들어진 상태를 더블클릭하면 Blend Tree 모드로 전환된다. Blend Tree 상태를 선택, Inspector 창에서 Blend Type: 1D에서 2D Freeform Cartesian으로 변경, + 를 클릭, Add Motion Field를 선택하여 9개의 Field 생성. 차례로 Motion에 애니메이션 파일들 적용하고 Pos X, Pos Y를 설정해준다.

Motion
Pos X
Pos Y
Change Animation Speed
HumanoidIdle
0
0
1
StandQuaterTurnLeft
1
0
1
StandQuaterTurnRight
-1
0
1
HumanoidWalk
0
0.5
1
HumanoidRun
0
1
1
HumanoidWalkLeftSharp
-1
0.5
1
HumanoidWalkRightSharp
1
0.5
1
HumanoidRunLeft
-1
1
1
HumanoidRunRight
1
1
1

Horz, Vert란 이름으로 Float 변수를 생성해 주고 Parameters 설정에서 선택해 둔다.
GirlCtrlBlend.cs는 GirlCtrl.cs를 기본으로 수정한 것으로,

private int HorzFloat = Animator.StringToHash ("Horz");
private int VertFloat = Animator.StringToHash ("Vert");

void Start(){ animator = Body.GetComponent(); }
void Update(){
     float vert = Input.GetAxis ("Vertical");
     float horz = Input.GetAxis ("Horizontal");

     animator.SetFloat (HorzFloat, horz, 0.2f, Time.deltaTime);
     animator.SetFloat (VertFloat, vert, 0.2f, Time.deltaTime);
}
으로 기존 애니메이션 animator.SetTrigger("Run"); 식의 호출 형태에서 바꾼 것.
이렇게 처리해 두면 속도와 방향에 따라 자동으로 애니메이션을 자연스럽게 섞어서 표현해준다. 현재는 뒷쪽 걷기를 설정하지 않아 뒤로 이동할 경우 애니메이션이 적용되지 않는데 이건 뒷쪽 걷기 애니메이션, 뒷쪽 걷기 오른쪽, 뒷쪽 걷기 왼쪽 애니메이션 상태를 추가하면 간단히 해결될 문제다.
잘 실행되는데 점프의 경우 어찌 처리해야할지 애매하다.

17/9/21 목

Unity 5.2로 '유니티 애니메이션 에센셜' 7. 블랜드 셰이프, IK, 무비 텍스처 중 블랜드 셰이프 애니메이션 따라하기.

3ds Max 2013에서 Sphere로 간단 입 달린 구 만들고 복사하여 입 벌린 모양, 입을 오므린 모양으로 변형한 뒤 원본을 선택, Morpher 추가. Pick Object from Scene으로 변형한 얼굴 모양 2개를 선택하면 슬라이드를 조절하여 입 다문 모양, 벌린 모양, 오므린 모양으로 조절이 가능하다. 이 상태에서 FBX로 export.
유니티에서 불러들인 뒤(Inspector 창에서 Import BlendShapes에 체크 되어 있는 걸 확인) Hierarchy창에 끌어놓는다. Inspector창의 Skinned Mesh Renderer 컴포넌트를 보면 Blend Shapes 항목이 보이는데 수치를 0~100 사이로 조절하는 것에 따라 역시 입 다문 모양, 벌린 모양 등으로 변형이 가능하다. anim과 controller를 생성한 뒤 블랜드 셰이프 키프레임을 움직여 애니메이션 시키는 것도 가능하다.
스크립트에선 Mesh.BlendShapeCount 변수, SkinnedMeshRenderer.SetBlendShapeWeight 함수로 조종이 가능하단다.

http://docs.unity3d.com/ScriptReference/SkinnedMeshRenderer.SetBlendShapeWeight.html 에서 설명을 볼 수 있다.