UnityのAnimatorControllerをスクリプトで切り替える!Anystateからキー入力で切り替え

Unity
※記事内に広告が含まれています。

バーチャル3Dクリエイター神部まゆみです(*^-^*)

この記事はUnityのAnimatorControllerをスクリプトで切り替えてみたので、それについての記事です。

この記事はAnystateで切り替える記事だけど、↓こちらのほうが簡単かも?

●PRスペース●
■PR■

現在、毎日割引アセットが変わる Unity Flash Deals セール(50~80%オフ)をやってるみたいです。

Unity Flash Dealsセール 最大80%オフ

欲しいアセットはこの機会に買っておくと良いかも。

〇まゆみマート|BOOTH

BOOTHでVRoidテクスチャやVRChat向けオブジェクトなどを販売しています。いいねしてくれると励みになります(*^-^*)

参考にした頭のいい先輩のページ

とても参考になりました。

ありがとうございます(*^-^*)

UnityのAnimatorControllerの使い方|npaka
Unityの「AnimatorController」の使い方をまとめました。 1. AnimatorController 「AnimatorController」は、キャラクターやオブジェクトのアニメーションを管理するコントローラです。「A...

アニメーターで変数を使って制御する基礎知識

アニメーターで変数を定義しておくと、スクリプトから変数を使って制御できる。

アニメーターで使える変数は4種類

・Int : 整数
・Float : 小数
・Bool : bool値
・Trigger : bool値(遷移後戻る)

の4つのパラメーターがあるみたい。

5つのメソッドで変数を割り当てる

パラメーターは以下のメソッドで変数を割り当てる。

・SetFloat()
・SetInt()
・SetBool()
・SetTrigger()
・ResetTrigger()

スクリプトでアニメーションを制御する方法

スクリプトでアニメーションを制御できるようにしていきます。

左上の + を押してパラメーターを追加

アニメーター画面で、向かって左上の + を押せばパラメーターが追加できる。

↓これでTrigger変数のSpaceを追加できました。

Transision(遷移)を選択して、Condisionsにさっき作ったSpace変数を追加する

この矢印が遷移。遷移元のアニメーションで右クリック⇒遷移を作成で作れる。

この⇒を選択して、インスペクターのCondisitonにさっき作ったSpaceを追加する。

その後アニメーションを戻せるように矢印を双方向にする。

Conditionsっていうのは、unity公式サイトによると遷移の条件のこと。

アニメーション遷移 - Unity マニュアル
アニメーション遷移 (Animation Transition) は、ステートマシン が、あるアニメーションステートから別のアニメーションステートへ切り替わったりブレンドしたりすることを可能にします。遷移は、複数のステート間のブレンドにかか...

スクリプトを適用して動かす

次に、あらかじめ作っておいたCubeに、スクリプトCubeを追加する。

using UnityEngine;
using System.Collections;

// CubeのAnimatorの制御
public class Cube : MonoBehaviour
{
     Animator animator;

     // スタート時に呼ばれる
     void Start ()
     {
          this.animator = GetComponent<Animator>();
     }

     // フレーム毎に呼ばれる
     void Update ()
     {
          if (Input.GetKeyDown("space"))
          {
               animator.SetTrigger("Space");
          }
     }
}

このCube.csをCubeにアタッチして、実行すればOK。

なんかエラー出てるとこあるけど、Spaceを押すとY軸回転とX軸回転のアニメーターが切り替わります。

AnimationEvent has no function…エラーは、アニメーションイベントを消せば消える

ちなみにこのエラーは AnimationEvent has no function… とか出てるけど、こちらの先輩によるとアニメーションイベントを削除するか、アニメーションイベントにファンクションを指定すると消えるみたい。

【Unity】「AnimationEvent has no function name specified」のエラーを解決しました
Unityで「AnimationEvent has no function name specified」のエラーが発生したのですが、解決しました。

アニメーションイベントってなんだ?と思ったけど、アニメーションのキーの上にある青いヤツみたい。これをDeleteすればOK。

これでエラーが出なくなった!

Anystateを使えば、どんな状態からでも条件を満たせば遷移させられるらしい

Entryから伸びる遷移と違って、Anystateなら順番とか気にせずに、条件を満たしたら発動する感じっぽい。

試しにこんな感じにAnystateから伸ばしてみた。

上下左右のキーを押して、Anystateからアニメーションを切り替えるスクリプトを作った

int型の変数transを初期値0で作って、

各TransitionsのConditionsに条件を設定しておいて、

上下左右のキーが押されたらtransの値を書き換えるスクリプトを書いて、モデルにアタッチしておく。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AnimChangeKey : MonoBehaviour
{


    // Update is called once per frame
    void Update()
    {

    	 //GetComponentを用いてAnimatorコンポーネントを取り出す.
        Animator animator = GetComponent<Animator>();
 
        //あらかじめ設定していたintパラメーター「trans」の値を取り出す.
        int trans = animator.GetInteger("trans");
 
        //上矢印キーを押した際にパラメータ「trans」の値を0に
        if (Input.GetKeyDown(KeyCode.UpArrow)){
            trans = 0;
        }

        //右矢印キーを押した際にパラメータ「trans」の値を1に
        if (Input.GetKeyDown(KeyCode.RightArrow)){
            trans = 1;
        }
 
        //下矢印キーを押した際にパラメータ「trans」の値を2に
        if (Input.GetKeyDown(KeyCode.DownArrow)){
            trans = 2;
        }

        //左矢印キーを押した際にパラメータ「trans」の値を3に
        if (Input.GetKeyDown(KeyCode.LeftArrow)){
            trans = 3;
        }
 
 
        //intパラメーターの値を設定する.
        animator.SetInteger("trans", trans);
        
    }
}

こうすることで、上下左右のキーを押せばtransの値が書き換わってTransitionの条件が満たされ、各アニメーションへの遷移が発動するようになる。

これで実行すると、上下左右のキーに対応したアニメーションをさせられるようになる。

変なテキストが表示されてるのは、テキスト表示の試行錯誤してた名残です(笑)。

ポーズはVeryAnimationっていう、MMDみたいにアニメーションが作れるアセットでサクッと作りました。

Very Animation|Unity Asset Store

おわりに

案外簡単にできて良かった。

アニメーションを遷移させられればゲームに動きを取り入れることができます。

また何かあれば追記します(*^_^*)

タイトルとURLをコピーしました