Unity資產,特殊文件夾以及重要路徑

轉載:https://blog.csdn.net/u012138730/article/details/81143413#4.Temp
Unity資產,特殊文件夾以及重要路徑
原創ivy_0709 最後發佈於2018-07-26 09:47:14 閱讀數 6067 收藏
展開
本文將介紹Unity中的資產,Unity中的特殊文件夾,Unity的一些路徑對應各個平臺上的具體路徑。

 第一部分就是介紹資產Assets——哪些是Assets,Assets類型具體有哪些,如何在編輯器中搜索特定的Assets,與Assets息息相關的meta文件,對於從外界導入的Assets怎麼進行流程化處理,如何設置對於一些二進制的資產進行序列化。

 第二部分是Unity工程目錄下的一些有特定用處特殊命名的文件夾。

 第三部分介紹 Application.dataPath,Application.streamingAssetsPath,Application.persistentDataPath,Application.temporaryCachePath這四個接口在IOS,Android和Windows下具體的路徑在哪裏。

第四部分是Unity自帶的工具。

目錄

一:資產類型

1.資產(Asset)和資源(Resource)的區別:

2.資產類型(通過擴展名識別):

3.搜索資產和加載資產

4.資產meta文件

5.資產導入

6.資產序列化

二:特殊文件夾

1.Assets文件夾下的特殊文件夾

2.Library文件夾

1)ScriptAssemblies文件夾

2)metadata文件夾

3)AtlasCache 和 ShaderCache

3.ProjectSettings文件夾

4.Temp

三:重要路徑

iOS

1.四個路徑對應的平臺下的路徑

2.app的獨立數據存儲目錄

3.各路徑對應的OC訪問方法

Android

1.四個路徑對應的平臺下的路徑

2.重要目錄

Windows:

四:Unity工具

1.查看unity裏的二進制文件

參考:

一:資產類型
1.資產(Asset)和資源(Resource)的區別:
資產:Assets目錄下的所有文件和文件夾

資源:Resources特殊目錄下的文件

2.資產類型(通過擴展名識別):
•場景(.unity)

•預置體(.prefab)

•模型(.fbx)

•貼圖(.jpeg/.png/.tga/…)

•腳本(.cs/.js)

•文本(.txt/.bytes/.json/…)

•聲音等…

特別的,對於Lua腳本

因爲擴展名是.lua不能被Unity識別爲TextAsset

所以打包lua時候:先改擴展名 .bytes–》再打包AssetBundle–》最後再改回來

3.搜索資產和加載資產
1.Project 視圖: 搜索框輸入比如 t:Prefab t:Mesh t:Scene t:Model t:ScriptableObject (等價於點擊搜索框右邊的 SearchByType)

2.代碼中使用搜索:接口 AssetDatabase.FindAssets

string[] guids = AssetDatabase.FindAssets(“t:Mesh”, searchFolder);
3.代碼中加載資產,使用對應的類:接口 AssetDatabase.LoadAssetAtPath

AudioClip audioClip = AssetDatabase.LoadAssetAtPath(“XXXX路徑下音頻名.wav”,typeof(AudioClip)) as AudioClip;

4.資產meta文件
Asset中的所有文件、文件夾,經過unity的導入過程後,會爲每個都生成一個.meta文件,這個文件是unity內部管理文件的重要內容,包含:

1)GUID(標識資產的唯一編號)。 優點之一是對象之間的引用不是通過資產路徑來引用,而是通過GUID來引用。所以改變資產路徑不會使得引用失效。所以一旦Meta中的GUID變更了,就要注意,它很可能引起一場引用丟失的災難。編輯器中使用AssetDatabase.GUIDToAssetPath和AssetDatabase.AssetPathToGUID中可以進行互轉。

   GUID保持不變的情況:移動、重命名、改動資源文件,都對GUID沒有影響,GUID還是指向這個資源文件。

   GUID改變的情況:注意不要隨意刪除資源文件相關的meta文件。如果刪除了meta文件,unity會認爲原始的資源文件被刪除了,並給此資源重新生成一個新的GUID。(爲什麼有時候場景中資源的引用會突然斷開)

2)導入設置(default import setting):可以在meta文件中找一下在導入設置中的對應項目。

根據不同的文件類型,它的數據是不同的ImportSetting數據,比如上面的NativeFormatImporter、ModelImporter、AudioImporter等等。只要對照Inspector面板中的條目,都可以看懂每一行的意義。所以假如我們把一個文件和這個文件的Meta文件從一個Unity工程複製到另一個Unity工程中,它的配置是不會變的

