找回密码
 注册帐号

扫一扫,访问微社区

构建资源包

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

摘要: 构建资源包有三种类函数可用于构建资源包 (assetbundles):buildpipeline.buildassetbundle允许您构建任意资源类型的资源包 (assetbundles)。如需在数据可用时只添加场景进行流处理和加载时,可使用buildpipeline.bu ...

构建资源

有三种类函数可用于构建资源包 (assetbundle" target="_blank" class="relatedlink">assetbundles" target="_blank" class="relatedlink">assetbundles):

buildpipeline.buildassetbundle允许您构建任意资源类型的资源包 (assetbundles)。

如需在数据可用时只添加场景进行流处理和加载时,可使用buildpipeline.buildstreamedsceneassetbundle。

buildpipeline.buildassetbundleexplicitassetnames与 buildpipeline.buildassetbundle 作用相同,但有一个额外参数可指定每个对象的自定义字符串标识符(名称)。

资源包 (assetbundle) 构建示例

我们使用编辑器脚本构建资源包。buildpipeline.buildassetbundle脚本文档中有相关基本示例。

根据此示例,将上述链接中的脚本复制并粘贴至新 c# 脚本,并以 exportassetbundles 命名。此脚本应位于名为编辑器 (editor) 的文件夹中,以便其可在unity 编辑器中运行。

现在在资源 (assets)菜单中,应可看见两个新菜单选项。

构建选择的资源包 – 跟踪相关性。这会将当前对象及其所有相关性导入资源包。例如,如果您有一个包含多个分层结构的预设,则该预设将以递归方式将所有子对象和组件添加至资源包。

构建选择的资源包 – 不跟踪相关性。此方法与上述方法相反,将只添加您选定的单个资源。

在此示例中,您应新建预设。首先,可通过转至游戏对象 (gameobject) -> 新建 (create other) -> 立方体 (cube)在层级视图 (hierarchy view) 中新建立方体 (cube)。然后将立方体 (cube) 从层级视图 (hierarchy view) 拖放至工程视图 (project view),这将创建该对象的预设。

然后,应在工程窗口右击立方体 (cube) 预设并依次选择构建选择的资源包 (build assetbundle from selection) - 跟踪相关性 (track dependencies)。 此时将显示一个窗口提示您保存打包的资源。如果新建一个名为“资源包 (assetbundles)”的文件夹并将立方体另存为cube.unity3d,现在,工程窗口将以下图形式显示。

此时,可将资源包 (assetbundle)cube.unity3d移至本地存储的其他位置,或将其上传至所选服务器。

示例:构建资源包 (asset bundle) 时如何更改资源的属性

可在调用buildpipeline.buildassetbundle前使用assetdatabase.importasset强制重新导入资源,然后使用assetpostprocessor.onpreprocesstexture设置所需属性。以下示例将介绍构建资源包 (asset bundle) 时如何设置不同的纹理压缩率。

c#

// builds an asset bundle from the selected objects in the project view,

// and changes the texture format using an assetpostprocessor.

using unityengine;

using unityeditor;

public class exportassetbundles {

// store current texture format for the textureprocessor.

public static textureimporterformat textureformat;

[menuitem("assets/build assetbundle from selection - pvrtc_rgb2")]

static void exportresourcergb2 () {

textureformat = textureimporterformat.pvrtc_rgb2;

exportresource();

}

[menuitem("assets/build assetbundle from selection - pvrtc_rgb4")]

static void exportresourcergb4 () {

textureformat = textureimporterformat.pvrtc_rgb4;

exportresource();

}

static void exportresource () {

// bring up save panel.

string path = editorutility.savefilepanel ("save resource", "", "new resource", "unity3d");

if (path.length != 0) {

// build the resource file from the active selection.

object[] selection = selection.getfiltered(typeof(object), selectionmode.deepassets);

foreach (object asset in selection) {

string assetpath = assetdatabase.getassetpath((unityengine.object) asset);

if (asset is texture2d) {

// force reimport thru textureprocessor.

assetdatabase.importasset(assetpath);

}

}

buildpipeline.buildassetbundle(selection.activeobject, selection, path, buildassetbundleoptions.collectdependencies | buildassetbundleoptions.completeassets);

selection.objects = selection;

}

}

}

c#

// changes the texture format when building the asset bundle.

using unityengine;

using unityeditor;

public class textureprocessor :assetpostprocessor

{

void onpreprocesstexture() {

textureimporter importer = assetimporter as textureimporter;

importer.textureformat = exportassetbundles.textureformat;

}

}

还可使用assetdatabase.importassetoptions控制资源导入方式。

在生产环境中构建资源包 (assetbundles)

从上述示例可看出,首次使用资源包 (assetbundles) 时,完全可手动构建资源包。但随着工程逐渐增大和资源数量逐渐增加,手动完成此流程则费时费力。一个更好的办法是编写函数构建一个工程的所有资源包 (assetbundles)。例如,可使用文本文件将资源 (asset) 文件映射到资源包 (assetbundle) 文件。

返回资源包 (assetbundles) 简介

相关阅读

文章点评
相关文章
Unity大学【第二期】!