同一シーン内におけるGameObject・スクリプトの状態管理
(2016/10/30)
処理内容をかなり書き換えている(&↓がクッソひどい内容)ので新しくまとめる
(11/29:全面修正)
SceneUtilsとは
シーン内でのオブジェクト・スクリプトの動作を状態ごとに切り分けて実装するために使用するスクリプト。
// 状態管理とか書いたけど無知&&オレオレなので注意
// そしてこれは多分世間一般で言う状態管理ではない
SceneUtilsファイル構成
ASSETS └─Scripts └─SceneUtils SceneEvent.cs SceneManager.cs SceneMonoBehaviour.cs
スクリプトについて
SceneManager.cs
- 状態の設定と遷移を行うスクリプト
Inspectorからの設定項目
Initial Scene ID
最初に実行したい状態のScenesのElementID
Finalize Scene ID
SceneManager.GotoFinalScene()を実行した時に遷移する状態のElementID
Scenes
使用する状態の数を指定 SceneMonoBehaviourの実装を行ったスクリプトを設定
遷移方法
Inspectorで設定した状態を遷移するにはSceneManagerのインスタンスから遷移用のMethodを実行する
インスタンスの取得
SceneManager.GetInstance()
遷移用Method
// Scenesに設定した順番で次の状態に遷移 SceneManager.GotoNextScene() // Scenesに設定した順番で前の状態に遷移 SceneManager.GotoPrevScene() // Scenesに設定した順番で指定したIDの状態に遷移 SceneManager.GotoSceneById(int) // FinalizeSceneに設定したIDの状態に遷移 SceneManager.GotoFinalScene() // 状態遷移を終了 SceneManager.GotoEnd()
これとは別にSceneMonoBehaviourで実装できる時間管理の処理(OnTimerComplete)を実行するためには(主にInitializeSceneで)以下のメソッドを使用する
// Timer開始 SceneManager.StartTimer(double) // Timer終了 SceneManager.StopTimer()
SceneMonoBehaviour.cs
- SceneMonoBehaviourで使用される状態ごとの実装を行うスクリプト
必須
SceneMonoBehaviour.InitializeScene()
SceneManagerを使用し、他の状態からこの状態に遷移した時に実行される最初の処理
SceneMonoBehaviour.FinalizeScene()
SceneManagerを使用し、この状態から他の状態に遷移する時に実行される最後の処理
任意
SceneMonoBehaviour.OnTimerComplete(System.EventArgs)
SceneManagerからStartTimerで設定した時間が経過したときに実行される処理
SceneMonoBehaviour.OnChangeScene(System.EventArgs)
状態が切り替わる直前に実行される処理 実行順:OnChangeScene→FinalizeScene→次の状態のInitializeScene
SceneMonoBehaviour.OnEndScene(System.EventArgs)
SceneManagerからGotoEnd()と実行された時に処理される専用処理 他の状態には遷移せずそこで終了なる
SceneMonoBehaviour.OnStageClicked(System.EventArgs)
画面上がクリックされた時に実行する処理 (主にテストなどで使用する・無効化していたかもしれない…)
SceneEvent.cs
delegateの宣言とか
使用方法
SceneManagerをシーン内の適当なオブジェクトにAddし、状態ごとの実装を行ったSceneMonoBehaviourをSceneManagerのScenesに設定する。
実装方法
サンプルスクリプト参照