|
大家好,我是 Jason,独立游戏开发者,目前在澳洲留学,今天为大家介绍我开发的JEngine。
曾经我做过2款游戏,都上过知名游戏平台热门榜前10,新品前5,与此同时,我面临了游戏开发的一大问题:更新频繁,审核过慢。
于是,我找到了解决方案,就是使用热更新。
当时的我,是热更新方面的小白,于是乎选择了某成熟方案,效果达到了我的期盼,可惜接入流程过于繁琐,且一个游戏,一年需要交付5万,这让身为独立开发者的我不太愿意接受。
最终,我开始研究热更新,并开始了自己的框架研发之旅。
JEngine,就是我的作品,以下是JEngine演示视频:
透过视频,可以看到,JEngine支持开发模式和真机模式,开发模式可以从Unity内获取资源,进行加载,而真机模式,需要打包AssetBundles,并上传至资源服务器,才可以运行。
而且,根据视频中控制台的输出,显而易见,JEngine具备了热更性,代码完全可以做到热更。
有了JEngine,也就没有必要去花冤枉钱买贵的要命的热更新解决方案了!
那么,JEngine,到底是一个什么样的框架呢?
JEngine 集成了 XAsset 和 ILRuntime,提供了开箱即用的C#代码和资源热更环境。
JEngine是这样处理热更新的:
JEngine热更流程
通过这个流程图,可以看到,JEngine 主要是整合了 XASSET 和 ILRuntime 达成C#代码热更的基础功能,然而,这仅仅是JEngine的开始。
我们游戏开发者最怕的是什么?莫过于游戏源代码泄露了!
而热更DLL,最容易被别人下载下来后反编译,以查看源代码了,要知道,这可是很危险的!
于是,JEngine对热更DLL做了一层加密:
C#热更代码生成的DLL会通过AES-128-ECB模式加密进AssetBundle,运行游戏时动态解密
热更DLL加密
这个AES加密什么意思呢?有兴趣的可以百度一下,是目前最安全的一种加密方式,穷举法破解,要破解至少几年,所以别人就算想破解你源代码,也得破解几年,到那时候,游戏还在不在都是个问题!更何况,过了几年,源码也不一样了,换个秘钥,又得破解好几年!
够意思吧?
而且,XAsset还支持对AssetBundle,进行VFS处理,进了VFS,AssetStudio这种工具也无法获取你的热更资源,所以你的热更DLL可谓是嵌上了2层龟壳!
有人可能会问,就这样使用XAsset和ILRuntime,经过这2个项目作者的许可了吗?
放心,JEngine是开源的其次,XAsset和ILRuntime是MIT协议,什么意思呢,就是可以随便进行更改使用最后,作者也是XAsset以及ILRuntimeU3D项目的贡献开发者成员之一,嘿嘿
Unity热更新还会在开发的时候遇到一个问题,就是,不热更的脚本,可以在Inspector拖拽,进行可视化的GameObject编辑,但是热更代码的脚本,是不允许拖拽到Inspector,进行可视化编辑的,因为热更代码的脚本不存在主工程里,热更新后会引发丢失。
通常来讲,我们想要动态将热更新的脚本添加,并进行操作,要这样进行:- var XXX = GameObject.Find(&#34;xxxx&#34;).AddComponent<XX>();//手动添加脚本
- XXX.enabled = false;//不让脚本执行
- XXX.xxxField1 = xxxxxx;//手动赋值*1
- XXX.xxxField2 = xxxxxx;//手动赋值*2
- XXX.xxxField3 = xxxxxx;//手动赋值*3
- //...
- XXX.enabled = true;//激活
- XXX.Awake();//重新执行Awake
复制代码 这样,通常添加一个脚本,就要十几~几十行代码,添加n个,就是不小的负担,这让很多已经上线的项目,不可能移植到热更新框架,代价很大!
但是,JEngine就做出了解决方案,可以通过C#反射,动态绑定脚本且赋值
废话不多说,直接上图:
自动绑定赋值热更脚本
只需要给热更场景中的GameObject,或Prefab,加上AutoBind脚本,配置热更脚本的命名空间、类名、想要赋值的参数的数值,即可,支持获取任何场景中物体的组件,非常的方便,这样一配置,就能节约上百行,甚至更多的代码!
这样一来,JEngine可以轻松接入项目,再大的项目,几天就能完全接入,具备热更性能,而小项目,一天以内就能接入热更!
好了,JEngine热更新功能的介绍到此为止,下面说说JEngine的一些其他特性。
JEngine除了热更,还有很多很多功能,只有你想不到的,没有JEngine不可能实现的(只要作者接触过有案例的)
Action队列解决方案
更少的代码,实现更多功能,效率大幅度提高!轻松执行、延时、等待、定期循环、条件循环、同步/异步运行、取消队列可选择在主线程运行代码(子线程无法运行Unity内部API)
- JAction j = new JAction();
- j.Do(() => something toDo)
- .Until(() => something is done)
- .Repeat(() => something toDo, repeatCounts)
- .RepeatWhen(() => something toDo,
- () => condition)
- .Delay(some times)
- .Execute();
复制代码 是不是很酷很强大?
该设计的目的,在于让开发者可以用更少的代码做更强的功能。
我们可以用异步来进行条件等待,可以用for循环,也可以Task.Delay来延时,但是这样写,需要很多代码,且并不是那么美观,JAction,底层用几百行代码,封装了这些功能,提供了精简的API,可以让开发者轻松完成这些功能
同样的效果,JAction仅需十几行,而其他方式(例如写async void / async Task),需要JAction的两倍及以上!
UI解决方案
轻松管理UI周期,链式编程让代码更美观UI定期循环更新?再也不是问题!
UI绑定数据?轻松搞定!
- //循环更新
- var JUI = Showcase.AddComponent<JUI>()
- .onLoop(t1 =>
- {
- ...
- })
- .Activate();
- //调整频率
- t.FrameMode = false;//Run in ms
- t.Frequency = 1000;//Loop each 1s
- //数据绑定
- var JUI = b.AddComponent<JUI>()
- .Bind(data.b)
- .onMessage(t1 =>
- {
- ...
- })
- .Activate();
复制代码 有的时候,UI需要定期循环,放在Update里,是非常不好的习惯,Update可谓Unity的性能杀手,而JUI,可以轻松设置循环模式和频率,可以毫秒循环,也可以帧循环。
与此同时,JUI还可以将UI控件与数据绑定,当数据更新,会唤起JUI相对于的更新方法,这样一来,最为优化性能!
基于MonoBehaviour扩展的生命周期
- public class JBehaviourExample : JBehaviour
- {
- public override void Init()
- {...}
- public override void Run()
- {...}
- public override void Loop()
- {...}
-
- public override void End()
- {...}
- }
复制代码 JBehaviour基于MonoBehaviour,却对Mono的循环进行了一次优化,抛弃了Update,内部运用异步,完成了循环,支持帧循环和毫秒循环,也可以轻松定频率!
基于XAsset的资源加载方案
- //同步阻塞加载
- TextAsset txt = JResource.LoadRes<TextAsset>(&#34;Text.txt&#34;);
- Log.Print(&#34;Get Resource with Sync method: &#34; + txt.text);
- //异步回调加载
- JResource.LoadResAsync<TextAsset>(&#34;Text.txt&#34;,(txt)=>
- {
- Log.Print(&#34;Get Resource with Async method: &#34; + txt.text);
- });
复制代码 XAsset提供的资源加载,非常的好用,可能唯一的美中不足就是不支持泛型了,在这里,JEngine对XAsset进行了封装,使其支持泛型!
对象池解决方案
支持针对Prefab生成对象池大幅度提升性能及内存开销,相比于常规Instantiate操作无需重复创建新对象!智能算法,贪心算法匹配GameObject,对象池满可自动添加!
有没有遇到过必须循环Instantiate的情况?比如生成子弹?
如果有,是否关注过内存开销,是不是会被吓一跳?
在这里,就不得不用对象池了,使用对象池,内存开销少一半!
Redis可视化管理工具
可SSH连接,安全高效!可常规连接,IP+端口连接支持常规Key-Value数据的增删改查
演示视频:
有的时候,游戏需要联网,并且数据会存进数据库,这里提供了一个基础的可视化面板,管理Redis数据库,支持SSH和基础连接,可对数据进行增删改查,非常的方便!
怎么样,对JEngine的功能满意不?
还不满意?没关系,快进QQ群,和作者讨论还需要什么功能吧!
QQ群号:921271552
怕大家忘了项目地址,再附上一个,项目地址里有中英文双语文档,且大部分功能的介绍,API,都一应俱全
如果觉得JEngine有用,欢迎给该项目Star哦~
目前JEngine的star已破百,我将会在近期进行一次直播,以介绍框架完整流程为主,并会介绍JEngine的各种骚操作,让大家更了解该框架,详情可进群关注!
在最后,和大家推荐一下我的另外一个作品。
XASSET 5.1的官网,XASSET 5.1是XASSET开源项目的商业版,提供了更强大资源分包和热更功能,目前我也在使用这个开发自己的独立游戏。
下面是它的首页,真的很棒!
XAsset新官网
感谢各位的阅读! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|