Unity3D热更新全书-脚本(四) 用C#LightEvil搭建实际开发使用的脚本框架

C#LightEvil之前提供了很多和Unity结合的例子,都是采用把脚本文件放置在StreamingAssets中的方法。

这样可以利用Unity的特性,放在这个目录中的CS文件会被编译器编译,我们就利用C#编译器来对我们的脚本进行验证。

同时StreamingAssets中的文件又是直接随项目发布的,所以可以直接以文件方式取出这些脚本文件编译执行。

这是一个很巧妙的方式,但是用在实际项目中会有一些问题:

一、可能会让程序员产生混淆,哪里是脚本,哪里是程序,傻傻分不清楚

二、主程序里会有一份用不到的代码

三、直接编译脚本文件略慢,在手机上比较明显,尤其脚本文件多的时候。

 

面对这三个问题,我们一次就可以全解决

我们的模式如下

1.首先建立一个独立的C#项目,里面只放脚本代码。

2.然后当编译这个项目的时候,会预编译脚本代码,并保存成一个二进制文件。

3.然后在主程序里直接加载这个二进制文件初始化脚本,继续后面的事情。

GitHub(https://github.com/lightszero/CSLightStudio)上新的例子CSLightStudio\unity\FrameworkMaster 就是这个框架

由于比较抽象,让我们来介绍一下

imageBin目录是生成的最后效果,image有两个主程序,两个脚本二进制文件。

unity目录里面是主程序,两个场景分别导出了mode1 和 mode2

Mode1Script 和 Mode2Script是两个脚本文件项目,他们是两个ConsoleExe,从VS里面编译执行就会把自己项目里的所有文件作为C#Light编译

image

image

并且输出到../bin/也就bin下面的那个 .csledll.bytes 文件

这样就完成了脚本文件和Unity主项目的分开编译,如果脚本有错误,这个控制台里会给出信息。

脚本编译:通过VS 建立脚本项目并编译验证脚本且生成二进制文件。

程序编译:通过Unity编译输出。

这样

1.脚本和程序就完全隔离到了不同的项目里,脚本程序员写脚本,主程序的程序员写主程序,各司其职。

2.另外脚本程序也不会出现在主程序中

3.而且保存的二进制文件是词法处理后的结果,在手机上闪电加载。

 

也许聪明的你现在已经发现了一个问题,主程序里面要对脚本调用的类型进行注册,还有很多是自己编写的类,脚本如果没有这些信息是没法进行编译验证的。

对,这个就要利用Unity的另一个特性,Unity的项目代码用VS或者monodevelop编译的话,会生成一个dll的,虽然unity不用他image

我们只要让脚本项目引用这个DLL,并用和主程序一样的方式初始化脚本引擎,就能得到和主程序一模一样的脚本编译环境进行处理。

你可能感兴趣的:(unity3d)