Unityの学習 part7
今回は、モデルの移動とそれに合ったアニメーションを設定していきます
ちなみにロードマップは以下のようになっております
モデルを使用したアニメーションのロードマップ
1. モデルの取得と配置
2. モデルにアニメーションの設定
3. モデルの移動に合わせたアニメーションの設定 ←今回の記事
4. モデルを追尾するカメラの設定
目標は、モデルの動かし方、アニメーションの設定、カメラの向きに合わせた移動の仕方を学習することです
モデルの移動
モデルの移動は、前後のみとして作成します
左右の入力は、コンテンツによって扱いがことなるので、今回は作成しません
前後の移動は、キー入力で行いたいのでInputを使って取得していきます
State state;
enum State
{
Stop,
Up,
Down,
}
private void FixedUpdate()
{
//入力の感知
if (Input.GetKey(KeyCode.UpArrow))
{
state = State.Up;
}else if (Input.GetKey(KeyCode.DownArrow))
{
state = State.Down;
}
else
{
state = State.Stop;
}
}
上キーの入力ならばステータスをUpにして、下キーの入力ならばDownにして、それ以外ならStopにします
これでキー入力で、移動する下準備ができました
あとは、これをもとに移動させていきます
Vector3 vector = Vector3.forward;
void Update () {
if(state == State.Up)
{
transform.position += vector * Time.deltaTime;
}
}
Vector3.forwardはz方向に+1のみを持つVectorを受け取ることができます
これで、上キーを押し続けると前に進むようになります
進む方向にdeltaTimeをかけるのは、1秒で1m進ませるための処理になります
deltaTimeは前回のフレーム更新からの差分を返してくれるメソッドです
実行するとこんな感じになります
前に進むことが確認できたら、下キーの入力時も同様にしていきます
アニメーションの設定
最初に、開始時のアニメーションを設定します
Stateを新規で作成して、Entryから矢印を伸ばします
作成したStateの名前をPauseに変えて、Motionを好きなものにしましょう
これで初期状態の設定は完了です
次に、前進時のアニメーションを設定していきます
先ほどと同じように、Stateを作成して相互に矢印を伸ばします
名前はFrontにでもしましょう
MotionはWALK00_Fにします
そしたら、どういう状態の場合に遷移するかを決定します
ここでは、BoolでParameterを作成します
Parameterの名前はFrontにしておきます
Frontがfalseの場合には、Pauseへ
Frontがtrueの場合には、Frontへ遷移するようにします
void Update () {
if(state == State.Up)
{
animator.SetBool("Front", true);
transform.position += vector * Time.deltaTime;
}else
{
animator.SetBool("Front", false);
}
}
animator.SetBoolで先ほど設定したパラメータに値をセットしています
ステータスがUpの状態では、Frontパラメータにtrueをセットします
それ以外では、falseをセットしてPuase状態に戻るようにしています
これを、後進も同様に設定していきます
最終的には、以下のようなスクリプトになります
using UnityEngine;
public class unitychan : MonoBehaviour {
Animator animator;
State state;
Vector3 vector = Vector3.forward;
enum State
{
Stop,
Up,
Down,
}
void Start () {
//最初にunitycahnのコンポーネントからAnimatorを取得
animator = GetComponent();
state = State.Stop;
}
void Update () {
if(state == State.Up)
{
animator.SetBool("Front", true);
transform.position += vector * Time.deltaTime;
}else if (state == State.Down)
{
animator.SetBool("Back", true);
transform.position -= vector * Time.deltaTime;
}else
{
animator.SetBool("Back", false);
animator.SetBool("Front", false);
}
}
private void FixedUpdate()
{
//入力の感知
if (Input.GetKey(KeyCode.UpArrow))
{
state = State.Up;
}else if (Input.GetKey(KeyCode.DownArrow))
{
state = State.Down;
}
else
{
state = State.Stop;
}
}
}
実行するとこんな感じになります
これで前後の移動とアニメーションの完了です
終わりに
今回は、キャラクターを使用したコンテンツで共通と思える、前後のみの移動とその移動に合わせたアニメーションを紹介しましたが、3Dコンテンツでは、基本的にキャラクターは前後左右への動きをするものです
左右の入力は、そのまま左右に移動することや、入力方向へ回転するものがありますが、そこは、コンテンツの中で操作しやすい方法を導入すればいいと思います
火曜日担当:poppy
admin at 2017年03月07日 10:00:33