Unity資產,特殊資料夾以及重要路徑
本文將介紹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)的區別:
資產: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工程中,它的配置是不會變的
比如在出現了dll出現在多個地方的錯誤: Plugin xxx is used from several locations ,就需要看下其Inspector設定中平臺選擇,修改過以後再看meta檔案就有了相應的修改,就不會出錯了
https://blog.csdn.net/huihut/article/details/86114865
關於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常用的標籤有(每個標籤裡的屬性啊值啊就不介紹了):
<manifest>——根節點
<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
相關文章
- Unity Assets目錄下的特殊資料夾名稱Unity
- Windows中的特殊資料夾Windows
- Unity 編輯器中獲取選中的資料夾、檔案路徑Unity
- Qt 選擇資料夾、建立資料夾以及建立檔案QT
- Unity中專屬資料夾介紹Unity
- Qt 程式獲取程式所在路徑、使用者目錄路徑、臨時資料夾等特殊路徑的方法QT
- JetBrains編輯器資料夾路徑AI
- 兩種方法更改windows系統預設資料夾路徑(appdata等資料夾)WindowsAPP
- php遍歷資料夾以及子目錄;PHP
- bc搭建資料夾顯示特殊html字元處理方法HTML字元
- win10桌面資料夾路徑位置在哪_w10桌面資料夾路徑如何開啟Win10
- Unity3D - 如何引入包到指定的資料夾Unity3D
- Mac拷貝/複製資料夾路徑快捷鍵Mac
- 匹配linux資料夾路徑的正規表示式Linux
- 匹配window下資料夾路徑的正規表示式
- nodejs遞迴資料夾獲取所有檔案路徑NodeJS遞迴
- controller層收不到資料資訊,檢視是否有資料夾與請求路徑同名Controller
- SharpZipLib解壓資料夾 包含空資料夾
- win10開機啟動項資料夾路徑_win10開機啟動項資料夾在哪Win10
- win10快速啟動資料夾在哪裡_win10快速啟動資料夾目錄的路徑Win10
- win10字型在哪個資料夾_win10字型資料夾路徑如何開啟Win10
- .git資料夾Git
- 資料夾操作
- Android中asset資料夾和raw資料夾區別Android
- win10桌布快取在哪個資料夾_win10桌面桌布資料夾儲存路徑Win10快取
- windows10系統開機啟動資料夾路徑在哪Windows
- win10 如何更改桌面資料夾路徑 win10 更換桌面路徑方法Win10
- html中的src以及一些庫的src資料夾HTML
- win10 資料夾中搜尋怎樣搜尋帶特殊字元檔案Win10字元
- 資料夾變exe資料找回方法
- mkdir() 建立資料夾
- windows資料夾大小Windows
- java建立資料夾Java
- laravel 建立資料夾Laravel
- 特殊條件資料傳輸
- 微信資料夾儲存在什麼位置?如何修改儲存路徑
- DeerOJ的前端框架介紹-libs資料夾和controller資料夾前端框架Controller
- node_modules 資料夾下 .bin 隱藏資料夾的作用