using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.SceneManagement; namespace Stary.Evo.FiniteStateMachine { public static class FSMInitialize { /// /// 状态机初始化 /// /// 指定场景 /// public static FSMManager Init(Scene targetScene) { GameObject targetObject = targetScene.GetRootGameObjects().FirstOrDefault(go => go.name == "FSMManger"); FSMManager fSMManager; if (targetObject == null) { targetObject = new GameObject("FSMManger"); SceneManager.MoveGameObjectToScene(targetObject, targetScene); fSMManager = new FSMManager(); fSMManager.FSMMangerObject = targetObject; void OnSceneUnloaded(Scene scene) { // 当场景卸载时释放缓存 if (scene.name == targetScene.name) { GameObject.Destroy(targetObject); fSMManager = null; } } SceneManager.sceneUnloaded += OnSceneUnloaded; return fSMManager; } else { Debug.LogError("场景: " + targetScene.name + "已经初始化过FSM状态机!!!"); return null; } } } }