P/Invoke: 最通用的方案, .Net圈子里用得很多. 缺点是C++这边必须编译成DLL, 导出很多函数. 优点是有自动生成的方案, 最常见的是SWIG....热更新
虽然.net也支持直接从代码转换成可以运行的东西, 但是这里还是参考Unity把脚本都编译成DLL
热更新的基本原理: 检测到脚本的DLL发生改变就重新载入
mono是以domain为单位load.../unload的, 所以要为脚本运行创建一个单独的domain
脚本的domain卸载前, dll是不可写的, 这是由于mono做了file mapping....解决办法有两个: 一是从内存加载, 二是先卸载再编译
加载后需要还原卸载前的对象状态, 这可以通过序列化来实现
C#的编译时间基本上可以忽略, 游戏运行时这边脚本一改, 卡个几帧就可以继续用新的脚本继续跑了...多语言支持
用Mono可以支持很多语言, Unity支持了三种: C#, Boo(Python), UnityScript(JavaScript)
Boo是Mono SDK里就带的语言扩展
UnityScript