Skip to content

DangoRyn/UnityGameFramework_HybridCLR

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UnityGameFramework_Huatuo

huatuo是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案。

  • huatuo扩充了il2cpp的代码,使它由纯AOT runtime变成‘AOT+Interpreter’ 混合runtime,进而原生支持动态加载assembly,使得基于il2cpp backend打包的游戏不仅能在Android平台,也能在IOS、Consoles等限制了JIT的平台上高效地以AOT+interpreter混合模式执行。从底层彻底支持了热更新。

Luban是你的最佳游戏配置解决方案

luban高效地处理游戏开发中常见的excel、json、xml之类的数据,检查数据错误,生成c#等各种语言的代码,导出成bytes或json等多种格式。

luban统一了游戏配置开发工作流,极大提升了策划和程序的工作效率。

核心特性

  • 强大的数据解析和转换能力 {excel(csv,xls,xlsx)、json、bson、xml、yaml、lua、unity ScriptableObject} => {binary、json、bson、xml、lua、yaml、erlang、 custom format}
  • 增强的excel格式,可以简洁地配置出像简单列表、子结构、结构列表,以及任意复杂的深层次的嵌套结构。
  • 完备的类型系统,支持OOP类型继承,搭配excel、json、lua、xml等格式数据灵活优雅表达行为树、技能、剧情、副本之类复杂GamePlay数据
  • 支持生成c#、java、go、c++、lua、python、javascript、typescript、erlang、rust、gdscript 代码
  • 支持生成 protobuf(schema + binary + json)、flatbuffers(schema + json)、msgpack(binary)
  • 强大的数据校验能力。ref引用检查、path资源路径、range范围检查等等
  • 完善的本地化支持。静态文本值本地化、动态文本值本地化、时间本地化、main-patch多地区版本
  • 强大灵活的自定义能力,支持自定义代码模板和数据模板
  • 通用型生成和缓存工具。也可以用于生成协议、数据库之类的代码,甚至可以用作对象缓存服务
  • 良好支持主流引擎、全平台、主流热更新方案、主流前后端框架。支持Unity、Unreal、Cocos2x、Godot、微信小游戏等主流引擎。工具自身跨平台,能在Win,Linux,Mac平台良好工作。

完整特性请参见 feature


Game Framework是一个基于 Unity 引擎的游戏框架,主要对游戏开发过程中常用模块进行了封装,很大程度地规范开发过程、加快开发速度并保证产品质量。 在最新的 Game Framework 版本中,包含以下 19 个内置模块,后续我们还将开发更多的扩展模块供开发者使用。

  1. 全局配置 (Config) - 存储一些全局的只读的游戏配置,如玩家初始速度、游戏初始音量等。

  2. 数据结点 (Data Node) - 将任意类型的数据以树状结构的形式进行保存,用于管理游戏运行时的各种数据。

  3. 数据表 (Data Table) - 可以将游戏数据以表格(如 Microsoft Excel)的形式进行配置后,使用此模块使用这些数据表。数据表的格式是可以自定义的。

  4. 调试器 (Debugger) - 当游戏在 Unity 编辑器中运行或者以 Development 方式发布运行时,将出现调试器窗口,便于查看运行时日志、调试信息等。用户还可以方便地将自己的功能注册到调试器窗口上并使用。

  5. 下载 (Download) - 提供下载文件的功能,支持断点续传,并可指定允许几个下载器进行同时下载。更新资源时会主动调用此模块。

  6. 实体 (Entity) - 我们将游戏场景中,动态创建的一切物体定义为实体。此模块提供管理实体和实体组的功能,如显示隐藏实体、挂接实体(如挂接武器、坐骑,或者抓起另一个实体)等。实体使用结束后可以不立刻销毁,从而等待下一次重新使用。

  7. 事件 (Event) - 游戏逻辑监听、抛出事件的机制。Game Framework 中的很多模块在完成操作后都会抛出内置事件,监听这些事件将大大解除游戏逻辑之间的耦合。用户也可以定义自己的游戏逻辑事件。

  8. 文件系统 (File System) - 虚拟文件系统使用类似磁盘的概念对零散文件进行集中管理,优化资源加载时产生的内存分配,甚至可以对资源进行局部片段加载,这些都将极大提升资源加载时的性能。

  9. 有限状态机 (FSM) - 提供创建、使用和销毁有限状态机的功能,一些适用于有限状态机机制的游戏逻辑,使用此模块将是一个不错的选择。

  10. 本地化 (Localization) - 提供本地化功能,也就是我们平时所说的多语言。Game Framework 在本地化方面,不但支持文本的本地化,还支持任意资源的本地化,比如游戏中释放烟花特效也可以做出几个多国语言的版本,使得中文版里是“新年好”字样的特效,而英文版里是“Happy New Year”字样的特效。

  11. 网络 (Network) - 提供使用 Socket 长连接的功能,当前我们支持 TCP 协议,同时兼容 IPv4 和 IPv6 两个版本。用户可以同时建立多个连接与多个服务器同时进行通信,比如除了连接常规的游戏服务器,还可以连接语音聊天服务器。如果想接入 ProtoBuf 之类的协议库,只要派生自 Packet 类并实现自己的消息包类即可使用。

  12. 对象池 (Object Pool) - 提供对象缓存池的功能,避免频繁地创建和销毁各种游戏对象,提高游戏性能。除了 Game Framework 自身使用了对象池,用户还可以很方便地创建和管理自己的对象池。

  13. 流程 (Procedure) - 是贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程,只要派生自 ProcedureBase 类并实现自己的流程类即可使用。

  14. 资源 (Resource) - 为了保证玩家的体验,我们不推荐再使用同步的方式加载资源,由于 Game Framework 自身使用了一套完整的异步加载资源体系,因此只提供了异步加载资源的接口。不论简单的数据表、本地化字典,还是复杂的实体、场景、界面,我们都将使用异步加载。同时,Game Framework 提供了默认的内存管理策略(当然,你也可以定义自己的内存管理策略)。多数情况下,在使用 GameObject 的过程中,你甚至可以不需要自行进行 Instantiate 或者是 Destroy 操作。

  15. 场景 (Scene) - 提供场景管理的功能,可以同时加载多个场景,也可以随时卸载任何一个场景,从而很容易地实现场景的分部加载。

  16. 配置 (Setting) - 以键值对的形式存储玩家数据,对 UnityEngine.PlayerPrefs 进行封装,也可以将这些数据直接存储在磁盘上。

  17. 声音 (Sound) - 提供管理声音和声音组的功能,用户可以自定义一个声音的音量、是 2D 声音还是 3D 声音,甚至是直接绑定到某个实体上跟随实体移动。

  18. 界面 (UI) - 提供管理界面和界面组的功能,如显示隐藏界面、激活界面、改变界面层级等。不论是 Unity 内置的 uGUI 还是其它类型的 UI 插件(如 NGUI),只要派生自 UIFormLogic 类并实现自己的界面类即可使用。界面使用结束后可以不立刻销毁,从而等待下一次重新使用。

  19. Web 请求 (Web Request) - 提供使用短连接的功能,可以用 Get 或者 Post 方法向服务器发送请求并获取响应数据,可指定允许几个 Web 请求器进行同时请求。


