XLua热更项目模板 持续更新
1.Assetbundle框架 2.UI框架 3.热更功能实现 4.Lua框架 5.红点通知系统 6.公告提示信息滚动通知栏 7.Hotfix热修复 8.编辑器本地加载,热更加载模式切换 9.UI动画功能(使用DOTween实现) 10.快捷Debug功能,捕获错误
直接将这个项目作为项目初始工程就行
开始场景:Assets/Scenes/Entrance.unity
对Unity版本没什么要求,都是写底层基础的代码。 Unity开发版本:2020.3.29f1c1 使用低于该版本的Unity猜测也是没啥问题的
啊呆(开发者)
1.Assetbundle框架: 1)自动标记指定文件夹下的所有资源,不同文件已模块区分 2)打包被标记的资源,打包策略是根据场景来设置的 3)复制lua文件到生成Assetbundle的路径 4)生成校验文件【MD5和文件大小以及相对路径】-包括lua文件和ab资源,上传服务器即可完成部署
5)热更功能:服务器下载资源,资源比对,更新差异文件
下载资源时能够获取到下载进度
单个文件的下载进度
总进度*已经下载文件个数/总需要下载的数量
***自动化发布资源流程【可视化发布资源窗体】
一键 【标记资源,打包资源,复制lua文件,生成校验文件,将需要热更的资源上传到服务器】即可
2.UI框架 不同UI窗体的层级管理 UI动画使用DOTWeen
包含UI打开关闭时的动画20个左右-旋转 移动 缩放 淡入淡出 单轴缩放 浮动 震动
UI窗体打开时只需要配置数据即可实现:
1.模态窗 ,遮罩颜色,窗口类型,点击空白区域退出,是否缓存,是否播放打开时音效以及音效配置
2.反向切换功能 (打开一个窗口关闭上一个窗口,关闭时又恢复显示上一个窗口)
3.打开时关闭其他窗口,关闭时可以选择是否恢复之前被关闭的窗口
4.配置动画可以配置速度和回调
5.UINameTable功能,预制体挂载脚本并赋值后,可以直接在代码上获取游戏物体
即获取节点时不需要GameObject.Find()来查找,
直接输入对应的游戏对象的名字直接就能获取到节点
13.Unity生命周期映射 自动映射与预制体同名的lua脚本使其拥有Unity的生命周期函数 Start Update Awake OnDisable... 被销毁时自动释放引用
3.UI窗体之间数据传递功能,降低不同窗体数据传输的耦合性 需要注册和注销事件已经发送事件,即可达到不同窗体消息传递功能 与socket通讯时差不多。但是这个要简单些
4.提示框已经横幅滚动通知功能 可以实现一个提示文本,位置,速度,已经点击事件都可配置 可以一次性实现多个文本提示,如打怪装备获取多个,可一同显示 滚动公告,配置播放次数和速度,以及位置
5.Debug功能,手机端最好的查看日志调试工具 使用GUI实现,鼠标右键或者5个手指头同时点击屏幕出现/关闭 捕获日志,即使其他地方报错了,debugger功能也能捕获到异常 添加调试功能,打印缓存,即使了解内存都用了哪些 重启游戏,假重启,释放虚拟机和引用,重新加载开始场景,决绝重启游戏因为编译导致速度慢的问题
6.声音播放管理器 区分背景音乐,游戏音效,按钮点击音效播放器 切换背景音乐功能 每个管理器单独设置音量大小
7.红点系统 邮件,消息,战绩,好友通知 显示小红点功能 界面打开时注册【事件名+ 红点GameObjet】 界面被销毁时注销 收到服务器消息或者特定情境直接触发红点事件即可达到显示红点要求 可实现当子节点有消息需要显示红点时父节点对应的红点也会显示
8.场景,资源加载功能 加载不同场景加载不同模块的资源包即可,退出时可自动释放 加载场景有专门的加载进度和界面,异步加载 加载时可播放滚动通知栏 加载ab资源时,会先递归加载当前ab包的所有依赖资源,然后在卸载时如果被其他包依赖就不会卸载,直到所有依赖都没了后才卸载资源, 你也可以在debug功能中查看所有的依赖关系
9.Lua框架,管理Lua虚拟机和lua代码加载资源释放问题 自定义lua代码加载路径 ...核心框架
10.Hotfix
11.资源加载方式(更利于程序员满足不同需求的开发) 1.在编辑器时可以直接加载本地资源和lua代码 2.在编辑器时可以加载ab包资源与本地lua代码 3.在编辑器时可以加载ab包资源与下载的lua代码 4.可以选择是否开启热更功能
12.公告功能 在玩家更新资源的时候就能够获取到公告信息。准确说的:只要下载地址正确,最先获取的就是公告信息 如果游戏出现了问题,可以在第一时间修改公告。 这样玩家就知道出现了什么问题。 公告可以配置开始显示的时候,结束显示的时间,这样就不用运营守着时间来换公告信息(当然这个我只谢了接口,功能实现很简单)
14.代码重构和手机端测试。还没来得及弄。没时间!!!
.
1.Assetbundle框架
2.UI框架
3.热更功能
4.UI窗体数据传输
5.红点系统
6.热修复功能
7.公告
8.资源加载方式,编辑器与移动设备加载机制
9.Lua框架
10.音频管理
11.移动设备Debug功能
12.提示和滚动通知功能
13.Unity生命周期映射
14.UINameTable,获取节点不用在GameObject.Find();
15.基于DoTween开发的动画组件
...
1.清理XLua生成的代码,然后重新生成(如果没有修改C#代码就不用操作这一步,但是第一次打包必须操作) XLua/Clear Generated Code -->> XLua/Generate Code
2.注入Hotfix(如果没有修改C#代码就不用操作这一步,但是第一次打包必须操作) 检测热修复的宏定义是否打开【HOTFIX_ENABLE】 Xlua/Hotfix Inject In Editor
3.删除StreamingAsset其他平台的资源,只保留当前需要打包平台的资源(也可以全部要删除)
4.开始Build
发布工具(在菜单栏中):
Tools/配置项目并发布
资源版本配置文件:首次生成资源需要先生成资源版本配置文件,
表示您此次发布的资源是属于哪一个版本的
选择发布平台资源(Android iOS Windows)
下方的发布按钮都是一键发布,发布完成后直接将发布目录文件放入服务器即可
增量更新
未完成
更新lua[3,4,5]
只修改了lua代码发布资源时可以点击这个,发布速度更快
step5复制到热更目录
将所有的资源(ab+lua)复制到发布目录
资源版本号不同说明:
你的服务器可以放不同版本的资源
如:Version-220302151834 Version-220202231835
你可以直接修改服务器中VersionConfig.json中的的 version 为你想要的版本号
修改后游戏更新时则会以version中的版本来读取资源
便于热更出错后回退版本
公告信息配置(在菜单栏中): Tools/配置公告信息 配置的公告信息会在游戏加载界面的公告显示出来 生成公告信息后会出现在项目发布目录中,直接复制到服务器热更资源的根目录即可 --与VersionConfig.json同级
一、Assetbundle(ab) 1.设置标签 2.构建ab包 3.复制lua代码到放置构建ab放置的位置 4.创建校验文件:lua+ab 5.复制到发布目录 二、下载 1.将(一、5 发布目录中的资源全部上传到服务器热更目录就行) 2.修改热更地址 【HotUpdateManager._ServerAddress】 3.启动app将会自动更新 4.如果是首次运行,会将放在StreamingAssets中对应平台的文件拷贝到持久化路径 5.如果拷贝的资源与服务器的资源一致则不会下载任何东西,否则下载本地没有和差异文件 6.更新完游戏正式开始。入口方法【GameInit.DirectlyStartGame】
使用: Hotfix修复 在Assets/Scripts/Lua/src/Hotfix.lua 脚本中可以进行热修复C#代码 加载公共资源方法(不需要手动添加,所有的Common模块下的资源在GameInit中会默认加载) AssetBundleManager.Instance.LoadAllCommonBundle(() => { //回调方法 });
(下面的方法一般在lua中使用)
自定义加载资源包(List集合)
CS.ABFramework.AssetBundleManager.Instance:LoadBundleByList({"Login/Prefabs", "Login/UI"}, function() --回调 end)
加载场景(场景相对路径,回调,是否卸载之前场景资源,需要加载的模块)
CS.LoadSceneManager.Instance:Load("Hall/Hall", function() self:Init() end, true, "Hall")
滚动通知(有其他参数可配置,位置可变,次数可变...)
CS.UIFramework.TipsManager.Instance:ShowRollNotice("今天星期三三了天星期22222222的速度!")
单个提示框(提示框可点击)
CS.UIFramework.TipsManager.Instance:ShowTips("今天星期三了!", function(go) print("点击事件" .. go.name) end, true, -100, 500)
多条提示框(提示框可点击)
CS.UIFramework.TipsManager.Instance:ShowTipsByArray({"屠龙刀 ¥999", "倚天剑 ¥888", "一阳指 ¥998", "九阳神功 ¥1100", "移花接木 ¥2500"}, function(go) print("点击事件" .. go.name) end)
self.form是【BaseUIView】组件的引用
UI窗体接收消息(msg可以为任意数据,sender 为发送者的窗体名称)
self.form:OnRecivedUIMsg("Shake", function(msg, sender)
-- print(msg, sender)
CTRL.doShake()
end)
UI窗体发送消息
self.form:SendUIMssage("Login", "大家好,我是消息管理器发来的消息!")
::其他的就不一一列举了。。。毕竟我很懒 ::苹果手机没测试...没钱买Mac,所以打不了包
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。