找回密码
 注册帐号

扫一扫,访问微社区

资源数据库 (assetdatabase)

2015-1-8 17:02| 发布者: 杨炎| 查看: 1849| 评论: 0|原作者: 蛮牛|来自: unity3d脚本manual

摘要: 资源数据库 (assetdatabase)资源数据库 (assetdatabase) 是允许您访问工程中的资源的 api。此外,其提供方法供您查找和加载资源,还可创建、删除和修改资源。unity 编辑器 (editor) 在内部使用资源数据库 (assetdata ...

资源数据库 (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 将更改提交至数据库,并使其显示在工程中。

相关阅读

文章点评
相关文章