FSM_Over
This commit is contained in:
46
Assets/03.FiniteStateMachine/RunTime/FSMInitialize.cs
Normal file
46
Assets/03.FiniteStateMachine/RunTime/FSMInitialize.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
public static class FSMInitialize
|
||||
{
|
||||
/// <summary>
|
||||
/// 状态机初始化
|
||||
/// </summary>
|
||||
/// <param name="targetScene">指定场景</param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user