天天看点

Unity技术 Unity中的特殊目录Unity技术 Unity中的特殊目录简介声明Unity引擎中的特殊目录特殊目录对脚本编译顺序影响参考资料相关阅读

Unity技术 Unity中的特殊目录

简介

在项目开发中我们经常会创建很多不同的目录,以进行资源的管理,对于Unity项目中来,Unity规定了一些特殊的目录,其包含有不同的含义,有些与API的使用有关,有些会影响到脚本的编译顺序,本文将重点介绍Unity中的那些特殊的目录,以及脚本的编译顺序

声明

本文中的内容属于个人总结整理而来,个人水平有限,对于部分细节难免有理解错误及遗漏之处,如果您在阅读过程中有所发现,希望您能指正,同时文章中的部分内容也参考了其它大神的文章,如果文章中的内容侵犯了您的权益,表示非常歉意,请您指出,我将尽快修改。

如果您进行转载,请标明出处。

Unity技术 Unity中的特殊目录(http://www.liyubin.com/articles/2019/03/20/1553090549684.html)

Unity引擎中的特殊目录

  • Assets

    Assets目录是Unity的主目录,unity中大量的API都是假定所有的内容是位于Assets目录中的

  • Library

    由Unity自动生成管理的目录之一,此目录中包含有项目中使用的脚本编译后的DLL,使用的Unity的DLL,Package中代码相关,以及资源的唯一标识及处理结果等等,此目录完全由Unity在导入项目时生成,大多数情况下是不需要对此目录进行版本管理。

  • Logs

    简易的日志目录,并非Unity运行时的日志目录,对于项目中的日志位于C:\User\XXXX\AppData\Local\Unity\Editor\*.log

  • Packages

    PackageManager的配置文件目录

  • ProjectSettings

    项目的配置基本上都存储于些目录中,此目录中的配置多数以.asset结尾,如果项目指定的Asset Serialization为Force Text的话,可以直接文本编辑器查看内容

  • Temp

    Unity加载项目后生成的临时目录,项目关闭后,此目录也将会被删除。

  • Editor

    项目开发中常用到的目录之一,此目录中的脚本将被视为编辑器脚本而不是运行时脚本,可以使用这些脚本在开发期制作各种各样的工具。Editor目录可以在Assets目录及子目录的任意位置,可以有任意多个

    Editor目录中的脚本会对脚本的编译顺序有一定的影响。

    Unity是不允许GameObject使用位置Editor中的MonoBehaviour脚本的

  • Editor Default Resources

    Editor Default Resources目录用于编辑器的开发中,如果想要在编辑器脚本使用EditorGUIUtility.Load函数加载资源的话,只能将资源放于此目录中。此目录只能存在一个,并且位于项目根目录的Assets目录之下。

  • Gizmos

    项目开发中经常会使得Gizmos进行一些辅助或者工具性的绘制,比如使用Gizmos.DrawIcon在场景中放置一个图标,充当特殊物体或者位置的标记。则需要绘制的图片资源必须放于名称Gizmos的目录中,Gizmos目录只能位于项目根目录Assets目录之下,只能有一个。

  • Plugins

    Plugins目录只能位于Assets目录根之下,只能存在一个目录,一般情况下Plugins多用于放置扩展的DLL(多数情况下是由C/C++编写的),可以放置第三方代码,同时此目录的插件多与平台有关,也会影响脚本的编译顺序。

  • Resources

    Resources是Unity项目最常使用的目录之一,对于放到Resources目录中的资源可以使用Resource.Load加载。Resources目录可以在Assets目录及子目录的任意位置,可以有任意多个,进行资源加载时使用的是相对于Resources目录的路径。

    如果Resources目录是Editor目录的子目录,则其中的资源可以在Editor脚本中加载,但是不会构建到最终的发布版本中

  • Standard Assets

    当导入Unity提供的Standard Asset Package时,会创建Standard Assets目录,此目录中的脚本对编译顺序是有一定的影响的。对于此目录只能位置项目的Assets的目录下,有且仅有一个此名称的目录

  • StreamingAssets

    StreamingAssets目录只能位于项目的Assets目录的根目录下,整个项目中有且只能有一个此名称的目录。对于项目开发中某些资源不希望Unity处理,需要保持原来的文件格式的话(比如说视频类的文件,希望以视频流的形式播放时),只要将资源放置于此目录或者其子目录中即可。对于此目录中的资源只能使用特定的加载方式加载

    在各个平台上需要得到StreamingAssets所在的目录可以使用Application.stramingAssetsPath,此目录在不同的平台下指向不同的目录,

    • Win/Mac
    • iOS
    • Android

      path = “jar:file://”+Application.dataPath+"!/assets/";

      在Android平台上文件包含在压缩的.jar文件中(其格式也zip基本相同),如果不使用WWW类进行资源的读取的话,需要使用其它的Jar存档工具来获得此文件

    PS:如果.dll文件位于此目录中将不编译
  • Hidden Assets

    Unity在导入资源时会忽略Assets目录及子目录下的一些资源,其忽略规则为:

    • 隐藏目录
    • 以"."开头的文件或者目录
    • 以"~"开头的文件或者目录
    • 命名为cvs的文件或者目录
    • 以".tmp"为后缀的文件

特殊目录对脚本编译顺序影响

Unity根据脚本所在的目录不同,编译脚本由四个独立的阶段构成,Unity会为每个阶段单独的创建CS项目文件(.csproj)和预定义的程序集,如果没有符合对应编译阶段的脚本,则Unity将直接跳过。

当脚本引用不同编译阶段的类时,这些脚本的编译顺序就非常重要了,基本的规则是当前编译阶段是无法使用之后编译阶段中的内容的,早于当前阶段的内容完全可以使用。

Phase Assembly Name Script Files
1 Assembly-CSharp-firstpass 位于Standard Assets、Plugins目录中脚本
2 Assembly-CSharp-Editor-firstpass 位于Standard Assets、Plugins目录中的子目录Editor中脚本
3 Assembly-CSharp 其它非Editor目录中的脚本
4 Assembly-CSharp-Editor 其它在Editor目录中的脚本

PS:也可以自己定义程序集来组织项目中的脚本。

参考资料

  • Unity-Special folder names
  • Unity-Special folders and script compilation order

相关阅读

  • Unity3d中特殊文件夹以及作用详解
  • Unity中的那些特殊文件夹