# cframework_xlua
**Repository Path**: Wnity/cframework_xlua
## Basic Information
- **Project Name**: cframework_xlua
- **Description**: 支持对MonoBehaviour和ScriptableObject增加可序列化field的lua热更框架
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-07-08
- **Last Updated**: 2025-04-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 项目目的
- 快速接入 [xlua](https://github.com/Tencent/xLua.git) ,让热更初学者更快熟悉热更流程,供对热更有兴趣的同学学习
# demo
[zhuarong](https://gitee.com/Wnity/zhuarong)
# 功能
- **加入[zserialize](https://gitee.com/Wnity/SerializeEx.git),使对MonoBehaviour和ScriptableObject增加可序列化field时支持lua热更**
- 一键打包热更的代码包、资源包、app
- 可更新热更逻辑和游戏逻辑
- 自动检测热更代码和资源包是否兼容旧版app
- 各平台独立发版配置,规范不同平台或渠道的发版流程
- 附带测试用的本地http服务器,无需另行建服务器测试
- 支持ali oss存储热更数据,支持蒲公英app管理平台,可根据项目扩展更多功能
- 发版后可手动改版本信息和白名单设备
- 发版优化检查是否配置好工具或属性并提示,避免发版过程才发现问题
# unity版本
- 2021.3.x+
- 其他版本请自行测试
# 发版(以win64为例,其他平台同理):
- **要使用zserialize的话,先点击菜单项zserialize->SerializeAllScript**
- 在unity中打开BuildPlayerSettings/publish目录,右键点击win64_dev,选择cframework_xlua->BuildPlayer->Build,发完版后会弹框提示
- 发版有问题时会提示,根据提示操作,缺失命令行工具配置等等
- 发版成功会弹框提示下载地址,复制后在浏览器打开
- 支持android,ios,webgl,mac,windows平台
# 教程视频
- [https://www.bilibili.com/video/BV1jT421i7Kg/?vd_source=6cfd43a533c661fdd7e8df80d3b7ecc5](https://www.bilibili.com/video/BV1jT421i7Kg/?vd_source=6cfd43a533c661fdd7e8df80d3b7ecc5)
# 关于zserialize
**使用菜单项zserialize->SerializeAllScript后,会把相关的prefab,scriptableobject和场scene里的相关脚本数据序列化成字典(FieldDictionary),具体请看[https://gitee.com/Wnity/SerializeEx.git](https://gitee.com/Wnity/SerializeEx.git)**
# 集成到自己的项目
- 按xlua的教程把xlua拷到自己的项目
- 把下面的package添加到项目的Packages/manifest.json
```
"com.wnity.zserialize": "https://gitee.com/Wnity/SerializeEx.git?path=Assets/zserialize",
"com.wnity.cframework_xlua": "https://gitee.com/wnity/cframework_xlua.git?path=Assets/cframework_xlua",
```
- 拷贝Assets/fwdata到自己的项目里
- 发版
# 发版配置说明
BuildPlayerSettings/publish/
android_*:android发版配置
ios_*:ios发版配置
webgl_*:webgl发版配置
mac_*:mac发版配置
win32_*:win32发版配置
win64_*:win64发版配置
webgl_wechat_*:微信小程序发版配置
BuildPlayerSettings/config/
HotUpdateBuildSettings:app设置
ChannelUtil_*:渠道工具,用来发布app
DeviceToolPathSetting:设备工具路径配置,以设备名为key,记录不同设备的工具的路径
FileSystemUtil_*:文件系统工具,上传和下载热更文件的工具
PublishUtil_*:发布工具,不同平台的发布流程不一样,需要不同的工具
# 菜单工具说明
cframework_xlua
AddressableTool->build:测试addressable发版
SCM->RestoreAndCleanAllChanges:回滚和清除所有修改
HttpServer->Stop:停http服务器
InitFramework: 集成框架到项目时用来配置框架
Assets->cframework_xlua
BuildPlayer
Build:构建发版
CheckEssential:检查必须的工具和字段
SwitchPlatform:切换平台
HttpServer
Start:开启http服务器,供客户端热更
PythonHttpServer
Start: 开启python的http服务器,供客户端热更
# dll说明
- cframework_xlua.dll:供游戏逻辑dll用的框架
- BaseLaunchHotUpdate.dll,LaunchHotUpdate.dll:启动逻辑的dll
- BaseHotUpdate.dll,HotUpdate.dll:热更逻辑功能基类的dll
- Assembly-CSharp.dll:游戏逻辑,可热更
# ScriptableObject说明
- HotUpdateAppSettings: App配置,有app name,生成路径等
- ChannelUtil: 渠道工具,不同渠道的上传方法不一样,有蒲公英,apple store,微信,本地文件系统
- DeviceToolPathSetting: 工具路径配置,可在这里对不同发版机器进行不同的工具路径配置
- FileSystemUtil: 文件系统工具,用来对oss或文件系统的文件进行保存和读取,有oss,本地方件系统和本地http服务器文件系统
- PublishUtil: 发布工具,不同平台需要发布的流程不一样
- BuildPlayerSettings: 发版配置,针对每个平台一份
# 项目用的框架数据和资源
Assets/fwdata: 热更框架需要的资源
BuildPlayerSettings/publish:各平台发版配置
BuildPlayerSettings/config:一些共享的配置
HotUpdate:热更下载逻辑和资源
HotUpdate.prefab:附带运行热更逻辑的资源
load_dll_config.txt:读入热更dll和运行入口的配置
tex: 热更时用到的ui贴图目录
Scripts: 热更逻辑脚本
LaunchHotUpdate
Scripts/LaunchHotUpdate.cs:程序运行的第一个脚本
LaunchHotUpdate.unity:程序运行时的第一个场景
Game
Scripts
StartGame.cs: 热更后运行的第一个游戏逻辑
LuaDataBehaviour.cs: lua数据脚本,给zserialize序列化成字典
LuaMonoBehaviour.cs: c# call lua的脚本
LuaEnvMgr.cs: lua环境管理器,有读取lua脚本配置
lua/base
ClassUtil.lua.txt: lua中创建lua类的公共方法
SerializeClassUtil.lua: 被zserialize序列化后,用这个文件里的功能封装,使得访问字典和MonoBehaviour无差别
Resources
hotupdate_app_info.txt:热更用的app配置,包含热更http服务器或oss地址
hotupdate_res.txt:热更资源配置,生成代码热更包时,会把这些资源一起打包成assetbundle
Assets/Game:游戏资源目录
assets:资源目录
lua: lua脚本目录
Scripts: c#脚本目录
Game.unity: 游戏场景
# 发版流程
- 转换平台
- 配置平台发版参数(development build, il2cpp等)
- 检查发版必须的工具和字段是否配置完整
- 更新热更配置文件信息
- 检查addressable兼容性并生成addressable
- 打包热量代码包的assetbundle
- 上传addressable和代码包到http文件系统或oss
- 生成app
- 发布app到渠道
- 启动本地http服务器
- 弹窗提示app下载地址
- 复制下载地址到浏览器打开并下载运行app
# 热更流程
- 在BaseLaunchHotUpdate.dll中,BaseLaunchHotUpdate检查是否启用热更,是的话继续
- 进入BaseHotUpdate.dll开始热更逻辑
- 检查是否白名单设备
- 检查是否需要热更代码
- 检查是否需要热更Addressable
- 下载addressable和代码包
- 重加裁Addressable内容信息
- 开始游戏(StartGame),进入Assembly-CSharp.dll
# 环境配置
- 需安装git命令行工具
# Unity技术讨论群
951129597