- 「Unity5 で、自分で作成した人型モデルを利用する(移動)」で作成したプロジェクトを使います。
- 上記のプロジェクト内の PlayerMove.unity シーンを元に、
PlayerMoveAnim.unity シーンを作成します。
- File -> Open Scene -> Assets/Scenes の下の PlayerMove.unity シーンを開きます。
- File -> Save Scene as ... -> Assets/Scenes の下に PlayerMoveAnim.unity シーンとして保存します。
- 人型 Character で使う動作アニメーションを用意します。
ここでは Unity 標準の Standard Assets を使います。
Assets -> Import Package -> Characters -> Allが選択された状態で -> Import
Projectウィンドウの Assets/Standard Assets/Characters/ThirdPersonCharacter/Animation/
の下に人型Characterの動作アニメーションがImportされます。
- Hierarchy ウィンドウの AsianBoy に Animator Controller コンポーネントを追加します。
- ProjectウィンドウのAssetsに Animators フォルダを生成します。
Assetsで右クリック -> Create -> Foler -> Animators
- ProjectウィンドウのAssets/Animators フォルダに Animator Controller を生成し、
名前を AsianBoyAnimController に変更します。
Assetsで右クリック -> Create -> Animator Controller
- Animator ウィンドウを表示します。
上のメニューバーから -> Windoow -> Animator
Animatorウィンドウが表示されます。"Layers" や "Parameter" は表示/非表示の切替ができますが、非表示の場合は表示に切り替えておきましょう。
- Animatorウィンドウに表示されているのは「キャラクタの状態」と「状態遷移」です。
- Animatorウィンドウで "Idle" 状態を追加します。この状態のMotionを "HumanoidIdle" に設定します。
このMotion(= Animation)はStandard Assets/Characters/ThirdPersonCharacter/Animation/に含まれていいます。
- Animatorウィンドウで "Walk" 状態を追加します。この状態のMotionを "HumanoidWalk" に設定します。
- Animatorウィンドウで "Idle" 状態から "Walk" 状態への状態遷移を定義します。
Animatorウィンドウ内の Idle の上で右クリック -> Make Transition -> Walk の上までドラッグする
-> Idel状態からWalk状態への矢印が生成される。
- Idle状態からWalk状態への遷移を行うための、条件変数 MovingSpeed を作成します。
Animatorウィンドウの Parametersから"+"をクリックして -> Float を選択し、-> 名前を MovingSpeed と入力する。-> 初期値は 0.0 のままで大丈夫
- Animatorウィンドウ内のIdle状態からWalk状態への遷移の矢印を左クリックで選択し、Inspector内のConditionsで
"+"をクリックします。
遷移条件を "MovingSpeed", "Greater", "0.1" と指定します。
- Walk状態からIdle状態への状態遷移を定義します。
Animatorウィンドウ内のWalk状態の上で右クリックして "Make Transition" を選択し、
Idle状態の上までドラッグします。
Walk状態からIdle状態に矢印が生成されるので、その上でクリックし、InspectorのConditionで"+"をクリックして、
遷移条件を "MovingSpeed", "Less", "0.1" と指定します。
- Hierarchy ウィンドウで AsianBoy を選択してから、ProjectウィンドウのAssets/AnimController から PlayerAnimController を
Inspectorウィンドウの Animator の Controller にドラッグします。
- ProjectウィンドウのAssets/Scenes で右クリックして Create -> C# Script -> PlayerMoveAnim を生成する。内容を次のように変更する。
PlayerMoveAnim.cs |
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMoveAnim : MonoBehaviour {
public float velocity = 1.3f;
private CharacterController charController;
private Animator animator;
void Start () {
charController = gameObject.GetComponent<CharacterController>();
animator = gameObject.GetComponent<Animator>();
}
void Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 moveDirection = new Vector3(0, 0, 0);;
if (charController.isGrounded) {
moveDirection = new Vector3(h, 0, v);
}
float MovingSpeed = velocity * moveDirection.magnitude;
if (MovingSpeed > 0.1f) {
animator.SetFloat("MovingSpeed", MovingSpeed);
} else {
animator.SetFloat("MovingSpeed", 0.0f);
}
transform.LookAt(transform.position + moveDirection);
moveDirection.y += Physics.gravity.y;
charController.Move(velocity * Time.deltaTime * moveDirection);
}
}
|
- ProjectウィンドウのAssets/Scriptsから PlayerMoveAnim を、Hierarchy ウィンドウの AsianBoy 上にドラッグする。
Inspectorウィンドウに "Player Move Anim (Script)" というコンポーネントが追加されたことを確認する。
前に追加した "Player Move (Script)" は使わないのでチェックをはずしておく。
- をクリックして実行してみます。
キーボードの矢印キー(↑, ↓, ←, →)または 'w', 'a', 's', 'd'
キーで AsianBoy が移動します。
状態によって人型キャラクタのアニメーションが切り替わるのがわかります。
ですが動作の切り替わりが少々緩慢に見えます。
- Animatorウィンドウで、「Idle状態からWalk状態への状態遷移」と「Walk状態からIdle状態への状態遷移」
をそれぞれ選択して、Inspectorウィンドウの "Has Exit Time" のチェックをはずします。
これが設定してあると、状態遷移にいつも決まっただけの時間がかかってしまいます。
- Sceneを保存します。
既に PlayerMoveAnim.unity シーンを作成していましたので、上書きします。
File -> Save Scenes
- ここで説明した Unity のプロジェクトファイルはこちら Mecanim2.zip。