手把手教你GF运行热更新

  • 首先进入HuatuoData目录
  • 运行 init_huatuo_repos.bat 或 相应 .sh
  • 进行 set_version_2020.3.33.bat 或 相应 .sh。
  • 运行 init_local_il2cpp_data.bat或者相应.sh文件。注意!有可能需要修改脚本,设置你的unity安装路径!

如果LocalIl2CppData目录成功创建,没有遇到任何错误,恭喜我们的huatuo部署完成了。

使用unity打开,目前使用版本2020.3.33。

  • 注意:由于不同版本之间il2cpp存在差异,所以需要精准匹配版本,LTS版本之间il2cpp差异较小有可能可以公用3.33的il2cpp。

执行Huatuo->Generate->MethodBridge_arm64/MethodBridge_x64

这是因为经测试在Android下,热更代码中调用gameframework部分相关函数是会出现异常的,原因是AOT-interpreter桥接函数缺失引起的,但是win平台中并不会提示。

类似错误: ExecutionEngineException: GetManaged2NativeMethodPointer not support. xxxx 具体参考:huatuo默认桥接函数集

MethodBridgeGenerator::PrepareCustomMethodSignatures已经补上这个"i4i8i8i8i4i1i8"这个函数签名。

        private List<string> PrepareCustomMethodSignatures()
        {
            return new List<string>
            {
                // "vi8i8",
                "S108i8i8",
                "i4i8i8i8i4i1i8",
            };
        }

将生成的文件Assets/../Library/Huatuo/MethodBridge_x64.cppMethodBridge_arm64复制到Assets/../HuatuoData/LocalIl2CppData/il2cpp/libil2cpp/huatuo/interpreter (注意:有时候我们修改il2cpp源码的时候,并没有生效,需要清缓存,清理Library/Il2cppBuildCache目录。)

然后我们选择对应要编译的平台,注意目前只能编译64位的程序,勾选32位程序将无法正确编译,且需要将Use Incremental GC关闭,编译选择il2cpp,api选择.net 4.x。 热更代码位于Assets/GameMain/Scripts/Hotfix中 选择Huatuo->CompileDLL->{target},将会自动编译热更代码,并且拷贝至GameMain/Hotfix目录下。 GameMain/MetadataAssemblys路径中存放用于作为补充元数据的dll,使用过程中需要向ProcedureLoadHotfix中s_AotDllList中添加相应的dll。 用于补充元数据裁剪后的dll使用参考:基于补充元数据的泛型函数实例化技术

Game Framework->Resource Tools->Resource Builder选择对应平台打包, 然后将打包路径下Package/{version}/{target}目录下文件拷贝至StreamingAssets中,总共6文件GameData、GameFrameworkVersion、Hotfix、MetadataAssemblys、Resources、UI 具体GF相关使用,以及资源更新配置参考官网:GF官网连接

最后开始unity中对应平台的打包即可,最后看到显示“测试”UI,则说明热更成功了。

遇到热更相关错误,务必先阅读官方常见错误处理文档: Huatuo常见错误处理

About

UnityGameFramework框架,目标整合HybridCLR和luban提供完整热更和配置表演示。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy