Unity3D技術之資源數據庫 (AssetDatabase)詳解


歡迎來到unity學習unity培訓、unity企業培訓教育專區,這里有很多U3D資源U3D培訓視頻U3D教程U3D常見問題U3D項目源碼,我們致力於打造業內unity3d培訓、學習第一品牌。

 資源數據庫 (AssetDatabase)
資源數據庫 (AssetDatabase) 是允許您訪問工程中的資源的 API。此外,其提供方法供您查找和加載資源,還可創建、刪除和修改資源。Unity 編輯器 (Editor) 在內部使用資源數據庫 (AssetDatabase) 追蹤資源文件,並維護資源和引用資源的對象之間的關聯。Unity 需要追蹤工程文件夾發生的所有變化,如需訪問或修改資源數據,您應始終使用資源數據庫 (AssetDatabase) API,而非文件系統。 資源數據庫 (AssetDatabase) 接口僅適用於編輯器,不可用於內置播放器。和所有其他編輯器類一樣,其只適用於置於編輯器 (Editor) 文件夾中的腳本(只在主要的資源 (Assets) 文件夾中創建名為“編輯器”的文件夾(不存在該文件夾的情況下))。

導入資源

通常,Unity 只在需要時自動導入已拖放至該工程的資源,但也可能在腳本控制下導入這些資源。為此,您可以使用以下示例中的 AssetDatabase.ImportAsset 類函數。
using UnityEngine;
using UnityEditor;
 
public class ImportAsset {
[MenuItem ("AssetDatabase/ImportExample")]
static void ImportExample ()
{
AssetDatabase.ImportAsset("Assets/Textures/texture.jpg", ImportAssetOptions.Default);
}
}

您也可將額外的 AssetDatabase.ImportAssetOptions 類型參數傳遞至資源數據庫 (AssetDatabase) 。腳本參考手冊頁面記錄了不同的選項及其對函數行為的影響。

加載資源

如果將資源添加至場景或在檢視 (Inspector) 面板中編輯這些資源,則編輯器僅在需要時加載資源。但是,您可以使用以下腳本加載和訪問資源:AssetDatabase.LoadAssetAtPath、AssetDatabase.LoadMainAssetAtPath、AssetDatabase.LoadAllAssetRepresentationsAtPath 和 AssetDatabase.LoadAllAssetsAtPath。有關更多詳細信息,請參閱腳本文檔。

using UnityEngine;
using UnityEditor;
 
public class ImportAsset {
[MenuItem ("AssetDatabase/LoadAssetExample")]
static void ImportExample ()
{
Texture2D t = AssetDatabase.LoadAssetAtPath("Assets/Textures/texture.jpg", typeof(Texture2D)) as Texture2D;
}
}

使用 AssetDatabase 操作文件

Unity 將保留資源文件的元數據,您決不可使用文件系統創建、移動或刪除它們。相反,您應使用 AssetDatabase.Contains、AssetDatabase.CreateAsset、AssetDatabase.CreateFolder、AssetDatabase.RenameAsset、AssetDatabase.CopyAsset、AssetDatabase.MoveAsset、AssetDatabase.MoveAssetToTrash 和 AssetDatabase.DeleteAsset 進行上述操作。

public class AssetDatabaseIOExample {
[MenuItem ("AssetDatabase/FileOperationsExample")]
static void Example ()
{
string ret;
 
// Create
Material material = new Material (Shader.Find("Specular"));
AssetDatabase.CreateAsset(material, "Assets/MyMaterial.mat");
if(AssetDatabase.Contains(material))
Debug.Log("Material asset created");
 
// Rename
ret = AssetDatabase.RenameAsset("Assets/MyMaterial.mat", "MyMaterialNew");
if(ret == "")
Debug.Log("Material asset renamed to MyMaterialNew");
else
Debug.Log(ret);
 
// Create a Folder
ret = AssetDatabase.CreateFolder("Assets", "NewFolder");
if(AssetDatabase.GUIDToAssetPath(ret) != "")
Debug.Log("Folder asset created");
else
Debug.Log("Couldn't find the GUID for the path");
 
// Move
ret = AssetDatabase.MoveAsset(AssetDatabase.GetAssetPath(material), "Assets/NewFolder/MyMaterialNew.mat");
if(ret == "")
Debug.Log("Material asset moved to NewFolder/MyMaterialNew.mat");
else
Debug.Log(ret);
 
// Copy
if(AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(material), "Assets/MyMaterialNew.mat"))
Debug.Log("Material asset copied as Assets/MyMaterialNew.mat");
else
Debug.Log("Couldn't copy the material");
// Manually refresh the Database to inform of a change
AssetDatabase.Refresh();
Material MaterialCopy = AssetDatabase.LoadAssetAtPath("Assets/MyMaterialNew.mat", typeof(Material)) as Material;
 
// Move to Trash
if(AssetDatabase.MoveAssetToTrash(AssetDatabase.GetAssetPath(MaterialCopy)))
Debug.Log("MaterialCopy asset moved to trash");
 
// Delete
if(AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(material)))
Debug.Log("Material asset deleted");
if(AssetDatabase.DeleteAsset("Assets/NewFolder"))
Debug.Log("NewFolder deleted");
 
// Refresh the AssetDatabase after all the changes
AssetDatabase.Refresh();
}
}

使用 AssetDatabase.Refresh

修改完資源后,您應調用 AssetDatabase.Refresh 將更改提交至數據庫,並使其顯示在工程中。

更多精彩請點擊 http://www.gopedu.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM