あけましておめでとうございます!本年もよろしくお願いいたします
さて 3D 猫の移動はできましたが、アニメーションが全くないので猫が歩いているように見えませんでした
というわけで今回はアニメーションをつけてみたいと思います(ついでに地面にテクスチャを貼る)
スポンサードリンク
まずは Assets フォルダ配下に Animations フォルダを追加し、さらにその直下に CatAnimator という名前で Animation Controller を追加します
作った Animation Controller をダブルクリックして Animator ビューを開くとアニメーションのステートマシン設定が表示されます
ここへ Idle、Walk、Dash のステートを追加し、遷移条件判定用のパラメータ(Speed)の追加、各ステートへの遷移方向の接続、アニメーションの切り替わりポイントの調整、遷移条件の追加、Has Exit Time フラグ(アニメーションの完走強制)の解除などを下記のように設定します
設定した Animation Controller は Cat の子要素の cu_cat プレハブにドラッグドロップして Animator の Controller に指定します
ついでに無機質な地面のテクスチャとして
芝生のテクスチャを Asset Store からダウンロードしてインポートしました
テクスチャの Material を Ground の Plate に向かってドラッグドロップして、シェーダーを Mobile/Diffuse、繰り返しの設定 Tile を X, Y ともに 10 に指定しました
スクリプト側も修正
using UnityEngine; using UnityStandardAssets.CrossPlatformInput; using System.Collections; using UnityEditor.Animations; /// <summary> /// 入力制御クラス /// </summary> public class InputController : MonoBehaviour { /// <summary> /// 制御対象のキャラクターコントローラー /// </summary> public CharacterController PlayerController; /// <summary> /// 制御対象のアニメーター /// </summary> public Animator PlayerAnimator; /// <summary> /// メインカメラ /// </summary> public Camera MainCamera; /// <summary> /// Use this for initialization /// </summary> public void Start() { this.MainCamera = Camera.main; } /// <summary> /// Update is called once per frame /// </summary> public void Update() { if (this.PlayerController == null) { return; } // 移動方向を決める var dx = CrossPlatformInputManager.GetAxis("Horizontal"); var dz = CrossPlatformInputManager.GetAxis("Vertical"); if (Mathf.Abs(dx) + Mathf.Abs(dz) <= 0) { this.PlayerAnimator.SetFloat("Speed", 0); return; } this.PlayerController.transform.rotation = Quaternion.Euler(0, -Mathf.Atan2(dz, dx) * Mathf.Rad2Deg - this.MainCamera.transform.rotation.eulerAngles.y, 0); // 単純移動 var speed = new Vector3(dx, 0, dz).magnitude; this.PlayerController.SimpleMove(this.PlayerController.transform.forward * speed * 0.5f); if (this.PlayerAnimator == null) { return; } this.PlayerAnimator.SetFloat("Speed", speed * 2f); } }
Animator.SetFloat() で Speed という名前のフラグに猫の移動速度を設定することで、ステートマシンの条件遷移を発火するようにしています
移動なしの場合は Speed に 0 を指定して Idle 状態になるような補正もかけました
最後に InputController に生やした PlayerAnimator のプロパティに CatAnimator を指定した cu_cat をドラッグドロップして Animator をスクリプトから参照できるようにします
さてこれで動かしてみました
3D 猫が駆け回る感じが出ましたね