うにty生活

UnityChanを生活させたい

Unityちゃんを実際に歩かせてみる 後編 #3

 

どうも、やっとブログにGif画像を載せることができたラブヘイトです

 

前回の検証によってUnitychanを歩かせる方法は

RigidBody+Collider+transform移動方法になりました!

 

 

tubakihimelovehate.hatenablog.com

 

 

今回は実際に歩くコードやアニメーションについて書いていこうと思います

 

アニメーションをつける部分は以下のブログを参考にさせていただきました。

 

【Unity講座】3D人型モデルの動かし方をユニティちゃんで学ぶ【Animator】 – Unity初心者向け講座<C#>

Unityをしていて初めてキャラクターが動くという感動をあたえてくれる、そんな記事です。 

 

 

<動作手順簡まとめ>

1,Animator Controllerを作成、

 動かしたいキャラクターにアタッチ

f:id:tubakihimeLoveHate:20180529042040g:plain

ごめんなさい操作ミスが目立ちますね・・・

 

 

2,Animatorで空のステートを作成

 一つ一つにアニメーションをつけていく

 

↓下の図のオレンジやグレーのヤツがステートと呼ばれていて、アニメーションを設定することができます

f:id:tubakihimeLoveHate:20180529043016p:plain

 

ステートを選択した時のInspectorです↓

Motionの場所にモーションをアタッチしましょう

※今回はUnityChanAssetに含まれているモーションを使います

 いつか自分自身で作ってみたいです、

f:id:tubakihimeLoveHate:20180529043023p:plain

 

3,パラメーターを作成・ステート間の矢印に

  パラメーターを設定

 

パラメーターとはいわゆるフラグのようなもので

ステートから他のステートに遷移するために設定します+ボタンから作成可能です

f:id:tubakihimeLoveHate:20180529043028p:plain

 

下の図だとcoldからwalkステートに矢印が伸びています

その矢印のInstector>Conditionsにパラメーターを設定できます

つまりwalkingがtrueの時に「cold」から「walk」ステートのアニメーションに遷移します

f:id:tubakihimeLoveHate:20180529043032p:plain

ではwalkingをどのようにtrueやfalseに変更するのかというと

次になります

 

5,スクリプトを記述

新しいスクリプトファイルを作成して以下のようにします。

最初に紹介させていただいた記事ではジャンプのモーションも入っていますが、

僕はいらないかなぁ、と思いつけませんでした笑

public class UnityChanControl : MonoBehaviour {
 
    private Animator animator;

void Start()
    {
        animator = GetComponent<Animator>();
    }

void FixedUpdate()
{

float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
 
//上矢印キーが押されている間walkingをtrueにする
        if(v > 0){
                    animator.SetBool("walking",true);
                }else if(v < 0){
                    animator.SetBool("walking",true);
                }else{
                    animator.SetBool("walking",false);
                }
    }
}

 これをUnitychanにアタッチします。

 

ただ、これで実行して矢印キーを押してもその場で歩くモーションを取るだけで実際には移動しません

次のコードを追加しましょう

public class UnityChanControl : MonoBehaviour {

  //速さ
   public float speed = 3f;
  //方向転換スピード
  public float rotateSpeed = 200f;
 
   private Animator animator;

void Start()
    {
        animator = GetComponent<Animator>();
    }

void FixedUpdate()
{

 float h = Input.GetAxis("Horizontal");
 float v = Input.GetAxis("Vertical");

        
 Vector3 velocity = new Vector3(0, 0, v);
  // キャラクターのローカル空間での方向に変換
  velocity = transform.TransformDirection(velocity);

  // transformで移動
  transform.localPosition += velocity * speed * Time.fixedDeltaTime;

  // キャラクターの回転
  transform.Rotate(0, h * rotateSpeed * Time.fixedDeltaTime, 0);

        if(v > 0){
                    animator.SetBool("walking",true);
                }else if(v < 0){
                    animator.SetBool("walking",true);
                }else{
                    animator.SetBool("walking",false);
                }
    }
}

 

 

 UnityChanにやっと命を吹き込むことができました!

家の中をヌルヌル動かすことができて楽しい!

 

まとめ

自分が思っていたよりもアニメーション設定は簡単で、スクリプトでの細かい制御もできてとても満足のいく結果です。

これを基本として他のモーションもつけることが可能なので、UnityChanパッケージに用意されているモーションをいろいろ試して動かしてみるのもいいですね♪

 

では次の記事でお会いしましょう