今日はUnityゲーム制作講座、第五弾です!
今度はなにするの~?
前回はキャラクターを矢印キーで移動できるようにしたから、キーを押したときにキャラクターの動作を立っている状態から走っている状態に変更できるようにするよ~
Unityで3Dキャラクターのアニメーションをキーボード操作時に変更する方法
Unityで3Dキャラクターにアニメーションを追加するには、AnimatorControllerを作成し、動かしたいキャラクターのGameObjectにAnimatorComponentを追加して、AnimatorのControllerに作成したAnimatorControllerを追加する必要があります。
その後、AnimatorControllerにTransitionとParameterを追加して、スクリプトから操作できるようコード追加すれば完了です。
前回の続きになるので、こちらも合わせて確認してください。
AnimatorControllerの作成、Motion追加
まずはProjectウインドウで、AnimatorControllerを格納するためのフォルダを作成し、フォルダ内を右クリック、または、Project下の+ボタンから、AnimatorControllerを作成します。
AnimatorControllerをダブルクリックし、Animatorタブを開きます。
BaseLayer内の何もない箇所を右クリックし、CreateState>Emptyで、新しいStateを作成しましょう。
作成したStateにわかりやすい名前をつけ、Motionを追加します。
ここでは立っている状態のもの(Idle)と、走っている状態のもの(Run)が必要なので、それぞれのStateを作成し、Motionを追加しましょう。
AnimatorControllerにTransitionとParameterを追加
Stateの作成が終わったら、作成したStateを右クリックし、MakeTransitionから、それぞれのStateを行き来するTransitionを作成します。
続いてParametersの+ボタンからBoolを選択して追加。わかりやすい名前をつけます。
Parameterを追加したら、Transitionを選択し、Conditionsの+ボタンをクリックして、追加したParameterを選択します。
IdleからRunへの値はtrue、RunからIdleへの値はfalseを選択しておきましょう。こうすることで、値がtrueになったら走り出して、falseになったら止まる、という切り替えができるようになります。
GameObjectにAnimator、AnimatorControllerを追加
ここまで色々追加してきたAnimatorControllerですが、キャラクターのGameObjectへアタッチしてあげないとキャラクターは動いてくれません。
ですので、キャラクターのGameObjectを選択し、InspectorのAddComponentからAnimatorを追加します。(前回の手順通りに作成している場合は、追加済みなので不要です)
そしてAnimatorのControllerに、作成した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モデルを使ったゲームにした方が楽だよね~