Unity中的特殊文件夹:
Assets:主要的资源文件夹,使用AssetDatabase类来访问。
Editor:
- 在Editor 文件夹下的脚本,只在editor下执行,不是runtime,Assets文件夹下可以有多个Editor文件夹,Editor文件夹的具体位置,影响程序集编译的顺序。
- Unity 不允许将派生自 MonoBehaviour 的组件分配给游戏对象
- EditorGUIUtility.Load 函数可从 Editor 文件夹中的 Resources 文件夹加载资源。这些资源只能通过 Editor 脚本加载,并会从构建中剥离。
EditorDefaultResource:
- 这是存放的GUI相关的一些资源,比如GUI.Button 里面的Image.
- Editor 脚本可以使用通过 EditorGUIUtility.Load 函数按需加载的资源文件。此函数在名为 Editor Default Resources 的文件夹中查找资源文件。
- 只能有一个 Editor Default Resources 文件夹,且必须将其放在项目的根目录中,直接位于 Assets 文件夹中。将所需的资源文件放在此 Editor Default Resources 文件夹内或其中的子文件夹内。如果资源文件位于子文件夹中,请始终在传递给 EditorGUIUtility.Load 函数的路径中包含子文件夹路径。
StandardAssets:
在导入标准资源包时,会在Assets文件夹下创建一个该文件夹,该文件夹只能有一个
Resource:
可以有多个,跟随包体打包出来,通过Resource.Load加载,如果多个文件夹下,有相同名字的文件,默认加载最外层文件夹下的文件
StreamingAssets:
只允许有一个,只读的,不可更改
Plugin:
外部库文件,可以有多个
Gizmos:
下面的图标可以显示在scene中,通过Gizmos.DrawIcon 函数在场景中放置一个图标,作为特殊对象或位置的标记
只能有一个 Gizmos 文件夹,且必须将其放在项目的根目录,直接位于 Assets 文件夹中。将所需的资源文件放在此 Gizmos 文件夹内或其中的子文件夹内。如果资源文件位于子文件夹中,请始终在传递给 Gizmos.DrawIcon 函数的路径中包含子文件夹路径。
Android Asset Packs:
Unity把以
.androidpack结尾的文件夹编译成一个
Android asset packs. For more information, see Create a custom asset pack.
AndroidLib:
Unity 把以
.androidlib
结尾的文件夹编译成一个Android Library Project. For more information, see Import and Android Library Project.
Untiy 自带的程序集分类:
Predefined assemblies
Unity 根据脚本的位置编译成四个不同阶段,每一个阶段对应一个程序集,如果这个阶段没有脚本,就不会生成对应的程序集. 这四个程序集叫 预定义程序集---Predefined assemblies
Precompiled assemblies
预先编译好的程序集,也就是通常放在plugin 下面的
Assembly Definition asset
自定义程序集.asmdef 文件
它们三者的关系是:Predefine 默认引用 其它两个,自定义默认引用Precompiled
Precompiled->.asmdef->Predefine
阶段 | 程序集名称 | 脚本文件 |
---|---|---|
1 | Assembly-CSharp-firstpass | 名为 Standard Assets、Pro Standard Assets 和 Plugins 的文件夹中脚本。不在Editor下。 |
2 | Assembly-CSharp-Editor-firstpass | 名为 Editor 的文件夹(位于名为 Standard Assets、Pro Standard Assets 和 Plugins 的顶级文件夹中的任意位置)中的 Editor 脚本。 |
3 | Assembly-CSharp | 不在名为 Editor 的文件夹中的所有其他脚本。 |
4 | Assembly-CSharp-Editor | 在名为 Editor 的文件夹中的所有其他脚本。 |
Unity 自定义程序集
Unity 中的版本定义:version numbers、
目前unity的版本组成分为三部分: MAJOR.MINOR.REVISION
比如
2017.4.25f1
,2018.4.29f1
, and2019.4.7f1
.
- MAJOR 表示release 的年份 2017 or 2021.
- MINOR 表示版本, such as 1, 2, 3, or 4.
- REVISION 由三部分组成, 格式为: RRzNN:
- RR (修订号)是一位数或者两位数
- z 表示release的版本类型:
- a = alpha release
- b = beta release
- f = a normal public release
- c = China release version (equivalent to f)
- p = patch release
- x = experimental release
- NN 是一位数或者两位数的增量数
按照发版的时间递增顺序排序为:
a < b < f = c < p < x
- 通过 UnityEditor.Compilation 空间下的CompilationPipeline 类,检索 Unity project下的assemble 信息,比如下面代码:
using UnityEditor;
using UnityEditor.Compilation;
public static class AssemblyLister
{
[MenuItem("Tools/List Player Assemblies in Console")]
public static void PrintAssemblyNames()
{
UnityEngine.Debug.Log("== Player Assemblies ==");
Assembly[] playerAssemblies =
CompilationPipeline.GetAssemblies(AssembliesType.Player);
foreach (var assembly in playerAssemblies)
{
UnityEngine.Debug.Log(assembly.name);
}
}
}
程序集的属性:
- Auto Referenced:是否被predefined 程序集引用
- No Engine References:开启后,则不引用UnityEngine和UnityEditor程序集
- Root Namespace:如果是rider/vs自动为该文件夹下创建的脚本,添加该命名空间
- Override References:是否重新定义对precompiled 程序集的引用
- Define Constraints:定义的是程序集层面的定义,不是脚本层面的,满足这里定义的条件,该程序集就会被编译,否则不被编译。
- Use GUIDs:勾选这个,表示对程序集的引用是通过guid,否则是通过名字,勾选之后,如果源程序集更改了名字,也不用重新引用(重新拖拽)
Version Defines
- 满足什么版本条件,才会编译该程序集