前言:如果你在考虑unity的热更新问题,那么有几种方案可以供你选择
1. 选择lua :可以保证你的ios+android平台更新,缺点:lua调试很蛋疼,不是面向对象的语言(虽然你可以用table来作为假定的面向对象,但是这里我说的是标准的面向对象)
2. 选择反射:可以做到ios+android平台更新,缺点:不能挂载mono脚本到你的prefab上,所有的东西你都需要去通过find查找这个prefab下的节点
3. 选择libmono:可以做到android平台热更新,缺点:ios做不到
4. 选择其他的类lua的东西,这里不做介绍
这里给你一个建议:如果你需要快速开发那么请选择3,因为这种方式开发是最友好的,并不会对开发者造成任何的问题,和以前开发一样,如果你想双平台更新那么请选择1,其他方案我都不推荐了
我们游戏就属于需要快速开发,所以我们选择了3,之前了解了一些文章,在windows下尝试过编译mono源码,但是一直有些环境安装不了,加之当时的事情太多所以就交给其他同学在处理这个东西,后来他在mac下成功编译了,我这里也是借他的编译过程简单的记录下。网上可能有很多的介绍,但是我这里以最简单的方式来完成这个过程。
第一步:安装装载器
首先你需要安装一个叫brew的东西,这个东西简单来说就是为你安装其他软件的一个装载器,有了这个东西本文的环境基本上不用担心了(有些mac版本已经有了这个就跳过这个步骤)。具体只需要在终端输入
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后就静静的等待他的安装,国外的东西都挺慢的,所以不要放弃。
第二步:搭建环境,输入
brew install autoconf automake libtool pkg-config
这里是不是突然觉得mac下好舒心,装东西就这么方便,只需要一个命令就可以去喝茶了。这里就安装了4个软件了。
第三步:下载mono对应的版本
下载你的mono对应的版本,并存放到本地非中文目录(一定要非中文的目录,否则编译失败)下载地址 https://github.com/Unity-Technologies/mono
第四步:修改加载路径,直接参考我的吧(关键处)
本地存放在mono/metadata/image.c这个文件
下载地址:一共四处修改 都带有 EditFlag
第五步:执行编译
把/mono-unity-x/external/buildscripts/build_runtime_android.sh复制到/mono-unity-x根目录下 并 cd到这个目录,然后执行
bash /mono-unity-x/external/buildscripts/build_runtime_android.sh
等待几分钟编译结束后在build下可以找到们编译后的so文件
第六步:替换so文件
拷贝编译后的so文件到unity安装目录下。例如如下路径
C:/Program Files (x86)/Unity/Editor/Data/PlaybackEngines/androidplayer/release/libs/armeabi-v7a/libmono.so
第七步:测试更新
更新测试这里就不给出了。可以自己写个简单的测试例子然后放到android机器上验证以下就可以了,我这里是经过了验证的。
总结:重新编译libmono其实就是为了重新指定dll的读取路径,让我们每次更新的dll变成当前的dll即可