2023/09/02 Updated by

Unity

Humanoid を動かす (2) 移動+アニメーション


[Up] Japanese English
  1. ハードウェア環境
  2.   MacBookAir (M1, 2020)
      Tip: Apple M1
      Memory: 16GB
      macOS: Ventura 13.5.1
    
  3. Humanoid を動かす (2) 移動」で作成したプロジェクトを使う。
  4.     Unity Hub: 3.5.1
        Unity version: 2021.3.16f1 APPLE SILICON LTS
        Project Type: Third Person (Core)
        Project Name: Humanoid
    
  5. プロジェクト名は Humanoid2 に変更したものとする。
  6. Assets/TSP/Character/Animations に Humanoid Character の動作アニメーションファイルが存在することを確認する。
  7.     Jump--InAir
        Jump--Jump
        Locomotion--Run_N
        Locomotion--Run_N_Land
        Locomotion--Run_@
        Locomotion--Walk_N
        Locomotion--Walk_N_Land
        Stand--Idle
    



  8. Hierarchy ウィンドウの AsianBoy に Animator Controller コンポーネントを追加する。
    1. ProjectウィンドウのAssetsに Animators フォルダを生成する。
    2. Animators フォルダの中に新しい Animator Controller をcreate (生成)して、 名前を "AsianBoy AnimController" に変更する。



    3. Wnimator ウィンドウを表示する。
    4. Top Menu Bar → Window → Animation →Animator


    5. Animatorウィンドウに表示されているのは「キャラクタの状態」と「状態遷移」である。
    6. Animatorウィンドウで右クリックして Empty 状態 を追加する。



    7. 状態の名前を"Idle" に名前を変更する。名前の変更は、Unity Editor の Inspector ウィンドウで行う。



    8. Idle 状態のMotion を"Idle"に変更する。変更は Unity Editor の Inspector ウィンドウで行う。 このMotion(= Animation)は TSP/Characters/Animation/に含まれている。



    9. Animatorウィンドウで右クリックして さらにEmpty 状態 を追加し、"Walk" に名前を変更する。名前の変更は、Unity Editor の Inspector ウィンドウで行う。



    10. Walk 状態のMotion を"Walk_N"に変更する。



    11. Animator ウィンドウで "Idle" 状態から "Walk" 状態への状態遷移を定義する。
    12. Animator ウィンドウ中の Idle の上で右クリック → Make Transition → マウスに追随する矢印が表示される → Walk の上まで移動してクリック → Idle 状態から Walk 状態への矢印が生成される。





    13. Idle状態からWalk状態への遷移を行うための、条件変数 MovingSpeed を作成する。
    14. Animatorウィンドウの Parametersから"+"をクリックして → Float を選択し、→ 名前を MovingSpeed と入力する。→ 初期値は 0.0 のままで大丈夫





    15. Animatorウィンドウ内のIdle状態からWalk状態への遷移の矢印を左クリックで選択し、 Inspector内のConditionsで "+"をクリックしてから、遷移条件を "MovingSpeed", "Greater", "0.1" と指定する。



    16. Animator ウィンドウで "Walk" 状態から "Idle" 状態への状態遷移を定義する。
    17. Animator ウィンドウ中の Walk の上で右クリック → Make Transition → マウスに追随する矢印が表示される → Idle の上まで移動してクリック → Walk 状態から Idle 状態への矢印が生成される。


    18. Animatorウィンドウ内のWalk 状態からIdle 状態への遷移の矢印を左クリックで選択し、 Inspector内のConditionsで "+"をクリックしてから、遷移条件を "MovingSpeed", "Less", "0.1" と指定する。



  9. Hierarchy ウィンドウで AsianBoy を選択してから、ProjectウィンドウのAssets/AnimController から AsianBoy AnimController を Inspectorウィンドウの Animator の Controller にドラッグする。



  10. ProjectウィンドウのAssets/Scenes で右クリックして Create → C# Script → PlayerMoveAnim を生成する。内容を次のように変更する。
  11. 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(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);
        }
    }
    
  12. ProjectウィンドウのAssets/Scriptsから PlayerMoveAnim を、Hierarchy ウィンドウの AsianBoy 上にドラッグする (Add Component と同じこと)。 Inspectorウィンドウに "Player Move Anim (Script)" というコンポーネントが追加されたことを確認する。 前に追加した "Player Move (Script)" や "Player Move 2 (Script)" は使わないのでチェックをはずしておく。



  13. "Run" ボタン をクリックして実行する。 キーボードの矢印キー(↑ ↓ ← → )または 'w', 'a', 's', 'd' キーで AsianBoy が移動する。 状態によって人型キャラクタのアニメーションが切り替わるが、動作の切り替わりが緩慢に見えるはずである。
  14. Animatorウィンドウで、「Idle状態からWalk状態への状態遷移」と「Walk状態からIdle状態への状態遷移」 をそれぞれ選択して、 Inspectorウィンドウの "Has Exit Time" のチェックをはずす。 (これが設定してあると、状態遷移にいつも決まっただけの時間がかかる。)






  15. 実行してみると、キビキビと動作が遷移することがわかる。



  16. 作成したプロジェクトのzipファイル
  17.    Unity プロジェクトの作成環境:
         PC: MacBookAir (M1, 2020)
         macOS: Ventura 13.5.1
         Unity Hub: 3.5.1
         Unity: 2021.3.16f1 (Intel)