前言
实战系列是用于记录ET
的使用(踩坑)经验。
热更新
首先,ET的8.1版本(以下称ET)没有自带资源更新的代码,需要自己参考ET和YooAsset的方式实现。
那么第一步就是先创建一个自定义下载组件DownloadComponent
,在Init
中执行CodeLoader
(代码热更)之前添加它。
运行Unity,定位到目录Assets/Scripts/Loader/Resource
,创建DownloadComponent.cs
。
public class DownloadComponent: Singleton<DownloadComponent>, ISingletonAwake
{
//添加Awake方法,检查是否需要下载
//添加CheckDownloadStatus方法,检查是否下载完毕
}
打开YooAsset资源更新篇,拷贝官方推荐代码,填入即可。
然后打开场景的Global,找到Init
,双击进去,在热更代码前添加DownloadComponent
,修改后如下:
private async ETTask StartAsync()
{
//xxxxxx
DownloadComponent downloadComponent = World.Instance.AddSingleton<DownloadComponent>();
await downloadComponent.CheckDownloadStatus();
CodeLoader codeLoader = World.Instance.AddSingleton<CodeLoader>();
//xxxxxx
}
打开ResourcesComponent
调整CDN地址,选择菜单YooAsset/AssetBundle Collector
配置要打包的目录。如此,热更新就配置完成了。
UI框架
一套成熟的UI框架可以为如今市面上大部分主UI玩法的游戏省去大量的开发时间,如果用ET自带的UI框架未免过于简陋。
在这里本人推荐使用YIUI
作为UI框架,当然了如果不适应别人的写法想要自己写一套也可以。
接下来我会参考本人编写的BFEX框架提供一个自己实现的思路。
首先在AUIEvent
中添加OnShow(params object[] args)
用于每次打开UI时的刷新,然后在对应的UIEvent
中添加OnShow
。这样在显示浮动提示时只需要OpenUI
即可,就不需要每次关闭重新进入Awake
。
然后改造UIComponent
的Create
,改为OpenUI或者任何你顺眼的名字,方法调整为如下内容,按需调整:
public static async ETTask<UI> OpenUI(this UIComponent self, string uiType, UILayer uiLayer, params object[] args)
{
if (!self.UIs.TryGetValue(uiType, out var ui))
{
ui = await self.UIGlobalComponent.OnCreate(self, uiType, uiLayer);
self.UIs.Add(uiType, ui);
}
await self.UIGlobalComponent.OnShow(self, uiType, uiLayer, args);
return ui;
}
之后在配套的Remove
改为CloseUI
,也可以自己添加配套的HideUI
和ShowUI
。如此,一个简单的自己实现的UI框架就大功告成了。
最后添加生成代码的脚本省去复制粘贴修改的成本,可参考UI代码生成写属于自己的代码生成脚本。
目前个人在ET实现的UI框架是在公司项目中使用,不便过多展示,大概就是生成并自动绑定一个Mono
脚本到UI根节点,ET
获取对应的UIBind
组件,就可以访问到全部的UI组件了,UI的生命周期添加了OnShow
和OnBeforeDestroy
用于展示和通用关闭,添加了UI反切和模块的概念,只会同时打开一个UI,打开其它模块的UI就会关闭全部当前模块的UI,添加了Node(Panel)
作为二级页面,添加了Unit
作为子游戏对象。