Unity的特殊文件夹及脚本编译顺序

本文详细介绍了Unity中各种资源文件夹的功能及脚本的编译顺序,包括StandardAssets、Plugins、Resources等文件夹的用途,以及如何利用这些文件夹进行有效的资源管理和脚本编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

脚本编译顺序

  • 1:处于 Standard Assets, Pro Standard Assets 和 Plugins 文件夹中的运行时脚本(Standard Assets 文件夹需是Assets的一级子文件夹.)
  • 2:处于 Standard Assets, Pro Standard Assets 和 Plugins 文件夹下的以 Editor 命名的一级子文件夹中的脚本。
  • 3:顶级 Editor 文件夹中的脚本
  • 4:其他 Editor 文件夹中的脚本(例如其他文件夹下的以 Editor 命名的子文件夹)
    另外在 Assets 文件夹中以 WebPlayerTemplates 命名的顶级子文件(即Assets/WebPlayerTemplates)将不会编译。若是处于别的文件夹下的 WebPlayerTemplates (如Assets/Scripts/WebPlayerTemplates)将不会防止编译。

1.Editor

文件不会打进发布包,并且脚本也只能在编辑时使用。
可以放在Assets根目录下,也可以放在其它子目录里,数量不限。如果在特殊文件夹下,那Editor文件夹必须是特殊文件夹的直接子目录。
一般把一些工具类的脚本放在这里,或者是一些编辑时用的DLL。

2.Editor Default Resources(注意中间是有空格的)

文件不会打进发布包
必须放在Project视图的根目录下

可以把编辑器用到的一些资源放在这里,仅开发时使用。
EditorGUIUtility.Load去读取该文件夹下的资源

3.Gizmos

Gizmos文件夹存放用Gizmos.DrawIcon方法使用的贴图、图标资源。放在Gizmos文件夹中的贴图资源可以直接通过名称使用,可以被Editor作为gizmo画在屏幕上。
只能放在Assets根目录下,有且仅有一个

voidOnDrawGizmos(){  
    Gizmos.DrawIcon(transform.position,"0.png",true);  //仅在Unity编辑期可见
} 
//可以在Scene视图里给某个坐标绘制一个icon。它的好处是可以传一个Vecotor3 作为图片显示的位置。 参数2就是图片的名子,当然这个图片必须放在Gizmos文件夹下面。
//本功能在Unity4.x下会部分用到,但在Unity5.x中基本无用,可以在属性视图中很方便的给特定位置信息绘制Icon

4.Plugins

会打进发布包
只能放在Assets根目录下,有且仅有一个

可以把sdk依赖的库文件 放在这里,比如 .so .jar .a 文件。

  • Plugins/Android–存放Android插件,包括 .jar 或XML文件等。
  • Plugins/iOS–存放iOS插件,包括 .a 或 .m、.mm文件等。

5.Resources

存放需要动态读取的资源。
不管你用还是不用都会被打包进.apk或者.ipa (会压缩)
在打包前可以用AssetDatabase.MoveAsset方法把不必要的资源从文件夹中移出去;打完包后再把移出去的资源移回来。

可以放在Assets根目录下,也可以放在其它子目录里,数量不限。

Resource.Load :编辑时和运行时都可以通过Resource.Load来直接读取。
Resources.LoadAssetAtPath() :它可以读取Assets目录下的任意文件夹下的资源,它可以在编辑时或者编辑器运行时用,它但是它不能在真机上用,它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。

6.StreamingAssets

存放媒体文件,如视频等。
全都打包在.apk或者.ipa (不会压缩,只读)
只能放在Assets根目录下,有且仅有一个。
它在各个平台下的路径是不同的。
通过Application.streamingAssetsPath来访问

7.Hidden Assets

在导入阶段,Unity将完全忽略以下文件夹下的资源。

  • 以 Hidden 命名的文件夹。
  • 以 ‘.’ 开头的文件和文件夹
  • 以 ‘~’ 开头的文件和文件夹
  • 以 ‘cvs’ 命名的文件和文件
  • 以 ‘tmp’ 为扩展名的文件

8.WebPlayerTemplates

用来替换web build的默认网页。这个文件夹中的脚本都不会被编译。
这个文件夹必须作为Assets文件夹的直接子目录。

9.Standard Assets

只能放在Assets根目录下,有且仅有一个
在这个文件夹中的脚本最先被编译。
这个文件夹中的脚本会被导出到Assembly-CSharp-firstpass, Assembly-UnityScript-firstpass 或 Assembly-Boo-firstpass项目中,依语言而定。参考http://docs.unity3d.com/Documentation/Manual/ScriptCompileOrderFolders.html 。在这个文件夹中的脚本比其他脚本都要先编译。将脚本放在这个文件夹里,就可以用C#脚本来访问js脚本或其他语言的脚本。

10. Pro Standard Assets

只能放在Assets根目录下,有且仅有一个
跟Standard Assets相同,只不过里面的文件是给Pro版本的Unity使用的。

