去年年初开始接触Unity3D,项目一直使用xlua来实现热更新,那时候也没有想着要去记录.虽然知识点依旧保存在脑海,但终归会有忘记的那一天。加上技术更迭,以及为了方便,还是基于C#实现的ILRuntime更加叫人喜欢吧.
首先,我们得去GitHub下载官方案例
ILRuntimeU3D官方Demo 传送门
这一篇记录我并不打算写过多的内容,就如记录的标题,仅仅是为了跑通这一个demo.如果你对ILRuntime感兴趣,而我很荣幸被你浏览到,那么我想邀请你来和我一起跑通ILRuntime.
首先,我觉得有必要查看一下Demo下面都有什么,对于一个Unity3D项目来说,我们大部分时候都只需要关心Assets下面有什么:
|-- ILRuntimeU3D/ILRuntimeDemo/Assets/
|---- ILRuntime/ --这个目录包含了ILRuntime框架,以及Samples~这个文件夹,大概是因为该文件夹后面有~,所以在unity里面会被隐藏.等下我们展开来讲
|---- Samples/ --这个文件夹和Samples~的内容一样.
|---- StreamingAssets/ --这个目录下面放着编译完成的热更文件,可以使用UnityWebRequest来加载,demo里面为了省事使用了过时的写法www.
根据上面说明我们会产生一些疑问,为什么会有两个Samples文件夹呢?为了解决这个疑惑,我们先用unity打开这个Demo来一窥究竟!程序员就是来解决问题的.加油!
当我们打开项目之后,会有一些错误信息:
error CS0227: Unsafe code may only appear if compiling with /unsafe. Enable "Allow 'unsafe' code" in Player Settings to fix this error.
那么我们只需要打开Player Settings -> Other Settings -> Allow 'unsafe' code 的勾选给选中
然后,我们找到并双击ILRuntimeU3D/ILRuntimeDemo/Assets/Samples/ILRuntime/1.6.4/Demo/_Scenes/Examples/01_HelloWorld
我们在点击Play,这时候会在控制台输出: !!! InstanceClass.StaticFunTest()
这样就表示我们成功跑通了这个项目.
那么下面我们通过文件夹打开到ILRuntimeU3D/ILRuntimeDemo/Assets/ILRuntime/Samples~/Basic Demo/HotFix_Project~会发现这个目录下面有一个c#项目,那么我们就直接打开这个项目看看吧.我这边打开之后会有一个Assembly-CSharp的引用缺失,经过我的一番思考之后.这个应该就是Unity那边生成的dll文件,我们只要重新引用一下就不会报错了.
好了,我们现在再回到unity里面,打开HelloWorld.cs这个文件,这里面注释写的很清楚,真是良好的编程典范呀.这边我们主要关注一下:
void OnHotFixLoaded()
{
appdomain.Invoke("HotFix_Project.InstanceClass", "StaticFunTest", null, null);
}
我们会发现HotFix_Project不就是我们在Samples~下面找到的c#项目吗?那么我们再回到那个c#项目,我们好像能找到InstanceClass这个类呢!!!而且这个类里面有个StaticFunTest方法,这个方法实现的内容就是输出!!! InstanceClass.StaticFunTest().
到这边我们发现ILRuntimeU3D/ILRuntimeDemo/Assets/ILRuntime/Samples~/Basic Demo/目录下面的HotFix_Project~就是热更项目了.别的就是本地工程了,这些本地工程似乎没啥用,因为在Samples已经有一份了.
到这边就可以结尾了,但是会有一丝丝无奈,因为我们要打开两个Visual Studio以及一个Unity来完成开发,切来切去也太影响效率来吧!!!那么下一遍记录,我想应该是将本地和热更整合到一起,只打开一个vs就能完成开发.