【转载】全面解析Unity3D自动生成的脚本工程文件
我们在Unity3D开发的时候,经常会看到它会产生不少固定命名工程文件,诸如:
Assembly-CSharp-vs.csproj
Assembly-CSharp-firstpass-vs.csproj
Assembly-CSharp-Editor-vs.csproj
Assembly-CSharp-Editor-firstpass-vs.csproj
看得不少人云里雾里的。那么,这些工程是如何产生的呢?各自的作用是什么?下面就来逐一解析。
一. 首先从脚本语言类型来看,Unity3D支持3种脚本语言,都会被编译成CLI的DLL
如果应用中含有C#脚本,那么Unity3D会产生以Assembly-CSharp为前缀的工程,名字中包含"vs的"是产生给Visual Studio使用的。
应用中包含的脚本语言 | 工程前缀 | 工程后缀 |
C# | Assembly-CSharp | csproj |
JavaScript | Assembly-UnityScript | unityproj |
Boo | Assembly-Boo | booproj |
(不过现在Unity好像只支持C#脚本语言了,所以应该只用关心第一项就可以了)
如果工程中这3中脚本都存在,那么Unity3D将会生成3种前缀类型的工程。
二. 对于每一种脚本语言,根据脚本放置的位置(其实也部分根据了脚本的作用,比如编辑器扩展脚本,就必须放在Editor文件夹下),Unity3D会生成4种后缀的工程。其中的firstPass就表示先编译,Editor表示放在Editor文件夹下的脚本。
下面以C#脚本为例。如果工程中有C#脚本,我们可以得到4个工程文件:
Assembly-CSharp-vs.csproj
Assembly-CSharp-firstpass-vs.csproj
Assembly-CSharp-Editor-vs.csproj
Assembly-CSharp-Editor-firstpass-vs.csproj
(1) 所有在Standard Assets,Pro Standard Assets(2018后面的版本好像没有标准资源了)或者 Plugins文件夹中的脚本会产生一个Assembly-CSharp-firstpass-vs.csproj工程。也就是说,如果你的项目Asset中存在Plugins文件夹(名字必须对的上,没有可以自己创建),并且文件夹内有C#脚本,那么项目会自动生成一个Assembly-CSharp-firstpass-vs.csproj
比如现在我的Plugins下面只有一个脚本,打开vs后项目还是会自动生成firstpass
(2) 所有在Assets/Editor中的脚本产生一个Assembly-CSharp-Editor-vs.csproj工程。现在我又在Asset中创建了Editor文件夹,在其中创建了一个脚本EditorTest.cs,打开后发现项目中又多了个工程文件。
(3) 所有在Standard Assets/Editor, Pro Standard Assets/Editor 或这Plugins/Editor文件夹中的脚本产生Assembly-CSharp-Editor-firstpass-vs.csproj工程。同理,Plugins文件夹中如果也有一个Editor,创建脚本后就会出现该工程。
(4) 所有在Assets/Editor外面的, 并且不在(1),(2)中的脚本文件(一般这些脚本就是我们自己写的非编辑器扩展的脚本)会产生Assembly-CSharp-vs.csproj工程。这个好说,如果一个空项目创建,然后在其他的地方去创建一些脚本,比如自己创建的Scripts文件等,就会只有这个工程。
三. 对于这些自动创建的工程文件是有执行顺序的,标有firstpass中的脚本执行顺序永远高于没有firstpass的
我做了个测试,在空场景中放了个空物体去挂载分别在Plugins和Plugins以外任意文件夹创建的两个脚本去打印日志看执行顺序
最终的执行顺序:
所以同理,Editor环境下的两个工程执行顺序也同样是firstpass优先
转载自:https://blog.csdn.net/jjiss318/article/details/7632041
自己稍微加了点内容