AnimatorControllerの説明
名前の通りキャラクターのアニメーションを切り替えます
例えば何もしてない時は、待機アニメーションにしたり、移動キーがおされたら、走るアニメーションに切り替えたりします
切り替えは変数を使って行います
AnimatorControllerの作成
まずは、AnimatorControllerを作成します
画像のように、右クリック → Create → AnimatorControllerで作成します
続いて、Playerと名前をつけて、プレイヤーにD&Dします
AnimatorControllerの設定
AnimatorControllerにアニメーションをいれる
作成したAnimatorControllerをダブルクリックして開き、各アニメーションのデータをD&Dします
アニメーションの名前を変更する
D&Dしたアニメーションを選択し、名前を分かりやすいように変更します
今回は待機アニメーションをWait、走るアニメーションをRun、攻撃アニメーションをAttackに変更しました
アニメーションが繰り返し再生するようにする
アニメーションには繰り返し再生するものと単発で終わるものがあります
繰り返し再生するもの(今回の場合は待機、走り)はアニメーションをダブルクリックし、Loop Timeにチェックをいれます
アニメーションを矢印で結びつける
アニメーションは矢印で結んで遷移させます
今回は待機→走り、待機→攻撃、走り→攻撃、走り→待機、攻撃→待機とつなぎます
まずは待機で右クリックし、Make Transitionをおします
続いて、走りの方まで矢印をひっぱり、走りで左クリックして確定します
同様に待機→攻撃、走り→攻撃、走り→待機、攻撃→待機もつなぎましょう
アニメーションを遷移させる変数をつくる
アニメーションの遷移は変数で管理します
そのための変数を作ります
+をおして、変数の型をBoolにします
変数の名前はRunにしておきます
同様にAttackという変数も作りましょう
アニメーションを遷移させる条件を設定する
各変数がどうなっていたら遷移をするのかを設定します
まずは、待機→走りの矢印を選択します
そうすると右側に設定画面が開くので、Has Exit Timeのチェックを外します
Has Exit Timeはチェックを付けた場合、前のアニメーションを最後まで再生してから切り替えます
チェックを外した場合は、遷移の条件が切り替わった時に、前のアニメーションを中断して次のアニメーションに切り替わります
Conditionsは+をおしてRunをtrueにします
同様に走り→待機、待機→攻撃、攻撃→待機の条件も設定します
設定の条件は以下の通りです
設定した変数をスクリプトで制御する
Unityのコンポーネントを制御する場合、
①コンポーネントの機能を代入する変数を作成
②コンポーネントの値を作成した変数に代入
③実際に値を操作
という手順を踏みます
スクリプトにコメントでそれぞれの該当する部分を書いておきましたので参考にしてください
例としてこちらの一番最初にあるスクリプトに追記しています
簡単に説明するとWASDキーで移動している時はRunをtrue、キーが離された時はRunをfalse、
同様に攻撃のボタンであるマウスが左クリックされたらAttackがtrue、離されたらAttackがfalseになるようになっています
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
private CharacterController characterController;
private Vector3 Velocity;
[SerializeField]
private float JumpPower;
[SerializeField]
private float MoveSpeed;
private Animator animator;//①コンポーネントの機能を代入する変数を作成
// Use this for initialization
void Start()
{
characterController = GetComponent<charactercontroller>();
Velocity = Vector3.zero;
animator =GetComponent<animator>();//②コンポーネントの値を作成した変数に代入
}
// Update is called once per frame
void Update()
{
characterController.Move(Velocity);
if (Input.GetKey(KeyCode.W))
{
transform.rotation = Quaternion.Euler(0, 0, 0);
characterController.Move (this.gameObject.transform.forward * MoveSpeed * Time.deltaTime);
animator.SetBool("Run", true);//③Runをtrueにする
}
else if (Input.GetKeyUp(KeyCode.W))
{
animator.SetBool("Run", false);//③Runをfalseにする
}
if (Input.GetKey(KeyCode.S))
{
transform.rotation = Quaternion.Euler(0, 180, 0);
characterController.Move (this.gameObject.transform.forward * MoveSpeed * Time.deltaTime);
animator.SetBool("Run", true);//③Runをtrueにする
}
else if (Input.GetKeyUp(KeyCode.S))
{
animator.SetBool("Run", false);//③Runをfalseにする
}
if (Input.GetKey(KeyCode.A))
{
transform.rotation = Quaternion.Euler(0, 270, 0);
characterController.Move (this.gameObject.transform.forward * MoveSpeed * Time.deltaTime);
animator.SetBool("Run", true);//③Runをtrueにする
}
else if (Input.GetKeyUp(KeyCode.A))
{
animator.SetBool("Run", false);//③Runをfalseにする
}
if (Input.GetKey(KeyCode.D))
{
transform.rotation = Quaternion.Euler(0, 90, 0);
characterController.Move (this.gameObject.transform.forward * MoveSpeed * Time.deltaTime);
animator.SetBool("Run", true);//③Runをtrueにする
}
else if (Input.GetKeyUp(KeyCode.D))
{
animator.SetBool("Run", false);//③Runをfalseにする
}
Velocity.y += Physics.gravity.y * Time.deltaTime;
if (characterController.isGrounded)
{
if (Input.GetKeyDown(KeyCode.Space))
{
Velocity.y = JumpPower;
}
if (Input.GetMouseButtonDown(0))
{
animator.SetBool("Attack",true);//③Attackをtrueにする
}
else if (Input.GetMouseButtonUp(0))
{
animator.SetBool("Attack",false);//③Attackをfalseにする
}
}
}
}
テストプレイしてみるとこんな感じです♪
走っている時は、走っているアニメーション、攻撃や待機ポーズもバッチリですね
コメント
コメント一覧 (2件)
[…] アニメーションの遷移(AnimatorController) […]
[…] こちらを参考にアニメーターの設定をしましょう※こちらの説明だと攻撃のアニメーションも追加していますが今回は攻撃は設定しないので走るだけ設定してください 変数もRunのみ作成で大丈夫です […]