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


    原地址:http://www.cnblogs.com/crazylights/p/3897691.html

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

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

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

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

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

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

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

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

    我们的模式如下

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

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

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

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

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

    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,并用和主程序一样的方式初始化脚本引擎,就能得到和主程序一模一样的脚本编译环境进行处理。

  • 相关阅读:
    jmeter之三种参数化
    linux(centos6.5)常用命令
    win10+jdk+mysql+tomcat+jpress环境搭建与部署
    [剑指Offer] 29.最小的K个数
    [C/C++] C++中new的语法规则
    [C/C++] 深拷贝和浅拷贝
    [C/C++] #ifdef和#endif
    [C/C++] C++声明和定义的区别
    [C/C++] extern关键字详解以及与static、const区别
    [C/C++] static在C和C++中的用法和区别
  • 原文地址:https://www.cnblogs.com/123ing/p/3901598.html
Copyright © 2020-2023  润新知