Unity3D之ToLua热更新思想

  • A+
所属分类:Unity3d 原创文章

Unity提供了一个很好的Assetbundle给我们,可以存放图片文本等资源。当然的,也可以存放dll文件(后缀改成.bytes),这样就可以通过加载AssetBundle里面的dll在通过反射技术来实现代码的热更新。但是反射慢,同时也不支持到ios平台,所有这里使用的ToLua,不是运行时反射机制,而是一种事先准备好的机制,就是说白了就是把Unity的类变成lua的(猜的),然后就能在lua中使用了

AssetBundle的打包参考

Dll更新的使用参考

这里不会说ToLua的使用方法(可能以后会写),这里其他说多的是思想,还有平常的加载和运行

 


一、首先看看,我准备了一个这样的场景结构

Unity3D之ToLua热更新思想

通过热更新,来控制按钮的图片,通过热更新的代码来修改按钮的文字

其实代码很简单,主要要搞懂的是怎么样热更新和加载更改还有运行代码。首先,代码通过加载一个文本文件,获取文本的内容(资源的版本号,要更新资源时人工修改),通过这个版本号,去用LoadFromCacheOrDownload()去下载目标AssetBundle,加载过的版本号,会加载本地的,而不是下载,因为有缓存。

这个时候,想一想就通了,程序这样设定后,如果想要改变资源,只要把远程服务端的AssetBundle换掉,在修改一下文本文件里面的版本号,这样就会自动更新资源了,而不需要更换游戏包

 


二、看一下假装是远程目录的结构

Unity3D之ToLua热更新思想

 


三、再来说一下代码,这里面通过两个WWW获取到资源后,就是AssetBundle。首先获取一个Sprite图片精灵,修改按钮的图片背景。再获取一个文本文件,其实是Lua代码,注意的是Unity不认识.lua后缀哈,所有使用.txt后缀,再通过ToLua的LuaState去运行这个文本文件里面的lua代码,看看lua代码

也是很简单的代码,通过GameObject的静态方法Find()找到Text,可以上去看看场景结构。再通过实例方法获取到组件Text,修改Text的属性text(就是按钮上的文字)。注意的是这里用到了UnityEngine.UI.Text,ToLua默认是没有包装到lua环境中的。所以需要在配置中加上去,修改文件

Unity3D之ToLua热更新思想 Unity3D之ToLua热更新思想

ToLua的还是不多说了

 


四、最后看看效果,先运行一遍,再将资源换点,版本号换掉

Unity3D之ToLua热更新思想 Unity3D之ToLua热更新思想 Unity3D之ToLua热更新思想

中间是原样

好啦,热更新逻辑(按钮的文字修改),热更新资源(图片),其实也没那么神奇哈

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: