美文网首页unity
Unity技术 Unity中的特殊目录

Unity技术 Unity中的特殊目录

作者: 7b6b65902836 | 来源:发表于2019-03-21 00:23 被阅读23次

    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技术 Unity中的特殊目录

        本文链接:https://www.haomeiwen.com/subject/hpqfvqtx.html