關於meta文件

   1. 新增資產文件或文件夾,一定要連同生成的meta文件一同提交。

   2. 重命名和移動要在Unity內進行,這樣可以保證相應的meta文件自動完成相應操作。

   3. 複製資產時儘量在Unity內用Ctrl+D進行,這樣會生成GUID不同的meta文件。

   4. 用腳本操作資產時要注意meta文件的同步,儘量用AssetDatabase類的API而非文件I/O。

   5. AssetDatabase.Refresh() 何時使用:當你使用System.IO 的東西去增刪文件的時候,需要調用這個函數把修改的東西導入一遍,防止 Unity 繼續使用緩存內容。如果使用 AssetDatabase 的方法來增刪文件,是不需要調用這個函數。

5.資產導入
導入單個資產可能要花費好幾秒。以貼圖爲例,需要做的一些事情:

生成必要的壓縮圖片以用於目標平臺

生成預覽用的小圖

生成GUID

……

使用 腳本 將導入流程自動化 AssetPostprocessor 類。

待看:

https://blogs.unity3d.com/cn/2012/10/26/in-depth-cache-server/

https://blogs.unity3d.com/cn/2012/10/26/in-depth-cache-server/

6.資產序列化

二:特殊文件夾
1.Assets文件夾下的特殊文件夾
Editor
1.不會被打包。

2.放一些編輯器腳本,插件的安裝包,以及不需要打進包的工具的資源。

Plugins
1.會被打包。可以不放在根目錄下。

2.用來放插件,jar包,第三方SDK等。

Resources
1.資源會被壓縮,轉化成二進制。會被加密。

2.使用Resources.Load加載

3.不應放太多資源,以及配置文件等資源。Resources 目錄大小和啓動速度的關係https://blog.uwa4d.com/archives/QA_Loading_1.html

1.該文件夾下的資源無論使用與否都會被打包。

2.打包後文件夾下的資源只讀。

3.無法做熱更新。

Streaming Assets
1.打包時候資源不壓縮不加密。所以此文件夾一定要注意大小,打包前多大,就會多大打到包中。

2.加載路徑:Android平臺上的特殊性——不能直接用文件I/O,即不能用Application.streamingAssetsPath

應該用:“jar:file://”+Application.dataPath+"!/assets"

3.在這個文件夾下主要存放一些二進制文件。

2.Library文件夾
此放的是程序集和庫的緩存文件。

1)ScriptAssemblies文件夾
存放的是當前工程的程序集:

其依賴關係,分成運行時程序集和編輯器程序集(各自都要依賴於firstpass,所以取名叫first)

編輯器程序集:是在 Editor 目錄裏的代碼構成的。

運行時程序集:打包的時候只會構建運行時的程序集。

2)metadata文件夾
存放的是 unity導入的原始資源(存放Assets文件夾下)生成了unity內部特定的格式(unity可識別)文件在遊戲中使用的文件。

每次修改了原始資源文件,就需要重新導入,生成unity可識別的文件格式。即每次刪除此文件夾,再次打開unity,也就是重新導入一次,重新生成這個文件夾的那些文件。

文件夾都是兩個字符,取自文件的GUID的前兩個字符,文件名即是GUID。(meta文件)

如果把Assets文件夾下的原始資源刪除了,Unity會自動刪除其meta文件,以及 metadata文件夾下相關的文件。

3)AtlasCache文件夾 和 ShaderCache文件夾
atlas和shader的緩存。

4)assetDatabase3
類AssetDatabase的數據支撐。

保證了mete被刪除後,仍能創建回擁有相同guid的meta文件。

而刪除了整個Library,當Library再次重建回來,被刪的meta創建出來的guid就不再一樣了。

3.ProjectSettings文件夾
此文件夾下是很多 .asset 文件,可以以文本的方式打開查看。

各個文件對應與工程中的 Project Settings 中的各個項。在Unity編輯器中設置了這些項目屬性以後,其實都是存儲在了這個文件夾下的.asset文件中。

ps:如果想查看Unity工程是用哪個版本打開的,除了直接用Unity打開查看以外,還可以看這個目錄下的 ProjectVersion.txt 這個文件。

4.Temp
Library 和 Temp 都是緩存,可以刪除,因此也不應該在版本控制之下。

5.Plugin/Android文件夾——用於Android打包
其中AndroidManifest.xml這個文件用來告訴android系統,這裏面有關於APP的配置信息,你需要根據裏面的設置的配置信息來運行APP的代碼,顯示界面。

xml包含標籤,屬性,值。AndroidManifest.xml常用的標籤有(每個標籤裏的屬性啊值啊就不介紹了):

——根節點

      <application>——應用節點,必須有,作爲<manifest>的子節點

                        <activity>,<provider>,<service> 描述應用的組件,作爲<application>的子節點

      <uses-feature>——用戶特徵標籤,描述應用所依賴的硬件或者軟件條件。在應用商店搜索的時候進行過濾。

      <uses-permission>——用戶權限標籤,描述應用需要的權限

