Unity AssetDatabase类

来源:互联网 发布:法国劳动法改革 知乎 编辑:程序博客网 时间:2024/06/05 07:16

AssetDatabase,它允许您访问您的项目中的资源。它提供了查找资源、加载资源、创建资源,删除资源和修改资源的方法。Unity编辑器内部使用AssetDatabase保持跟踪资源文件和保持资源与引用它们的对象之间的关联。由于Unity需要保持跟踪项目文件夹中的所有更改,如果你想访问或修改的资源数据,你应该始终使用AssetDatabase API,而不是文件系统。

AssetDatabase接口仅在编辑器中可用,在内置播放器没有这功能。像所有其他编辑器类,它是只适用于放置在Editor文件夹下的脚本(如果没有的话,在主资源项目文件夹下创建一个命名为Editor的文件夹。)。

Importing an Asset 导入资源

Unity的资源通常在拖动到项目时自动导入,但它也可以在脚本控制下导入。要做到这一点,你可以使用AssetDatabase.ImportAsset函数(方法)。就像下面的例子:

using UnityEngine;using UnityEditor;public class ImportAsset {[MenuItem ("AssetDatabase/ImportExample")]static void ImportExample (){AssetDatabase.ImportAsset("Assets/Textures/texture.jpg", ImportAssetOptions.Default);}}

Loading an Asset 加载资源

编辑器仅在需要时加载资源,如果资源被添加到场景或在检视面板编辑。但是,您可以用脚本来加载和访问资源,使用AssetDatabase.LoadAssetAtPath, AssetDatabase.LoadMainAssetAtPath, AssetDatabase.LoadAllAssetRepresentationsAtPath and 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;}}

File Operations using the AssetDatabase 文件操作使用AssetDatabase

public class AssetDatabaseIOExample {[MenuItem ("AssetDatabase/FileOperationsExample")]static void Example (){string ret;// CreateMaterial material = new Material (Shader.Find("Specular"));AssetDatabase.CreateAsset(material, "Assets/MyMaterial.mat");if(AssetDatabase.Contains(material))Debug.Log("Material asset created");// Renameret = AssetDatabase.RenameAsset("Assets/MyMaterial.mat", "MyMaterialNew");if(ret == "")Debug.Log("Material asset renamed to MyMaterialNew");elseDebug.Log(ret);// Create a Folderret = AssetDatabase.CreateFolder("Assets", "NewFolder");if(AssetDatabase.GUIDToAssetPath(ret) != "")Debug.Log("Folder asset created");elseDebug.Log("Couldn't find the GUID for the path");// Moveret = AssetDatabase.MoveAsset(AssetDatabase.GetAssetPath(material), "Assets/NewFolder/MyMaterialNew.mat");if(ret == "")Debug.Log("Material asset moved to NewFolder/MyMaterialNew.mat");elseDebug.Log(ret);// Copyif(AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(material), "Assets/MyMaterialNew.mat"))Debug.Log("Material asset copied as Assets/MyMaterialNew.mat");elseDebug.Log("Couldn't copy the material");// Manually refresh the Database to inform of a changeAssetDatabase.Refresh();Material MaterialCopy = AssetDatabase.LoadAssetAtPath("Assets/MyMaterialNew.mat", typeof(Material)) as Material;// Move to Trashif(AssetDatabase.MoveAssetToTrash(AssetDatabase.GetAssetPath(MaterialCopy)))Debug.Log("MaterialCopy asset moved to trash");// Deleteif(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 changesAssetDatabase.Refresh();}}
当你完成修改资源,你应该调用AssetDatabase.Refresh来提交更改到数据库,并使他们在项目可见。

0 0
原创粉丝点击