场景状态基类
public abstract class ISceneState
{
public abstract string SceneName { get; }
public virtual void StateStart() { }
public virtual void StateEnd() { }
public virtual void StateUpdate() { }
public virtual void SceneLoaded() { }
}
场景状态控制类
public class SceneStateController
{
public static ISceneState currentState;
public static void SetState(ISceneState state)
{
if (currentState != null)
{
currentState.StateEnd();
}
currentState = state;
currentState.StateStart();
SceneManager.LoadSceneAsync(currentState.SceneName).completed += operation =>
{
currentState.SceneLoaded();
};
}
//需要在游戏管理类Update中调用
public static void StateUpdate()
{
currentState?.StateUpdate();
}
}
使用
public class Scene1State : ISceneState
{
public override string SceneName => "Scene1";
public override void StateStart()
{
Debug.Log(SceneName + " StateStart");
}
public override void StateUpdate()
{
Debug.Log(SceneName + " StateUpdate");
}
public override void StateEnd()
{
Debug.Log(SceneName + " StateEnd");
}
public override void SceneLoaded()
{
Debug.Log(SceneName + " SceneLoaded");
}
}
跳转场景
SceneStateController.SetState(new Scene1State());