构建资源包 有三种类函数可用于构建资源包 (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) 简介 |