如果其下沒有自己寫的AndroidManifest,打包的時候Unity會用它默認的AndroidManifest(mac中存在 unity.app/Contents/PlaybackEngines/AndroidPlayer下面,當你在進行打包apk的時候,unity會拷貝該路徑下的所有參數)。

三:重要路徑
iOS
1.四個路徑對應的平臺下的路徑
Application.dataPath
/var/containers/Bundle/Application/app sandbox/xxx.app/Data

也就是app安裝路徑,app本身就在這裏,此目錄是隻讀的。

Application.streamingAssetsPath
/var/containers/Bundle/Application/app sandbox/xxx.app/Data/Raw

streamingAssetsPath是dataPath下的Raw目錄。

Application.persistentDataPath
/var/mobile/Containers/Data/Application/app sandbox/Documents

下面介紹獨立數據存儲目錄的 Documents目錄

Application.temporaryCachePath
/var/mobile/Containers/Data/Application/app sandbox/Library/Caches

下面介紹獨立數據存儲目錄的 Library下的Caches子目錄

2.app的獨立數據存儲目錄
Documents文件夾 這個目錄用於存儲需要長期保存的數據,比如我們的熱更新內容就寫在這裏。需要注意的是,iCloud會自動備份此目錄,如果此目錄下寫入的內容較多,審覈的可能會被蘋果拒掉。
Library文件夾 Caches子目錄
一個相對臨時的目錄,適合存放下載緩存的臨時文件,空間不足時可能會被系統清除。

我把熱更新的臨時文件寫在這裏,等一個版本的所有內容更新完全後,再把內容轉移到Documents目錄

Preferences子目錄 用於應用存儲偏好設置,用NSUserDefaults讀取或設置。
tmp文件夾 臨時目錄,存放應用運行時臨時使用的數據
3.各路徑對應的OC訪問方法
app安裝路徑 [[NSBundle mainBundle] resourcePath]
app數據沙盒存儲根目錄 NSHomeDirectory()
Documents NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
Library NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)
Caches NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)
tmp NSTemporaryDirectory()

Android
1.四個路徑對應的平臺下的路徑
Application.dataPath
/data/app/package name-n/base.apk

也就是apk安裝路徑

Application.streamingAssetsPath jar:file:///data/app/package name-1/base.apk!/assets
Application.persistentDataPath
/storage/emulated/0/Android/data/package name/files 外部存儲路徑-私有目錄-files目錄

Application.temporaryCachePath
/storage/emulated/0/Android/data/package name/cache 外部存儲路徑-私有目錄-cache目錄

2.重要目錄

各路徑對應的Java訪問方法

apk安裝路徑
/data/app/package name-n/base.apk

就是上面的dataPath返回的目錄

AssetManager.open(String filename)
內存存儲路徑(InternalStorage)
/data/data/package name-n/,用戶或其它app都不能訪問。

打開會發現裏面有4個目錄(需要root)

cache 緩存目錄,類似於iOS的Cache目錄
context.getFilesDir().getPath()

或者

context.getCacheDir().getPath()

databases 數據庫文件目錄
files 文件目錄,類似於iOS的Documents目錄
shared_prefs,類似於iOS的Preferences目錄,用於存放常用設置,比如Unity3D的PlayerPrefs就存放於此
外部存儲路徑(ExternalStorage)
在內置或外插的sd上,用戶或其它app都可以訪問。

外部存儲目錄又分私有和公有目錄

公有目錄

有DCIM、Music、Movies、Download這樣系統創建的公共目錄,

也有各自app創建的文件夾(在sd卡根目錄下),卸載app數據依舊存在。

context.getExternalFilesDir().getPath()

或者

context.getExternalCacheDir().getPath()

私有目錄

/storage/emulated/n/Android/data/package name/

打開可以看到裏面有兩個文件夾cache和files。

爲什麼跟內部存儲目錄重複了?

這是爲了更大的存儲空間,以防內存存儲空間較小。

推薦把不需要隱私的、較大的數據存在這裏,而需要隱私的或較小的數據存在內部存儲空間。

Windows:
Application.dataPath 應用的appname_Data/
Application.streamingAssetsPath
應用的appname_Data/StreamingAssets

Application.persistentDataPath
C:\Users\username\AppData\LocalLow\company name\product name

Application.temporaryCachePath
C:\Users\username\AppData\Local\Temp\company name\product name

四:Unity工具
1.查看unity裏的二進制文件
.prefab .anim .mat .assets 以及 metadata下的文件

用 Unity\Editor\Data\Tools 安裝路徑下的 binary2text.exe 進行轉化

2.查看Editor的日誌
\AppData\Local\Unity\Editor

參考:
項目分享ppt

https://blog.csdn.net/ynnmnm/article/details/52253674

https://blog.csdn.net/k46023/article/details/64439313
————————————————
版權聲明:本文爲CSDN博主「ivy_0709」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u012138730/article/details/81143413

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章