Overview: Script compilation (Advanced) 脚本编译(高级)
时间:2010-09-25 来源:KidReborn
Unity将脚本编译成.NET dll文件,dll文件将在运行时被实时编译执行。
这允许脚本以惊人的速度执行。这比传统的javascript快20倍,比C++慢一半左右。在保存的时候,Unity使用一些时间编译你的脚本。在编译的时候,你能看到Unity的主窗口右角有进度符号。
脚本编译有4个步骤:
1.所有在Standard Assets, Pro Standard Assets, Plugins中的脚本被首先编译
在这些文件夹之内的脚本不能直接访问这些文件夹以外的脚本。
不能直接引用类或它的变量,但是可以使用GameObject.SendMessage与他们通信。
2.所有在Standard Assets/Editor, Pro Standard Assets/Editor, Plugins/Editor中的脚本被首先编译
如果你想要使用UnityEditor命名空间,你必须放置你的脚本到这些文件夹。例如添加菜单或写入自定义wizards你必须放置你的脚本到哪些文件夹。
这些脚本可以访问所有前面组中的脚本。
3.然后所有在Editor中的脚本被编译
如果你想要使用UnityEditor命名空间,你必须放置你的脚本到这些文件夹。例如添加菜单或写入自定义wizards你必须放置你的脚本到哪些文件夹。(我保证这句在官方的手册中也是和上文重复的!)
这些脚本可以访问所有前面组中的脚本,但是不能访问后面组中的脚本。
当编写编辑器代码来编辑那些在后面组中的脚本时,有2中解决方法:1.放置其他脚本到"Plugins"文件夹。2.利用JavaScript动态类型。在JavaScript你不需要知道类的类型再使用它,当使用GetComponent时,你可以使用一个字符串来代替类型。你也能使用SendMessage,凭借一个字符串。
4.所有其他的脚本被最后编译
所有没在上述文件夹的脚本被最后编译。
所有这步里编译的脚本有权使用第一组的所有脚本("Standard Assets", "Pro Standard Assets" or "Plugins")。这允许你使用不同的脚本语言相互操作。例如,如果你想要创建一个Javascript,它将使用一个C#脚本。放置C#脚本到"Standard Assets"文件夹,Javascript放在在此文件夹之外,Javascript便可以直接引用C#脚本。
放在第一组的脚本,将需要更长的编译时间,因为你编译第三组需要再次编译它们。因此如果你想要减少编译时间,把那些不常改动的放在第一组,经常改变的放在第四组。
针对某些版本的特殊情况
从2.6版本开始,增加了C#预处理定义。针对不同的版本,使用特殊的功能。
// Specific version define including the minor revision
#if UNITY_2_6_0
// Use Unity 2.6.0 specific feature 仅适用2.6.0版的特殊功能
#endif
// Specific version define not including the minor revision
#if UNITY_2_6
// Use Unity 2.6.x specific feature 适用2.6.x版本的特殊功能
#endif
这些代码可以约束使用针对性版本所包含的特殊功能。注意,这个预处理功能仅是从2.6版开始的,以后会怎么样,air knows.
by:Cartoonboy