<think>嗯,用户的问题是关于Unity导出项目时,编辑器在导入资产或编译脚本时无法生成播放器的解决方案。首先,我需要回忆一下Unity常见的导出问题,尤其是编译和资源导入相关的。根据用户提供的引用内容,有几个可能的方面需要考虑。 首先,用户提到的引用[3]中提到了脚本编译顺序和位置。Unity脚本的存放位置有严格要求,特别是在Standard Assets、Plugins等文件夹中的脚本会优先编译。如果脚本放在这些文件夹之外,并且引用了Editor命名空间,可能会导致编译错误,进而影响生成播放器。所以,我需要建议用户检查脚本的存放位置是否正确,确保需要用到UnityEditor的脚本放在Editor文件夹内,因为生成播放器时这些脚本会被排除,否则可能引发错误。 接下来是引用[5],提到资源导入设置的问题。例如,图片类型需要正确设置为Sprite才能被UGUI使用。如果资源导入设置不正确,可能会导致资产无法正确导入,从而在构建时失败。用户可能需要检查是否有资源导入处理器(如TextureSetting)导致的问题,特别是在构建时这些处理器可能不被支持,需要条件编译或排除。 另外,引用[4]提到了脚本编译完成后的回调函数。如果用户使用了DidReloadScripts回调,在构建时可能会有问题,因为构建环境可能不允许某些Editor下的代码执行。需要检查是否有Editor脚本被错误地包含在运行时脚本中,或者回调函数在构建时未被正确处理。 然后,用户的问题可能涉及编译错误。首先应该检查控制台中的错误和警告,特别是红色错误会阻止生成播放器。如果存在任何编译错误,必须优先解决这些错误。例如,脚本中的语法错误、缺失的引用或命名空间错误。 还有可能是构建设置的问题,比如目标平台是否正确,是否缺少必要的场景添加到构建列表中。有时候,平台相关的设置不正确也会导致构建失败。 此外,关于脚本编译顺序,引用[3]指出不同文件夹中的脚本编译顺序不同,如果脚本之间存在依赖关系,可能需要调整脚本的位置,确保被依赖的脚本编译。例如,将公共代码放在Plugins或Standard Assets文件夹中,以确保它们优先编译。 另外,用户可能使用了不兼容的API或插件。特别是在构建时,某些Editor下的API(如UnityEditor命名空间)无法在运行时使用,如果在非Editor脚本中使用了这些API,会导致构建失败。需要检查所有脚本,确保运行时脚本没有引用UnityEditor。 还有可能涉及资源导入处理器的错误,如引用[5]中的TextureSetting类。在构建时,这些处理器可能不被支持,特别是如果它们位于Editor文件夹之外。需要将这些处理器移到Editor文件夹,并使用条件编译指令(如UNITY_EDITOR)来确保它们只在编辑器中生效。 最后,建议用户尝试清理项目,删除Library文件夹,重新导入资产,以解决可能的缓存问题。另外,更新Unity到最新版本或检查项目兼容性也可能有帮助。 总结可能的解决步骤:检查编译错误,确保脚本位置正确,处理Editor相关代码,检查资源导入设置,验证构建配置,清理项目缓存,更新Unity版本等。</think>### 解决Unity导出项目时无法生成播放器的问题 #### 1. **检查脚本编译错误** - **现象**:脚本中存在语法错误、命名空间冲突或未处理的异常会导致编译失败,从而无法生成播放器。 - **操作**: 1. 打开Unity控制台(`Window > General > Console`),查看所有红色错误信息。 2. 修复所有编译错误,尤其是与脚本位置相关的错误(如`UnityEditor`命名空间在非Editor脚本中使用)[^3]。 #### 2. **确保脚本存放位置正确** - **关键规则**:使用`UnityEditor`命名空间的脚本必须放在`Assets/Editor`、`Assets/Standard Assets/Editor`或`Assets/Plugins/Editor`文件夹中,否则会触发编译错误[^3]。 - **操作**: 1. 检查项目中所有涉及编辑器功能的脚本(如自定义导入处理器、菜单扩展),将其移动到`Editor`文件夹。 2. 若脚本需在运行时使用,需移除对`UnityEditor`的依赖。 #### 3. **处理资源导入设置** - **问题示例**:自动设置图片类型为`Sprite`的代码若未放在Editor文件夹,可能导致构建时逻辑冲突。 - **操作**: 1. 检查资源导入处理器(如`TextureSetting`类)是否位于Editor文件夹。 2. 使用条件编译指令限制编辑器专用代码: ```csharp #if UNITY_EDITOR public class TextureSetting : AssetPostprocessor { private void OnPreprocessTexture() { // 仅在编辑器中生效 } } #endif ```[^5] #### 4. **验证构建配置** - **常见错误**:未添加场景到构建列表,或目标平台设置不匹配。 - **操作**: 1. 打开`File > Build Settings`,确认所需场景已添加到`Scenes In Build`。 2. 切换目标平台(如Windows、Android)并确保安装对应模块。 #### 5. **清理项目缓存** - **操作**: 1. 关闭Unity,删除项目根目录下的`Library`文件夹。 2. 重新打开项目,Unity会自动重建库文件。 #### 6. **检查第三方插件兼容性** - **操作**:禁用或更新不兼容的插件(尤其是涉及Editor功能的插件)。 #### 7. **更新Unity版本** - **操作**:若问题由Unity版本Bug导致,升级至最新LTS版本。 --- ### 相关问题 1. **如何避免UnityEditor代码在构建时泄露到运行时?** *提示:使用`Editor`文件夹和`UNITY_EDITOR`宏隔离代码[^3][^5]。* 2. **Unity资源导入处理器在构建时是否生效?** *提示:仅在编辑器中生效,需通过`AssetPostprocessor`实现,且需放在Editor文件夹。* 3. **快速定位Unity编译错误的方法?** *提示:利用控制台过滤错误类型,优先处理第一个报错。*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值