/// <summary> /// 切换到指定模式 /// </summary> /// /// <param name="mode">目标模式</param> /// /// <author>Nianchen Deng</author> protected void SwitchToMode(_Mode mode) { if (mode == null) { return; } if (!mode.CheckBeforeEnter()) { return; } if (currentMode != null) { currentMode.Exit(); } var lastMode = currentMode; currentMode = mode; try { currentMode.Enter(); } catch (Exception e) { // 进入新模式失败,返回之前的模式 Debug.LogException(e); if (lastMode != null) { lastMode.Enter(); } } }
/// <summary> /// 添加一个模式对象。 /// <para>模式基类<see cref="_Mode"/>会在Awake()中调用该方法进行注册。</para> /// </summary> /// /// <param name="mode">模式对象</param> /// /// <author>Nianchen Deng</author> internal void AddMode(_Mode mode) => _modes.Add(mode.name, mode);