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

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

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

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

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

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

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

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

我们的模式如下

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

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

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

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

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

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

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

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

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

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

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

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

这样

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

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

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

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

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

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

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

  1. Unity3D热更新全书-PageZero

    由于深刻的认识到自己是个思维跳跃的人,深入浅出是个我还要努力很久的目标,为了让大家不至于在我乱七八糟的文字中迷失,特整理目录一份 无分类 <Unity3D热更新全书-何谓热更新,为何热更新,如何 ...

  2. Unity3D热更新全书FAQ

    只要有程序员朋友们问过两次的问题 就会收录在此FAQ中 1.C#Light对比LUA有什么好处 C#Light是静态类型脚本语言,语法同C#,Lua是动态类型脚本语言,这两种都有人喜欢. 我更喜欢静态 ...

  3. Unity3D热更新全书-重头再来

    之前写了Unity3D热更新全书系列Blog 提出了下载.加载.脚本三个方面的开源类库 下载方面有EasyDown加载方面有GameObjParser脚本方面有C#Light另外有一个没有独立成库,但 ...

  4. Unity3D热更新全书-何谓热更新,为何热更新,如何热更新

    首先来赞叹一下中文,何谓为何如何,写完才发现这三个词是如此的有规律. 为何赞叹中文?因为这是一篇针对新手程序员的文字,是一节语文课. 然后来做一下说文解字,也就是 何谓热更新 热更新,每个程序员一听就 ...

  5. Unity3D热更新全书-脚本(二) 两级分化

    上篇明确了我们探讨的脚本是什么:是写在文本文件里面的代码,可以作为资源加载,取得字符串再执行. 可是为什么世界上会有那么多的脚本?而其使用方法完全看起来不一样呢?这是因为每种脚本都有自己的定位,在不同 ...

  6. Unity3D热更新全书-下载 唯一的一篇

    下载在这个时代实在是太平常了,每个人都深刻的理解着下载到底是什么. 这一篇文字只是把下载的代码分享并介绍,而已. 首先,下载系统担负着几个使命. 第一.是保持客户端版本库的最新. 第二.是下载要能够比 ...

  7. Unity3d热更新全书-加载(一)从AssetBundle说起

    Unity3D动态下载资源,有没有解?有,AssetBundle就是通用解,任何一本书都会花大幅篇章来介绍AssetBundle. 我们也来说说AssetBundle 我们试全面的分析一下Unity3 ...

  8. Unity3D热更新全书-脚本(一) 初识脚本

    开篇之前还是要先说明,这是一份给经验并不丰富的程序员阅读的文字. 有需求.有疑惑,往下看. 第一个问题什么是脚本?程序和脚本如何区分?我们给Unity编写的组件是程序还是脚本? 这些问题本文无意去解答 ...

  9. Unity3D热更新全书-脚本(五) NGUI

    让我们实际的研究一下如何将NGUI和C#LightEvil结合起来. 这里使用NGUI2.7,因为他是一个开源的版本,NGUI最新的版本未经作者的许可,是不可以带入我们的开源项目使用的. 这个例子完成 ...

随机推荐

  1. DataGridView in TabControl and CellValidating lead to problems

    I created a little form with a TabControl on it and a combobox. On the  first page i added a DataGri ...

  2. EasyUI DataGrid getChecked/getSelections 获取不到数据

    今天使用getChecked获取选择的行,结果总是获取一行数据,于是换用getSelections,结果还是一样,想起之前做的项目,把idField换了下,之后getChecked/getSelect ...

  3. 【Mail】邮件的基础知识和原理

    电子邮件概念 电子邮件是-种用电子手段提供信息交换的通信方式,是互联网应用最广的服务.通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费).非常快速的方式(几秒钟之内可以 ...

  4. 如何让你的UWP应用程序无缝调用几何作图

    有时候需要编辑一些几何图形,如三角形,圆锥曲线等,在UWP应用中加入这些几何作图功能是件费时间又很难做好的事.其实Windows 10 应用商店中已有一些专业的几何作图工具了,那么能借来一用吗?答案是 ...

  5. 自己关于cocoapods的使用的一些理解和总结

    老大让我自己学习用一下cocoapods的使用,于是自己上网查了很多的信息,在安装使用过程中,总是出现了很多问题,然后发现有些人的教程好像并不完全好用,我的感觉是应该每个人遇到的问题都不尽相同,所以 ...

  6. Web调试利器OpenWindow

    有些时候调试web页面,在循环里面我们不方便设置断点进行调试,或者调试起来比较麻烦,我们就可以用openWindow的方法打印出想要查看的信息,既方便又省时. 代码如下: OpenWindow = w ...

  7. uglifyjs2压缩混淆js文件

    uglifyjs可以用来压缩混淆js文件,发布release版本应用利器.在StackOverflow浏览了一下,相比Google Closure和YUI compressor,uglifyjs被推荐 ...

  8. configure: error: *** libpopt not found 解决方法

    ubuntu (deb) $ apt-cache search popt|headlibpopt-dev - lib for parsing cmdline parameters - developm ...

  9. mybatis多数据源配置

    项目目录如下: 按照顺序配置吧 首先是配置config jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/a ...

  10. apache安装mod_deflate配置支持gzip

    apache 配置支持gzip apache使用gzip压缩能够大幅提高网站访问速度并节省网络流量,在网页响应头信息中可以判断是否支持压缩. HTTP/1.1 200 OK Date: Wed, 14 ...