Unity工程中的特殊目录和脚本编译规则

在 Unity 工程中,有一些特殊的目录和脚本编译规则,这些规则决定了脚本的编译顺序、作用范围以及在编辑器和运行时的可用性。了解这些规则有助于开发者更好地组织代码和优化编译时间。以下是 Unity 工程中的一些特殊目录和脚本编译规则:

特殊目录

  1. Editor

    • 位置:可以在 Assets 目录下的任何位置创建 Editor 文件夹。
    • 作用:包含的脚本仅在 Unity 编辑器中编译和运行,不能在构建的游戏中运行。通常用于编辑器扩展、工具和自定义窗口。
    • 示例Assets/Editor/MyEditorScript.cs
  2. Plugins

    • 位置:可以在 Assets 目录下的任何位置创建 Plugins 文件夹。
    • 作用:包含的脚本会在早期编译阶段编译,通常用于第三方插件和库。这些脚本可以被其他脚本引用。
    • 示例Assets/Plugins/MyPluginScript.cs
  3. Standard AssetsPro Standard Assets

    • 位置:可以在 Assets 目录下的任何位置创建 Standard AssetsPro Standard Assets 文件夹。
    • 作用:包含的脚本会在中期编译阶段编译,通常用于标准资源包和共享代码。这些脚本可以被其他脚本引用。
    • 示例Assets/Standard Assets/MyStandardScript.cs
  4. Resources

    • 位置:可以在 Assets 目录下的任何位置创建 Resources 文件夹。
    • 作用:包含的资源可以在运行时通过 Resources.Load 方法动态加载。注意,Resources 文件夹中的所有资源都会被包含在构建中,因此应谨慎使用。
    • 示例Assets/Resources/MyResource.asset
  5. StreamingAssets

    • 位置:可以在 Assets 目录下的任何位置创建 StreamingAssets 文件夹。
    • 作用:包含的资源会原样打包到构建中,适用于需要在运行时直接访问的文件(如视频、音频等)。在运行时可以通过文件系统路径访问这些资源。
    • 示例Assets/StreamingAssets/MyVideo.mp4
  6. Gizmos

    • 位置:可以在 Assets 目录下的任何位置创建 Gizmos 文件夹。
    • 作用:包含的图像文件可以在编辑器中用于绘制自定义的 Gizmos(调试图形)。
    • 示例Assets/Gizmos/MyGizmoIcon.png
  7. Editor Default Resources

    • 位置:可以在 Assets 目录下的任何位置创建 Editor Default Resources 文件夹。
    • 作用:包含的资源可以在编辑器脚本中通过 EditorGUIUtility.Load 方法加载。仅在编辑器中使用。
    • 示例Assets/Editor Default Resources/MyEditorResource.asset
  8. WebGLTemplates

    • 位置:可以在 Assets 目录下的任何位置创建 WebGLTemplates 文件夹。
    • 作用:包含的文件用于自定义 WebGL 构建的模板。
    • 示例Assets/WebGLTemplates/MyTemplate/index.html

脚本编译规则

Unity 的脚本编译过程分为多个阶段,不同阶段的脚本会被编译到不同的程序集(Assembly)中。以下是编译阶段和规则:

  1. 第一阶段:Editor 编译阶段

    • 文件夹Editor
    • 描述:所有放在 Editor 文件夹中的脚本会在第一阶段编译。这些脚本只能在 Unity 编辑器中运行,不能在构建的游戏中运行。
    • 示例Assets/Editor/MyEditorScript.cs
  2. 第二阶段:第一批运行时编译阶段

    • 文件夹Plugins
    • 描述:所有放在 Plugins 文件夹中的脚本会在第二阶段编译。这些脚本会被编译到一个单独的程序集,可以被其他脚本引用。通常用于第三方插件和库。
    • 示例Assets/Plugins/MyPluginScript.cs
  3. 第三阶段:第二批运行时编译阶段

    • 文件夹Standard AssetsPro Standard Assets
    • 描述:所有放在 Standard AssetsPro Standard Assets 文件夹中的脚本会在第三阶段编译。这些脚本会被编译到一个单独的程序集,可以被其他脚本引用。通常用于标准资源包和共享代码。
    • 示例Assets/Standard Assets/MyStandardScript.cs
  4. 第四阶段:最终运行时编译阶段

    • 文件夹Assets(除上述特定文件夹外的其他文件夹)
    • 描述:所有放在 Assets 文件夹中的其他脚本(不在上述特定文件夹中的脚本)会在第四阶段编译。这些脚本会被编译到默认的程序集,通常用于项目的主要代码。
    • 示例Assets/Scripts/MyGameScript.cs

