【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

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

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>();
}
/** </div></div>
* 移動
*/</span>
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);
}
}
</pre></div></figure>

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

完成


Unity BlendTreeTest - YouTube

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

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

ぴぽや倉庫

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

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

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