我们写好的脚本,是经过编译之后才被使用,而Unity游戏引擎对脚本的编译顺序也是顺序的,了解这个顺序会对程序编码大有裨益。同时,写在我们脚本中的函数也是按一个固定的执行顺序执行的,这个固定的执行顺序就是Unity的生命周期,这是Unity学习者必须掌握的。
一. Unity中脚本编译顺序
编译的原则是在第一个引用前编译它,因此,将脚本放在Assets不同文件夹下不同位置会有不同的编译顺序。官方给出的编译顺序如下:
其中各个特殊文件夹是什么请参考本系列的第一篇文章。可以看到,编译一共分为四个阶段,两大块(标准资源配置块和自定义块),且每个块下的Editor文件夹中的资源编译靠后(可以理解Editor编写的为引擎工具,是对其所属块内资源的编辑使用,因此要靠后编译)。
二. Unity中的文件类型
在Unity中一般存在这么几种文件类型:资源文件(Imported Assset),代码文件,序列化文件(Native Asset),文本文档,非序列化文件,meta文件。
1. 编译产生的文件
每个编译阶段都会产生对应的项目文件。以C#为例,当项目中包含有C#脚本时,Unity引擎会产出以Assembly-CSharp为前缀,csproj为后缀的文件,名称中包含“vs”表示是给Visual Studio用的,不含则是给Mono Develop用的。
可能部分初学者没看过Assembly-CSharp-firstpass.csproj文件,那是因为你的项目里没有Standard Assets, Pro Standard Assets和Plugins三个文件夹中的任何一个,自然也不会编译产生这个项目文件。
在产生这些项目文件的编译过程中,同时也会在工程根目录/Library/ScriptAssemblies下生成dll,分别为:
Assembly-CSharp-Editor.dll:包含所有Editor下的脚本;
Assembly-CSharp-firstpass.dll:包含Standard Assets, Pro Standard Assets, Plugins文件夹下的脚本(不含Editor文件夹)
Assembly-CSharp.dll:包含除了以上两种所有位于Assets目录中的脚本;
不同语言的脚本,编译出的工程文件的前后缀也不同,也会生成不同的dll文件&#