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存檔工具來獲得此檔案
-
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中的那些特殊檔案夾