top of page

1分間 Unity講座 AnimationとRigidbody の機能を使って、キャラクターを前進させる方法

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

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


作成中のプロジェクトの続きです。前回までの内容「1分間 Unity講座 3Dオブジェクトのジャンプ」をご参照頂き、Rigidbody型の変数、Animation型の変数を宣言、および取得しておいてください。

今回はWキーを押したときに Rigidbody を使って Unity-Chan を前進させ、なおかつ歩行のアニメーションを追加、Wキーを離したときに停止するという動きを作ってみます。

下の動画は「一分間Unity講座 AnimationとRigidbodyを使ってオブジェクトを前進させる方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください!



1,Animationの設定


1.1 AnimationClip の用意

Animator メニューを開いて作成中のUnity-ChanのAnimatorController を参照します。取得済みの素材から Unity-chan! Model ⇒ Art ⇒ Animations と辿り「unitychan-WALK00_F」という素材を展開、「WALK00_F」という名の AnimationClip を Animator にドラッグ&ドロップします。前方に歩くアニメーションクリップになります。


歩行のアニメーションのClipを用意

1.2 Transition の作成

事前に遷移の条件となる Parameter を用意します。

Bool型を選択し「IsWalk」という Parameter を作成します。

Animationの遷移のパラメータを作成

「WALK00_F」から「WAIT01」のTransitionを作成、Inspectorで次のプロパティを修正します。

・Has Exit Time ⇒ チェックを外し「false」の状態に指定

・Conditions ⇒ 作成したParameter「IsWalk」をセット、条件を「true」に指定

歩行から待機状態へのTransitionを作成

次の2つのClip間にも Transition を作成し、同様の設定を行います。

・「WALK00_F」⇒「WAIT00」

・「WALK00_F」⇒「WAIT02」

残りの待機状態からのTransitionを作成

最後は歩行のアニメーションが終了したときのTransitionを作成します。終了後は「WAIT00」に戻りましょう。

Inspectorで次のように指定します。

・Has Exit Time ⇒ チェックを外し「false」の状態に指定

・Conditions ⇒ 作成したParameter「IsWalk」をセット、条件を「false」に指定

歩行から待機状態へのTransitionを作成

これでAnimatorの設定が完了しています。


2,移動とAnimationの遷移プログラム


2.1 変数の宣言

Unity-Chanには「PlayreController.cs」というスクリプトファイルを指定しています。このスクリプトファイルを開いて変数の宣言を行います。


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

void Start()
{
	rb = GetComponent<Rigidbody>();  		//Rigidbodyを取得(記述済み)
	animator = GetComponent<Animator>();     //初期値を取得(記述済み)
    speed = 100f;     //初期値に100を代入
}

2.2 移動のプログラム


続いて Update関数内で移動とAnimationの遷移のプログラムを作成します。今回作るのは以下の内容です。


■ Wキーが押されたとき

  • 歩くアニメーションに遷移

  • Rigidbodyで前進


■何も押されていないとき

  • アイドリングアニメーションに遷移

  • 前向きの力と停止


ではスクリプトファイルに以下のコードを追記します。

void Update()
{
    if (!Input.anyKey)               //何も押されていなければ
    {
        animator.SetBool("IsWalk", false);   //Idlingのアニメーションに遷移
        rb.velocity = Vector3.zero;          //Rigidbody のvelocity を停止
    }
    if (Input.GetKey(KeyCode.W))
    {
        animator.SetBool("IsWalk", true);    //歩行のアニメーションに遷移
		//Rigidbody のvelocityに前向きの力を加える
        rb.velocity = transform.forward * speed * Time.deltaTime;
    }
}

Bool型のパラメータを変更するには、Animator.SetBool("Parameter名",bool値)を使用します。


以前のブログで触れましたが、Time.deltaTime をかけることで、デバイス間の1フレームの時間の差による、移動速度のずれが解消されます。

これで正しく移動するプログラムができたと思います。


 

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

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

Comments


bottom of page