Unity の QuizU アセットを使って、StateMachine について学んでいきましょう。
QuizU で UI Toolkit を学ぼう~StateMachine~

QuizU
QuizU – A UI toolkit sample
UI Toolkit の使い方が学べる、Unity公式の無料のアセットです。
StateMachine
StateMachine は、アプリの状態を管理するデザインパターンです。
QuizU では、画面の状態を StateMachine で管理しています。
状態
SequenceManager.cs で StateMachine を生成しています。
そして、SetStates() で各画面の状態を生成しています。
以下は QuizU を参考にしたサンプルコードになります。
private void SetStates() {
m_rSplashScreenState = new DelayState(m_fLoadScreenTime, SceneEvents.LoadProgressUpdated, SceneEvents.PreloadCompleted, "LoadScreenState");
m_rRecordScreenState = new State(null, "RecordScreenState", m_bDebug);
m_rAnnualBalanceScreenState = new State(null, "AnnualBalanceScreenState", m_bDebug);
m_rMonthlyBalanceScreenState = new State(null, "MonthlyBalanceScreenState", m_bDebug);
m_rSettingsScreenState = new State(null, "SettingsScreenState", m_bDebug);
}
State は、AddLink() で渡された Link の条件が満たされたら次の状態に遷移します。
DelayState は State と同様ですが、一定時間経過後に状態を遷移します。
状態の遷移
AddLinks() で状態の遷移を設定しています。
Link は、指定された状態に遷移します。
EventLink は、Subscribe で指定したイベントを受け取ったら状態を遷移します。
private void AddLinks() {
m_rSplashScreenState.AddLink(new Link(m_rRecordScreenState));
ActionWrapper rRecordShownWrapper = new ActionWrapper {
Subscribe = handler => UIEvents.RecordShown += handler,
Unsubscribe = handler => UIEvents.RecordShown -= handler
};
ActionWrapper rAnnualBalanceShownWrapper = new ActionWrapper {
Subscribe = handler => UIEvents.AnnualBalanceShown += handler,
Unsubscribe = handler => UIEvents.AnnualBalanceShown -= handler
};
ActionWrapper rMonthlyBalanceShownWrapper = new ActionWrapper {
Subscribe = handler => UIEvents.MonthlyBalanceShown += handler,
Unsubscribe = handler => UIEvents.MonthlyBalanceShown -= handler
};
ActionWrapper rSettingsShownWrapper = new ActionWrapper {
Subscribe = handler => UIEvents.SettingsShown += handler,
Unsubscribe = handler => UIEvents.SettingsShown -= handler
};
m_rRecordScreenState.AddLink(new EventLink(rAnnualBalanceShownWrapper, m_rAnnualBalanceScreenState));
m_rRecordScreenState.AddLink(new EventLink(rMonthlyBalanceShownWrapper, m_rMonthlyBalanceScreenState));
m_rRecordScreenState.AddLink(new EventLink(rSettingsShownWrapper, m_rSettingsScreenState));
m_rAnnualBalanceScreenState.AddLink(new EventLink(rRecordShownWrapper, m_rRecordScreenState));
m_rAnnualBalanceScreenState.AddLink(new EventLink(rMonthlyBalanceShownWrapper, m_rMonthlyBalanceScreenState));
m_rAnnualBalanceScreenState.AddLink(new EventLink(rSettingsShownWrapper, m_rSettingsScreenState));
m_rMonthlyBalanceScreenState.AddLink(new EventLink(rRecordShownWrapper, m_rRecordScreenState));
m_rMonthlyBalanceScreenState.AddLink(new EventLink(rAnnualBalanceShownWrapper, m_rAnnualBalanceScreenState));
m_rMonthlyBalanceScreenState.AddLink(new EventLink(rSettingsShownWrapper, m_rSettingsScreenState));
m_rSettingsScreenState.AddLink(new EventLink(rRecordShownWrapper, m_rRecordScreenState));
m_rSettingsScreenState.AddLink(new EventLink(rAnnualBalanceShownWrapper, m_rAnnualBalanceScreenState));
m_rSettingsScreenState.AddLink(new EventLink(rMonthlyBalanceShownWrapper, m_rMonthlyBalanceScreenState));
}
まとめ
QuizU は、UI Toolkit の使い方を学べるアセットになります。
今回は、StateMachine について使い方を見ていきました。
アプリを作るときによく使われる手法を一緒に学んでいきましょう。
コメント