【Unity】【C#】Finite-State-Machine を使いやすくする
ゲームの進行を管理する上で便利なStateMachineですが、Unityでのイケてる実装方法を探した所、良さげなのを見つけました。
ただし、そのまま実装すると現在のStateがInspectorに表示されないためデバッグで不便です。そこでInspectorにも表示されるよう対応を行いました。
概要
・Inspectore表示用のcurrentStateフィールドを生成する。
・状態遷移時は遷移用のメソッドを作成して、本来の変数fsmの更新とcurrentStateにfsmの代入を行う。
・実行テストではButtonクリックで状態遷移を行う。
コード
using UnityEngine;
using MonsterLove.StateMachine;
public class StateMachineTestManager : MonoBehaviour {
public enum States
{
Init,
Play,
Win,
Lose
}
StateMachine<States> fsm;
//Inspector表示用
[SerializeField]States currentState = new States();
private void Awake()
{
Initialize();
}
void Initialize(){
fsm = StateMachine<States>.Initialize(this);
ChangeState(States.Init);
}
//状態遷移メソッド
public void ChangeState(States states){
fsm.ChangeState(states);
currentState = fsm.State;
}
//Buttonに登録
public void OnClick()
{
Debug.Log("OnClick");
Debug.Log(fsm.State);
switch (fsm.State)
{
case States.Init:
ChangeState(States.Play);
break;
case States.Play:
ChangeState(States.Win);
break;
case States.Win:
ChangeState(States.Lose);
break;
case States.Lose:
ChangeState(States.Init);
break;
default:
break;
}
}
}
実行結果
参考
開発中のゲーム
ポケモン+デジタルカードゲーム をモバイル向けに開発してます。