top of page

1分間 Unity講座 Flort型のParameterを使ってAnimationを遷移させる方法

このブログは「ファイブボックス一分間Unity講座」の補足説明となる記事です。主にUnityに初めて触れる方や初心者向けの講座になります。

Unityを自由に使いこなせるようになっている方にとっても、ちょっとお役に立つ情報を掲載していますので、もしよければご参照ください。


今回の課題は前回の作品「1分間 Unity講座 AnimationとRigidbody の機能を使って、キャラクターを前進させる方法」の続きになります。今回からご参照頂く場合は、先にRigidbodyとAnimator各コンポーネントの変数を取得しておいてください。本文の冒頭に前回までのコードを記載しておきますので、そちらをご参照ください。


今回はWキーを押したときに Rigidbody を使って Unity-Chan を前進させる動きの中で、左シフトキーを押すことで加速、一定の速度を超えたところで走り出すアニメーションを実現してみます。


下の動画は「一分間Unity講座 Flort型のParameterを使ってAnimationを遷移させる方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください!



1,前回までのコード


まずは前回までのコードをご確認ください。


float speed;            //float型の変数 speed を宣言
Animator animator;      //Animator型の変数を宣言(記述済み)
Rigidbody rb;           //Rigidbody型の変数(記述済み)

void Start()
{
	rb = GetComponent<Rigidbody>();  		//Rigidbodyを取得(記述済み)
	animator = GetComponent<Animator>();     //初期値を取得(記述済み)
    speed = 100f;     //初期値に100を代入
}
void Update()
{
    if (!Input.anyKey)                      //何も押されていなければ
    {
		//歩くアニメーションを停止(待機アニメーション)
        animator.SetBool("IsWalk", false);  
        rb.velocity = Vector3.zero;         //移動を停止
    }
    if (Input.GetKey(KeyCode.W))            //Wキーが押されたら
    {
        animator.SetBool("IsWalk", true);    //歩くアニメーション発動
	    rb.velocity = transform.forward * speed * Time.deltaTime;   //前進 
	}
    //上矢印キーが押されたとき
    if (Input.GetKeyDown(KeyCode.UpArrow) && jumpCount <= 1)
    {
        //Rigidbodyに上方向にJumpPowerの力を加える
        rb.AddForce(transform.up * jumpPower);
        if (jumpCount == 0)    //初回ジャンプなら
        {
            animator.SetTrigger("Jump1Trigger"); //初回ジャンプアニメに遷移
        }
        else  //そうでなければ
        {
            animator.SetTrigger("Jump2Trigger");  //2段ジャンプアニメに遷移
        }
        jumpCount++;
    }
}

void OnCollisionEnter(Collision collision)   //当たり判定
{
    if (collision.gameObject.name == "Plane")  //当たった相手が地面なら
    {
        jumpCount = 0;    //JumpCount をリセット
    }
}

AnimatorController の設定は過去の動画をご参照ください

■ ジャンプのアニメーション

■ 歩くアニメーション


2,走るアニメーションの用意

続いて歩くアニメーションから走るアニメーションに遷移する AnimationController を作成します。

❶,Unitychan の走るアニメーション「Run00_F」のAnimationClip を取得し配置します。

❷,「RUN_00F」⇔「WALK00_F」往復のTransitionを作成します。

❸,Float型(小数点型)のParameter、RunValue を作成します。名前は任意です。

Float型のParameterを使ったアニメーション遷移の作成

❹,Inspectorで作成したTransitionに条件を指定します。

 ■「WALK00_F」⇒「RUN_00F」

Conditionsで RunValue を指定し、Greater(より大きい)、値を300に指定

 ■「RUN_00F」⇒「WALK00_F」

Conditionsで RunValue を指定し、Less(未満)、値を300に指定

Float型のParameterを使ったTransitionのConditions

これでAnimatorController の設定は完成です。


3,走るアニメーションへの遷移プログラム


作成済みのコードに以下のコードを追記します。変更するのはUpdate関数のみです。

void Update()
{
	//speedの値に応じ走る⇔歩くを振り分け遷移
	animator.SetFloat("RunValue", speed); 
    if (!Input.anyKey)                      //何も押されていなければ
    {
	   animator.SetBool("IsWalk", false);  
       rb.velocity = Vector3.zero; 
	   speed = 100;     //何も押されてい開ければSpeedを100にリセット
    }
    if (Input.GetKey(KeyCode.W))            //Wキーが押されたら
    {
        animator.SetBool("IsWalk", true);  
	   rb.velocity = transform.forward * speed * Time.deltaTime;  
	   //Wキーが押されている間、速度が1000未満で左シフトが押されたなら
	   if (Input.GetKey(KeyCode.LeftShift) && speed < 1000)
	   {
		    speed += 0.5f;  //speedを0.5ずつ加速
	   }
        else if (speed > 100)  //そうでなく、speed が100より大きければ
	   {
	       speed--;		//speed を1ずつ減産
	   }
	}
    //上矢印キーが押されたとき
	以下記述済み
}

これで「Wキー」を押して前進している間に、「左シフトキー」が押されるとどんどん移動速度が大きくなっていき、300を超えたタイミングで走り出す動きができました。

「左シフトキー」を離すと徐々に移動速度が遅くなり、300より小さく成ったタイミングで歩き出すはずです。


今回の解説はここまで。


 

ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

コメント


bottom of page