天天看點

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中的那些特殊檔案夾