如何实现自己的格式来替换 UnityFS .bundle?

问题描述 投票:0回答:1

我正在使用 Addressables 来构建资产。这个过程创建了一堆 .bundle 文件(UnityFS 格式)。

我想创建自己的资产包格式(例如 IPFS 的 .car)。

是否有任何我可以实现的类来覆盖可用于特定可寻址组的默认 Unity 存档格式?

unity3d addressables
1个回答
0
投票

Addressables 负责构建过程的脚本可以在 Packages/Addressables/Editor/Build/DataBuilders 中找到。它们的引用可以在 Assets/AddressableAssetsData/DataBuilders 的资产文件中找到(第一次设置 Addressables 包时创建的设置)。

可以通过上下文菜单在 DataBuilders/ 中创建新资产:Create->Addressables->Content Builders->Default Build Script。这个新资产参考了构建脚本(可以在 InspectorDebug 视图中更改参考)。

Overridden 脚本(可以放置在 Assets/ 中的任何位置)看起来像:

using System.Collections.Generic;
using UnityEditor.AddressableAssets.Build.BuildPipelineTasks;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine.Build.Pipeline; // For: BundleDetails.
using UnityEngine;

namespace UnityEditor.AddressableAssets.Build.DataBuilders
{
  using Debug = UnityEngine.Debug;
  public class BuildScriptCustomMode : BuildScriptPackedMode
  {

    /// <inheritdoc />
    public override string Name
    {
      get { return "Custom Build Script"; }
    }

    /// Creates a name for an asset bundle using the provided information.
    /// <inheritdoc />
    protected override string ConstructAssetBundleName(AddressableAssetGroup assetGroup, BundledAssetGroupSchema schema, BundleDetails info, string assetBundleName)
    {
      string bundleNameWithHashing = base.ConstructAssetBundleName(assetGroup, schema, info, assetBundleName);
      bundleNameWithHashing = bundleNameWithHashing.Replace(".bundle", ".custom.bundle");
      Debug.Log("bundleNameWithHashing: " + bundleNameWithHashing);
      return bundleNameWithHashing;
    }

    /// <inheritdoc />
    protected override TResult DoBuild<TResult>(AddressablesDataBuilderInput builderInput, AddressableAssetsBuildContext aaContext)
    {
      var genericResult = AddressableAssetBuildResult.CreateResult<TResult>();
      // genericResult = base.DoBuild<TResult>(builderInput, aaContext); // Original build script.
      // Override custom build here...
      // Location of current built files: aaContext.locations.
      return genericResult;
    }
  }
}

其他方法也可以在需要时被覆盖。还没有测试整个过程,但这是一个好的开始。最好的办法是看看

BuildScriptPackedMode
类脚本是如何做到的。

阅读更多:https://docs.unity3d.com/Packages/[email protected]/manual/editor/building-content/BuildingContent.html.

© www.soinside.com 2019 - 2024. All rights reserved.