Unity State Management
ステートマネージャ
using UnityEngine;
using UniRx;
/// <summary>
/// GameStateManager
/// 他のスクリプトから State を参照される可能性があるため
/// 早めに初期化(DefaultExecutionOrder = -1)
/// </summary>
[DefaultExecutionOrder(-1)]
public class HogeStateManager: MonoBehavior {
/// <summary>
/// 初期ステート
/// </summary>
[SerializeField]
private HogeState initialState = HogeState.SelectDifficultyPhrase;
/// <summary>
/// 現在のステートが保持されている
/// </summary>
public BehaviorSubject<HogeState> State;
void Start() {
State = new BehaviorSubject<GameState>(initialState);
State.Subscribe(state => {});
State.OnNext(HogeState.XXXX);
}
}ImtStateMachine
BelColo/ImtStateMachineUseSample
using IceMilkTea.Core;
using UnityEngine;
public class Hoge : MonoBehaviour {
private enum StateEventId {
Event,
}
private ImtStateMachine<Hoge> stateMachine;
private int fuga = 1;
private void Awake() {
stateMachine = new ImtStateMachine<Hoge>(this);
stateMachine.AddTransition<AScene, BScene>((int) StateEventId.Event);
stateMachine.SetStartState<AScene>();
}
public void Start() {
this.UpdateAsObservable()
.Subscribe(_ => stateMachine.Update());
}
private class AScene : ImtStateMachine<Hoge>.State {
protected internal override void Enter() {
var fuga = Context.fuga;
}
protected internal override void Exit() {
}
}
private class BScene : ImtStateMachine<Hoge>.State {
protected internal override void Enter() {
}
protected internal override void Exit() {
}
}
}