[ARPG阶段二] 2.制作主菜单开始游戏场景,完善游戏流程
完整的游戏流程应该是主菜单场景->新建自定义角色场景(如果继续游戏则跳过这步)->实际的游戏场景。具体流程如下
新建开始游戏菜单场景并导入摆放好的UI窗口
创建好场景后,这里直接导入摆放好的窗口资源(带三个按钮就行,UI的制作不做重点,资源商店随便找个)。
创建场景管理器
创建场景管理器,挂载同名脚本,用于控制在进入主菜单场景时动态加载主菜单UI窗口。
场景管理器继承自逻辑管理器基类(框架里的一种单例,预先写好了事件监听添加移除的方法),并使用UI框架管理UI窗口的生命周期,框架的导入见第一阶段。
public class MenuSceneManager : LogicManagerBase<MenuSceneManager>
{
void Start()
{
UIManager.Instance.Show<UI_MainMenuSceneWindow>();
}
UI窗口上挂载同名控制类。
集成了UI的View和Controller,其中控制逻辑借由UI框架完成,UI窗口类继承自WindowBase,使用UI框架和自定义特性进行管理。添加开始游戏,继续游戏,关闭游戏三个Button及对应的事件监听方法,并指定窗口关闭时进行窗口AA资源的释放。
[UIElement(false, "UI_MainMenuSceneWindow",1)]
public class UI_MainMenuSceneWindow : UI_WindowBase
{
[SerializeField] Button startButton;
[SerializeField] Button continueButton;
[SerializeField] Button quitButton;
public override void Init()
{
startButton.onClick.AddListener(StartButtonClick);
continueButton.onClick.AddListener(ContinueButtonClick);
quitButton.onClick.AddListener(quitButtonClick);
//TODO:如果当前没有存档,应该隐藏继续游戏按钮
}
public void StartButtonClick()
{
//使用当前存档进行游戏
Close();
}
public void ContinueButtonClick()
{
//创建存档进行游戏-》进入自定义角色场景
Close();
}
public void quitButtonClick()
{
Application.Quit();
}
public override void OnClose()
{
base.OnClose();
//释放自身的AA资源
ResManager.ReleaseInstance(gameObject);
}
}
绑定UI元素。
GameRoot下的GameManager挂载同名脚本
使用GameManager(GameRoot下的单例)进行跨场景数据传输,向GameManager中添加存档相关方法。
public class GameManager : SingletonMono<GameManager>
{
/// <summary>
/// 创建新存档
/// </summary>
public void CreateNewArchiveAndEnterGame()
{
//TODO:进入自定义角色场景
}
/// <summary>
/// 使用存档,进入游戏
/// </summary>
public void UseCurrentArchiveAndEnterGame()
{
// TODO:进入游戏场景
}
向AA中添加UI窗口资源
因为使用了框架中的资源服务,预制体的加载都是通过AA的,所以要添加,资源的释放在窗口Close时调用。
测试结果如下,进入主菜单场景时,场景管理器通过AA加载UI窗口点,击进入游戏触发窗口关闭事件并释放资源。
Unity独立游戏开发-ARPG 文章被收录于专栏
Unity独立游戏开发