【Unity】Blend Treeを使用したRPG風8方向移動の作成

raharu(仮名)(プログラマー)
これがダイバージェンス1%の先の世界か。。。

前回RPG風のマップの作成をしたので今回は
キャラクターを置いて、一旦WASDキーで8方向に移動する様にしたいと思います。

キャラクターオブジェクトを作成する

空のオブジェクトを作成してCharaとでも適当に付けておきます。
これにこんな感じでコンポーネントをアタッチします。 f:id:raharu0425:20150430224415p:plain

Animator Controllerの作成

BaseCharacterMotionという名前でAnimatorControllerを作成します。

f:id:raharu0425:20150430224858p:plain

これを先ほどのキャラクターオブジェクトにアタッチしておきます。

8方向アニメーションの作成

walk@[方向]のネーミングでアニメーションを8個作ります。
f:id:raharu0425:20150430232052p:plain

アニメーションの作り方は大体ここに書いてあります。
raharu0425.hatenablog.com

方向のパラメータを追加

XYの移動方向をセットする為に2つパラメータを追加します。名前は適当に

Direction_X,Direction_Yとでも付けておきます。

f:id:raharu0425:20150430233201p:plain

AnimatorにBlend Tree ステートを追加する。

f:id:raharu0425:20150430232610p:plain
名前をWalkにしておきます。
f:id:raharu0425:20150430232653p:plain

これでBlendTreeを持っているステートができました。

BrendTree設定

Walkステートをダブルクリックすると詳細が見れます。

f:id:raharu0425:20150430233324p:plain

InspectorのBrendTypeを[2D Simple Directional]に変更して
Parametersを[Direction_X]と[Direction_Y]をセットします。

f:id:raharu0425:20150430233536p:plain

Motion Filedを8つ追加します。
f:id:raharu0425:20150430233757p:plain

これに先ほど作成した8方向アニメーションを追加します。 f:id:raharu0425:20150430233857p:plain

スクリプトを作る

//キャラクターのコントローラー
BaseCharacterController
//モーションを管理する基底クラス
BaseMortionController

f:id:raharu0425:20150430234317p:plain

BaseCharacterController.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using UnityEngine;
using System.Collections;
using UnityStandardAssets.CrossPlatformInput;


[RequireComponent(typeof (BaseMortionController))]
public class BaseCharacterController : MonoBehaviour {

    private BaseMortionController m_Character;

    private void Awake()
    {
        m_Character = GetComponent<BaseMortionController>();
    }


    private void Update()
    {
    }


    private void FixedUpdate()
    {
        // WASDの入力取得
        float h = CrossPlatformInputManager.GetAxis("Horizontal");
        float v = CrossPlatformInputManager.GetAxis ("Vertical");

        //移動
        m_Character.Move(h, v);
    }
}

BaseMortionController.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using UnityEngine;
using System.Collections;

public class BaseMortionController : MonoBehaviour {

    private Animator m_Anim;
    private Rigidbody2D m_Rigidbody2D;

    [SerializeField]
    private float move_speed = 7.0f;

    private void Awake()
    {
        m_Anim = GetComponent<Animator>();
        m_Rigidbody2D = GetComponent<Rigidbody2D>();
    }

    /**
    * 移動
    */
    public void Move(float h_move, float v_move)
    {
        //  移動方向に力を加える
        Vector2 direction = new Vector2 (h_move, v_move).normalized;
        m_Rigidbody2D.velocity = direction * move_speed;

        //モーション判定用のパラメータ   
        m_Anim.SetFloat("Direction_X", h_move);
        m_Anim.SetFloat("Direction_Y", v_move);

    }

}

これらをCharaオブジェクトにアタッチして f:id:raharu0425:20150430235235p:plain

完成


Unity BlendTreeTest - YouTube

Unity4.3から追加されたらしいBlendTreeとても便利です。
簡単に8方向移動ができました。

素材はこちらを使わせて頂いております。有り難うございます。

ぴぽや倉庫

RPGツクール素材支部|臼井の会

こちらの記事を参考させて頂きました有り難うございます。

Unity4.3 で追加された Sprite 機能を使ってみよう - その1 - Unityではじめるゲーム開発 - Mobile Touch - モバイル/タブレット開発者およびデザイナー向け情報ポータル