编译顺序和依赖关系

  • Editor 文件夹中的脚本最先编译,因为它们通常包含编辑器扩展和工具,这些工具可能会在其他脚本编译之前运行。
  • Plugins 文件夹中的脚本接下来编译,因为它们通常包含第三方插件和库,这些库可能会被项目中的其他脚本引用。
  • Standard AssetsPro Standard Assets 文件夹中的脚本在第三阶段编译,因为它们通常包含标准资源和共享代码,这些代码可能会被项目中的其他脚本引用。
  • 最后,Assets 文件夹中的其他脚本在第四阶段编译,因为它们通常包含项目的主要代码。

额外注意事项

  1. Assembly Definition Files(.asmdef)

    • 作用:通过使用 Assembly Definition 文件,可以更精细地控制脚本的编译过程和依赖关系。可以创建自定义程序集,减少不必要的重新编译。
    • 示例:在 Assets/Scripts 文件夹中创建一个 MyGameAssembly.asmdef 文件,将该文件夹中的脚本编译到一个单独的程序集。
  2. 预处理指令

    • 作用:使用预处理指令(如 #if UNITY_EDITOR)可以控制代码在不同平台和编译阶段的可见性。
    • 示例
      #if UNITY_EDITOR
      using UnityEditor;
      #endif
      
      public class MyScript : MonoBehaviour
      {
          void Start()
          {
              #if UNITY_EDITOR
              Debug.Log("This code runs only in the editor.");
              #endif
          }
      }
      
  3. 编译条件

    • 作用:可以在 Player Settings 中设置编译条件(如 Scripting Define Symbols),以控制代码的编译行为。
    • 示例:在 Player Settings 中添加 MY_CUSTOM_DEFINE,然后在代码中使用:
      #if MY_CUSTOM_DEFINE
      Debug.Log("This code runs only when MY_CUSTOM_DEFINE is set.");
      #endif
      
  4. 脚本执行顺序

    • 作用:可以在 Project Settings > Script Execution Order 中设置脚本的执行顺序,确保某些脚本在其他脚本之前或之后执行。
    • 示例:将 MyInitializationScript 设置为在默认时间之前执行,以确保它在其他脚本之前初始化。

通过了解和利用这些特殊目录和编译规则,开发者可以更好地组织代码,优化编译时间,并确保代码在不同平台和编译阶段的正确性。

编译顺序

在 Unity 中,脚本的编译过程是按照特定的阶段顺序进行的,这个顺序是由 Unity 内部机制决定的,通常情况下是不能随意打乱的。
为什么不能随意打乱编译顺序
依赖关系:编译顺序确保了依赖关系的正确性。例如,Plugins 文件夹中的脚本可能会被 Standard Assets 文件夹中的脚本引用,因此 Plugins 文件夹中的脚本需要先编译。

编译优化:Unity 的编译顺序设计是为了优化编译时间和性能。打乱顺序可能会导致不必要的重新编译,增加编译时间。

编辑器扩展:Editor 文件夹中的脚本需要最先编译,因为它们通常包含编辑器扩展和工具,这些工具可能会在其他脚本编译之前运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你一身傲骨怎能输

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值