エッセイマンガ!オタクビアンカップル同棲日記「よめよめ」

同棲中のレズビアンカップルのゆんとあゆむが、日々の生活の様子をマンガや日記にしてお届けするブログです

Unityでのキャラ操作時にアニメーションを変更する方法!

Unityで3Dキャラクターのアニメーションをキーボード操作で変更するイメージ

今日はUnityゲーム制作講座、第五弾です!

今度はなにするの~?

前回はキャラクターを矢印キーで移動できるようにしたから、キーを押したときにキャラクターの動作を立っている状態から走っている状態に変更できるようにするよ~

Unityで3Dキャラクターのアニメーションをキーボード操作時に変更する方法

Unityで3Dキャラクターにアニメーションを追加するには、AnimatorControllerを作成し、動かしたいキャラクターのGameObjectにAnimatorComponentを追加して、AnimatorのControllerに作成したAnimatorControllerを追加する必要があります。

その後、AnimatorControllerにTransitionとParameterを追加して、スクリプトから操作できるようコード追加すれば完了です。

前回の続きになるので、こちらも合わせて確認してください。

 

AnimatorControllerの作成、Motion追加

まずはProjectウインドウで、AnimatorControllerを格納するためのフォルダを作成し、フォルダ内を右クリック、または、Project下の+ボタンから、AnimatorControllerを作成します。

Project下の+ボタン

AnimatorControllerの追加

 

AnimatorControllerをダブルクリックし、Animatorタブを開きます。

BaseLayer内の何もない箇所を右クリックし、CreateState>Emptyで、新しいStateを作成しましょう。

AnimatorタブのCreateState>EmptyでStateを作成

 

作成したStateにわかりやすい名前をつけ、Motionを追加します。

ここでは立っている状態のもの(Idle)と、走っている状態のもの(Run)が必要なので、それぞれのStateを作成し、Motionを追加しましょう。

Stateを作成しMotionを追加

 

AnimatorControllerにTransitionとParameterを追加

Stateの作成が終わったら、作成したStateを右クリックし、MakeTransitionから、それぞれのStateを行き来するTransitionを作成します。

UnityのMakeTransition

Transitionの矢印を設置し終えた状態

 

続いてParametersの+ボタンからBoolを選択して追加。わかりやすい名前をつけます。

Parametersの+ボタンからBoolを選択

 

Parameterを追加したら、Transitionを選択し、Conditionsの+ボタンをクリックして、追加したParameterを選択します。

IdleからRunへの値はtrueRunからIdleへの値はfalseを選択しておきましょう。こうすることで、値がtrueになったら走り出して、falseになったら止まる、という切り替えができるようになります。

UnityのTransitionのConditions

 

GameObjectにAnimator、AnimatorControllerを追加

ここまで色々追加してきたAnimatorControllerですが、キャラクターのGameObjectへアタッチしてあげないとキャラクターは動いてくれません。

ですので、キャラクターのGameObjectを選択し、InspectorのAddComponentからAnimatorを追加します。(前回の手順通りに作成している場合は、追加済みなので不要です)

そしてAnimatorのControllerに、作成したAnimatorControllerをドラッグ&ドロップして追加してあげましょう。

AnimatorComponentへAnimatorControllerを追加

 

キャラクター操作のスクリプトに、アニメーション切り替えのコードを追加

最後に、前回作成したキャラクター操作のスクリプトに、アニメーション切り替えのコードを追加しましょう。

前回の内容を以下の内容に差し替えれば、動作するはずですよ。

    private float speed = 10.0f;
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.position += transform.forward * speed * Time.deltaTime;
            transform.rotation = Quaternion.Euler(0.0f, 0.0f, 0.0f);
            animator.SetBool("Run",true);
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.position += transform.forward * speed * Time.deltaTime;
            transform.rotation = Quaternion.Euler(0.0f, 180.0f, 0.0f);
            animator.SetBool("Run", true);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += transform.forward * speed * Time.deltaTime;
            transform.rotation = Quaternion.Euler(0.0f, 90.0f, 0.0f);
            animator.SetBool("Run", true);
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position += transform.forward * speed * Time.deltaTime;
            transform.rotation = Quaternion.Euler(0.0f, 270.0f, 0.0f);
            animator.SetBool("Run", true);
        }

        if (Input.GetKeyUp(KeyCode.UpArrow) || Input.GetKeyUp(KeyCode.DownArrow) || Input.GetKeyUp(KeyCode.RightArrow) || Input.GetKeyUp(KeyCode.LeftArrow))
        {
            animator.SetBool("Run", false);
        }
    }

 

動画も作成しているので、細かい操作や説明などはこちらから確認してくださいね!

 

続きはこちらへ!

 

動きと動作が合うと結構それっぽくなるね~

ね~!でも「走る」「止まる」以外にも色々動きをつけようとすると、どんどん面倒になるから、あんまり動かさなくていい3Dモデルを使ったゲームにした方が楽だよね~