# 3-5.UI模块 - UIModule 一个游戏70%都是UI,剩下30%才是GamePlay,所以有一套简洁强大的商业化UI模块以及UI开发工作流将是项目的一大利器,能够提高至少一倍的开发效率。(配合事件模块实现MVE[Model - View - Event]事件驱动架构) UI脚本为纯C#实现,脱离Mono的生命周期,由UIModule的帧更新驱动并管理UI的生命周期。 IUIBehaviour为UI通用行为接口、UIBase为UI基类、UIWindow为UI窗口基类,UIWidget为UI组件基类。 ## 前期配置: 注意!!!!m_item节点为特殊节点表示是UI下的UIWidget组件,不会继续往下遍历生成UI代码。若需要这个UIWidget组件m_item的代码则在m_item右键生成这个组件的UI脚本。 Scene窗口下右键ScriptGenerator菜单下About目录有默认UI命名前缀规范。 ![image](src/3-5-1.png) 有自定义需求可以在TEngineSetting下进行自定义。 ![image](src/3-5-2.png) ### 开发工作流: 1.遵守前期默认配置或者自定义配置进行UI编排 ![image](src/3-5-3.png) 2.在UI的根节点右键ScriptGenerator生成UI代码到剪贴板上!!!(注-使用-UniTask的生成代码可以做异步事件流驱动的UI。) ![image](src/3-5-4.png) 3.自行创建UI脚本到需要的目录下并复制UI脚本。 ## 举例示范 ``` csharp // 同步打开面板 GameModule.UI.ShowUI([nullable]userData); // 异步打开面板 GameModule.UI.ShowUIAsync([nullable]userData); namespace GameLogic { /// /// BattleMainUI面板 /// UIWindow需要以下特性,UILayer可以自行定义,fullScreen表示为全屏面板会停止和隐藏这个面板堆栈后面的面板。 /// [Window(UILayer.Bottom,fullScreen:true)] class BattleMainUI : UIWindow { private TouchMove m_touchView; #region 脚本工具生成的代码 private RectTransform m_rectContainer; private GameObject m_itemTouch; private Button m_btnLeaveBattle; private GameObject m_goTopInfo; private Button m_btnPause; public override void ScriptGenerator() { m_rectContainer = FindChildComponent("m_rectContainer"); m_itemTouch = FindChild("m_rectContainer/m_itemTouch").gameObject; m_btnLeaveBattle = FindChildComponent