• 【转】全面解析Unity3D自动生成的脚本工程文件


    http://blog.csdn.net/jjiss318/article/details/7632041

    我们在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使用的,不包含"vs"的是产生给MonoDevelop用的。

    应用中包含的脚本语言

    工程前缀

    工程后缀

    C#

    Assembly-CSharp

    csproj

    JavaScript

    Assembly-UnityScript

    unityproj

    Boo

    Assembly-Boo

    booproj


    如果工程中这3中脚本都存在,那么Unity3D将会生成3种前缀类型的工程。

    二. 对于每一种脚本语言,根据脚本放置的位置(其实也部分根据了脚本的作用,比如编辑器扩展脚本,就必须放在Editor文件夹下),Unity3D会生成4种后缀的工程。其中的firstPass就表示先编译,Editor表示放在Editor文件夹下的脚本。

    下面以C#脚本为例。如果工程中只有C#脚本,不考虑为VS和MonoDevelop各自生成工程的差异性,我们可以得到4个工程文件:

    Assembly-CSharp-firstpass-vs.csproj

    Assembly-CSharp-Editor-firstpass-vs.csproj

    Assembly-CSharp-vs.csproj 

    Assembly-CSharp-Editor-vs.csproj

    (1) 所有在Standard Assets,Pro Standard Assets或者 Plugins文件夹中的脚本会产生一个Assembly-CSharp-firstpass-vs.csproj文件,并且先编译;

    (2) 所有在Standard Assets/Editor, Pro Standard Assets/Editor 或这Plugins/Editor文件夹中的脚本产生Assembly-CSharp-Editor-firstpass-vs.csproj工程,接着编译;

    (3) 所有在Assets/Editor外面的, 并且不在(1),(2)中的脚本文件(一般这些脚本就是我们自己写的非编辑器扩展的脚本)会产生Assembly-CSharp-vs.csproj工程,被编译;

    (4) 所以在Assets/Editor中的脚本产生一个Assembly-CSharp-Editor-vs.csproj工程,被编译。

    之所有这样建立工程并按此顺序编译,也是因为DLL间存在的依赖关系所决定的。

    好了,至此也说得比较清楚了,也不会因为见到那么多的工程文件而疑惑了。

    最后问诸位一个小问题:

    一个Unity3D的工程,最多可以产生多少个工程文件?疑问

    4*3*2 = 24个大笑

    Why is the unity folder so cluttered with IDE files

    Whenever I create a new Unity project, add a C# script file and synchronize it with an external source code editor, there appears a number of .sln and .csproj files generated in the main project folder.

    I wouldn't bother it wasn't for the fact that there's 6 x .csproj and 2 x .sln with names like:

    • Assembly-CSharp.csproj

    • Assembly-CSharp-Editor.csproj

    • Assembly-CSharp-Editor-vs.csproj

    • Assembly-CSharp-firstpass.csproj

    • Assembly-CSharp-firstpass-vs.csproj

    • Assembly-CSharp-vs.csproj

    After a solution is opened automatically by Unity, it has 3 projects with pretty similar structure - every project has an Assets folder, but seems to include a different permutation of assets.

    Whether I use VS or MonoDevelop doesn't matter. The question is:

    Is this a standard project structure or did I get something wrong? Is it possible to reduce the clutter, which makes me unsure which project I should be working on, or are all these files necessary?

    The reason I'm asking is there seems to be a lot of redundancy and it's not very clear what each of these projects is responsible for.

     

    1条回复

    avatar image
    3
    最佳解答

    个解答,截止stevethorne 

    This is the standard solution structure for a Unity project. Each one can have a number of projects in the solution. Mine usually have 6 projects in the solution. You didn't do anything wrong, and there's nothing you can do to reduce this. These are needed for both unity and the IDE that you're using.

    If you're wondering why they do this, it's due to the fact that they need to make sure that things get compiled in the correct order. You can take a look at this page for more details on the compile order. That might also help you understand what's put in each project.

    For those not wanting to go searching for what's in each project, here's a basic synopsis:

    Assembly-CSharp-firstpass.csproj

    • contains the files in the StandardAssets folder.

    Assembly-CSharp.csproj

    • contains the files outside of the Editor folder.

    Assembly-CSharp-Editor.csproj

    • contains the files inside of the Editor folder.

    The projects that replace "CSharp" with "UnityScript" contain the Unity Script files in the same manner.

    As for the ones ending in -vs, I'd imagine those are for the visual studio projects.

  • 相关阅读:
    Mybatis中的设计模式
    Mybatis的#{}和${}的区别是什么?
    ES的写入速度优化
    康师傅JVM:垃圾回收相关概念(十六)
    i++为什么不是原子操作?
    Zookeeper的watch机制
    LeetCode 1.两数之和
    ESP 8266 引脚图
    Arduino 将 String 转化为 int
    微擎修改 icon.jpg 后项目主页未变
  • 原文地址:https://www.cnblogs.com/mimime/p/6235065.html
Copyright © 2020-2023  润新知