我正在使用 Addressables 来构建资产。这个过程创建了一堆 .bundle 文件(UnityFS 格式)。
我想创建自己的资产包格式(例如 IPFS 的 .car)。
是否有任何我可以实现的类来覆盖可用于特定可寻址组的默认 Unity 存档格式?
Addressables 负责构建过程的脚本可以在 Packages/Addressables/Editor/Build/DataBuilders 中找到。它们的引用可以在 Assets/AddressableAssetsData/DataBuilders 的资产文件中找到(第一次设置 Addressables 包时创建的设置)。
可以通过上下文菜单在 DataBuilders/ 中创建新资产:Create->Addressables->Content Builders->Default Build Script。这个新资产参考了构建脚本(可以在 Inspector 的 Debug 视图中更改参考)。
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
类脚本是如何做到的。