Unityちゃんを移動させるところまで作りましたが、アニメーションしないので滑って移動しています。
なのでアニメーションをつけてちゃんと動いている感じを出したい。

名前を「PlayerAnimeController」にしました。名前はわかればなんでもいいです。
ダブルクリックするとAnimatorタブが開きます。

Entryから始まり、Exitで終わりになります。Any Stateはいつでも呼び出せるものと思っていいです。
ここにAnimation Clipを入れていくわけです。UnityちゃんにはあらかじめいくつかのAnimation Clipが含まれていますのでそれを利用します。

まずは何もしていない(Idle)状態を追加します。この中では、立っているStandingですかね。

歩かせたいのでWalkingを追加します。しかし、StandingとWalkingが繋がっていません。

ノードを選択して、右クリック「Make Transition」でノードを繋げます。

Standingで右クリック「Make Transition」からWalkingにつないで、歩き始めたらWalkingに移動する
Walkingで右クリック「Make Transition」からStandingにつないで、止まったらStandingに戻る
ノードを遷移するにもきっかけがないといけません。線をつないだだけでは何をきっかけ(トリガー)にして遷移すればいいかわからないので、きっかけを設定します。
まずがパラメータの作成です。今回の場合、移動になります。移動は移動量があるのでFloatにします。
ようは、歩いているとき、走っているときで移動量が違います。その移動量でアニメーションを変化させたいのでFloatにしました。

次に矢印を選択し、inspectorから「Has Exit Time」のチェックを外します。このチェックがついているとExit Timeまでアニメーションが変わりません。

では移動の値の設定です。
Floatの値を変更するのはSetFloatを使います。
// Startは、MonoBehaviourが作成された後、Updateが最初に実行される前に1回呼び出されます。
void Start()
{
character = GetGameObjectByTagName("Character"); //キャラクターPrefabを取得
animator = GetComponent<Animator>(); //Animatorコンポーネントを取得
}
// 更新は1フレームにつき1回呼び出される
void Update()
{
if (Input.GetKey("left")) {
//左キーを押したとき
transform.position -= transform.right * Time.deltaTime * walk_speed; //左に移動
character.transform.rotation = Quaternion.Euler(0, -90, 0); //左を向く
animator.SetFloat("move", walk_speed); //歩く速度をwalk_speedに設定
} else if (Input.GetKey("right")) {
//右キーを押したとき
transform.position += transform.right * Time.deltaTime * walk_speed; //右に移動
character.transform.rotation = Quaternion.Euler(0, 90, 0); //右を向く
animator.SetFloat("move", walk_speed); //歩く速度をwalk_speedに設定
}
else {
animator.SetFloat("move", 0); //歩く速度を0に設定
}
}
歩いているときはwalk_speedをセットし、止まったら0にしています。
GetGameObjectByTagNameは、私が作った関数なので存在しません。
以下の記事で紹介しています。
さて、実行してみます。
こんな感じになりました。


コメント