Unity资源管理——基础知识整理
部分參考自:
Unity - Manual: Unity User Manual 2021.3 (LTS)
UWA | 致力于游戲VR和AR應用提供項目研發解決方案 | 簡單優化、優化簡單 | 侑虎科技
一、Unity中常見的資源類型
1、原始資源文件(從外部創建并導入Unity,每一個類型都對應一個AssetImporter):
? ? Texture、Model、AudioClip、VideoClip、TextAsset、Font、其他。
2、代碼文件:
? ? C#腳本文件、代碼庫文件、shader文件?等。導入時Unity會進行一次編譯?
3、序列化文件(可在Unity中創建、編輯,能夠被Unity運行時反序列化的文件)
? ? Sprite、SpriteAtlas、Prefab、Scene、Script、Shader、Materrial、AnimationClip、RenderTexture、CustomRenderTexture、AudioMixer、CustomFont、GUISkin、PhysicMaterial、ComputeShader、AnimatorController、AnimatorOverrideController、AvatarMask、Brush、Cubemap、LightmapParameters、Timeline、Signal、TerrainLayer、AssemblyDefinition、AssemblyDefinitionReference、Asset(ScriptableObject)文件、其他。
4、文本文檔(Unity 識別為 TextAsset,無?ImportSetting)
? ? txt、xml、json、二進制文件、其他。
5、非序列化文件(Unity無法識別的文件,如文件夾)
6、Meta文件
*可能會依賴其他資源的資源:
? ? Model、SpriteAtlas、Prefab、Scene、Materrial、CustomFont、GUISkin、AnimatorController、AnimatorOverrideController、AvatarMask、Brush、Cubemap、Timeline、TerrainLayer、其他。
二、特定資源文件夾
Unity會將許多文件夾名解釋為一條指令,說明文件夾中的內容應該以一種特殊的方式處理。
1、Assets: Unity項目資源主文件夾。除了部分函數需要將Assets文件夾包含在資源路徑名中(例如,AssetDatabase類中的某些函數), 其他大部分都不用。
2、Editor: 放在Editor文件夾中的腳本被視為Editor腳本而不是運行時腳本,這些腳本在開發期間向Editor添加功能,并在運行時的構建中不可用。
? ? 可在Assets文件夾中的任何位置添加多個Editor文件夾。應將Editor腳本放在Editor文件夾內或其子文件夾內。
3、Editor Default Resources:Editor腳本可以通過 EditorGUIUtility.Load 函數按需加載資源文件,此函數將在 Editor Default Resources 文件夾中查找資源文件(也可放在Editor/Resources下)。
? ? 只能有一個 Editor Default Resources 文件夾,且必須放在項目的根目錄(直接位于Assets文件夾中)。資源可放在其子文件夾,加載時需拼上路徑。
4、Gizmos:此文件夾允許將圖形添加到Scene視圖,以幫助可視化不可見的設計細節。Gizmos.DrawIcon 函數在場景中放置一個圖標,作為特殊對象或位置標記。必須將圖像放在Gizmos文件夾中,才能被DrawIcon函數找到。
? ? 只能有一個Gizmos 文件夾,且必須放在項目的根目錄(直接位于Assets文件夾中)。資源可放在其子文件夾,加載時需拼上路徑。
?? ?
5、Plugins:可為項目添加插件來擴展Unity的功能。插件通常是用C/C++編寫的本地DLL。這些插件可以訪問第三方代碼庫、系統調用和其他Unity內置功能。請始終將插件放在 名為 Plugins 的文件夾中,才能被Unity檢測到。
? ? 只能有一個Plugins 文件夾,且必須放在項目的根目錄(直接位于Assets文件夾中)。
6、Resources: 可從腳本中按需加載資源。應將資源放在名為 Resources的文件夾中,使用 Resources.Load函數加載。
? ? 可在Assets文件夾中的任何位置添加多個Resources文件夾。資源可放在其子文件夾,加載時需拼上路徑。
? ? 注意,如果Resources是Ediotr的子文件夾,則其中的資源可通過Editor腳本加載,但會從構建中剝離。
7、Standard Assets: 標準資源導入后的文件夾。
? ? 只能有一個Standard Assets文件夾,且必須放在項目的根目錄(直接位于Assets文件夾中)。資源可放在其子文件夾。
8、StreamingAssets: 希望資源以其原始格式作為單獨的文件使用。例如文件系統訪問視頻文件。StreamingAssets中的文件可以按原樣復制到目標計算機,然后就能從特定文件夾中訪問該文件。
? ? ?只能有一個StreamingAssets文件夾,且必須放在項目的根目錄(直接位于Assets文件夾中)。資源可放在其子文件夾,加載時需拼上路徑。
9、隱藏的資源:為防止導入由操作系統或其他應用程序創建的特殊文件和臨時文件,Unity會忽略Assets文件夾中的以下文件:隱藏的文件夾、以**.**開頭的文件和文件夾、以**~**結尾的文件和文件夾、名為cvs的文件和文件夾、擴展名為.tmp的文件。
三、系統資源路徑
1、Application.dataPath:包含游戲數據文件夾的路徑(只讀)。
? ? 和平臺相關:
? ? Unity Editor:?<path to project folder>/Assets
? ? iOS:?<path to player app bundle>/<AppName.app>/Data(只讀文件夾,可使用Application.persistentDataPath保存)
? ? Android:?通常它會直接指向APK。但如果正在運行拆分的二進制構建,它將指向OBB(Opaque Binary Blob )
? ? Mac player:?<path to player app bundle>/Contents
? ? Win/Linux player:?<path to executablename_Data folder>(請注意,大多數Linux安裝都區分大小寫!)
? ? WebGL:?播放器數據文件目錄的絕對url(不含實際的數據文件名)
? ? Windows Store Apps:?播放器數據文件目錄的絕對url(只讀文件夾,可使用Application.persistentDataPath保存)
2、Application.persistentDataPath:包含持久數據目錄的路徑(可讀可寫)。
? ??該值是一個目錄路徑,其中可以存儲需要在運行之間保留的數據。在 iOS 和 Android 上發布時,persistentDataPath 將指向設備上的公共目錄。每次更新應用程序時,不會擦除此位置中的文件。但用戶可以直接刪除這些文件。
? ??請注意,在構建應用程序時,將基于 Bundle ID 生成 GUID,并且此 GUID 將成為 persistentDataPath 的一部分。如果您在將來的版本中保留相同的 Bundle ID,那么應用程序將在每次更新時繼續訪問相同的位置。
? ? Windows Store Apps:?指向 %userprofile%\AppData\Local\Packages\<productname>\LocalState.
? ? iOS:?指向?/var/mobile/Containers/Data/Application/<guid>/Documents.
? ? Android: 通常指向?/storage/emulated/0/Android/data/<packagename>/files? (一些舊手機可能會指向SD卡上的位置), 可使用?android.content.Context.getExternalFilesDir?解析路徑。
3、Application.streamingAssetsPath:StreamingAssets文件夾的路徑(只讀)。
? ??在運行時,Application.streamingAssetsPath?提供文件夾的路徑。如果將資產添加到 StreamingAssets文件夾。構建的應用程序就可以在這個地址加載資產。
? ??在WebGL和Android平臺上不能訪問StreamingAssets文件夾。因為?WebGL上沒有可用的文件訪問;而Android使用一個壓縮的 .apk 文件,文件會被包含在壓縮在 .jar文件(其格式與標準的zip壓縮文件基本相同)中。這些平臺返回一個URL,可以使用UnityWebRequest類訪問URL來獲得資產。
? ? Windows/MacOS:? Application.dataPath + "/StreamingAssets".
? ? iOS: Application.dataPath + "/RAW".
? ? Android:?"jar://file://" + Application.dataPath + "!/assets/".
? ? 注意:位于 StreamingAssets 文件夾中的 .dll 文件不參與編譯。
4、Application.temporaryCachePath:包含臨時數據/緩存目錄的路徑(只讀)。
? ??該值是可以存儲臨時數據的目錄路徑。
四、發布時會被打入包內的資源:
1、Assets下所有非編輯器腳本文件。
2、Assets下所有 參與構建的Scene文件(BuildSettings Scenes In Build 處設置)。
3、Assets下直接或間接被 “參與構建的Scene文件”?所依賴的文件。
4、Resources下的所有文件。
5、Assets下直接或間接被 “Resources下的文件”?所依賴的文件。
6、StreamingAssets下的所有文件(會被逐字拷入目標平臺的特定文件夾)。
7、Assets下所有 參與構建的Shader文件(ProjectSetting Built-in Shader Setting處設置)。
8、Plugins下的對應平臺下的文件。
總結
以上是生活随笔為你收集整理的Unity资源管理——基础知识整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 税务信息系统建设安全管理平台的研究(一)
- 下一篇: 如何书写批处理文件?(批处理文件的介绍及