Unity Addressable 实现Build时自定义剔除资源组

核心原理

重写BuildScriptBase的ProcessGroup,让其在需要剔除的时候返回string.Empty或null即可

代码实现

先写一个Schema来给需要管理的Group上标记

csharp 复制代码
using UnityEditor.AddressableAssets.Settings;

public class BuildExclusionSchema : AddressableAssetGroupSchema
{
    public enum FilterType { 
        Normal,
        TestOnly,
        ReleaseOnly,
    }
    public FilterType filterType = FilterType.Normal;
    public bool ShouldExclude() { 
        if(filterType == FilterType.Normal)return false;
        if (filterType == FilterType.TestOnly) return !CommonData.isTest;
        if (filterType == FilterType.ReleaseOnly) return CommonData.isTest;
        return false;
    }
}

随便写的,具体自己的项目里想怎么改怎么改

然后是核心,自定义一个AA的BuildMode

这里直接继承默认的BuildScriptPackedMode

csharp 复制代码
using UnityEditor.AddressableAssets.Build.DataBuilders;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;
[CreateAssetMenu(fileName = "BuildScriptPackedFilterMode.asset", menuName = "Addressables/Custom Build/Filter Build Script")]
public class BuildScriptPackedFilterMode : BuildScriptPackedMode {
    public override string Name => "Filter Build Script";
    protected override string ProcessGroup(AddressableAssetGroup assetGroup, AddressableAssetsBuildContext aaContext) {
        var customFilter = assetGroup.GetSchema<BuildExclusionSchema>();
        if (customFilter != null && customFilter.ShouldExclude()) {
            Debug.Log($"[AA Filter Build] 剔除资源组: {assetGroup.name}");
            return null;
        }
        else { 
            return base.ProcessGroup(assetGroup, aaContext);
        }
    }
}

记得重写Name属性,在各种面板上显示时都要用的

准备工作

先给对应的Group添加对应的Schema

选择对应的模式

然后创建刚刚自定义的Build Script的asset资源并加进AA的Setting里

这样,就可以在AA的Build栏下看见我们自定义的BuildScript了

点击执行

注意事项

build会触发recompile所以控制台里的 clear on compile要是勾选了,对应的log就会被清掉导致看不见。

AA有很多个自带的Build Script,而且Build游戏和使用Update a Previous Build都会执行Build Script,如何确保它执行的是我们想要的Script呢?

首先,AA有一个active Index,保存了上次手动执行的Build Script的下标,在debug窗口就能看见
这是我执行了Filter Build,所以下标是3,也就是最后我加进去的那个

那么很简单了,要么你把自带的都移除出Builders,只剩一个就好了,要么别乱点其他的Build,完事

相关推荐
董董女友6 小时前
unity mcp 配置指南
unity·游戏引擎
垂葛酒肝汤11 小时前
Unity的可视化网格和文字标签
unity·游戏引擎
魔士于安12 小时前
Unity UI图片 复活节UI,卡通风格
游戏·ui·unity·游戏引擎·材质·贴图
weixin_4239950012 小时前
unity 团结开发小游戏,加载AssetBundles(第二种方法)
unity·游戏引擎
魔士于安12 小时前
unity 卡通风整套资源 小鸟N套带动作+一套卡通风村落 和 相关道具+落叶粒子效果 buildin
游戏·unity·游戏引擎·贴图·模型
伽蓝_游戏14 小时前
第一章:解构游戏资源
游戏·unity·性能优化·c#·游戏引擎·游戏程序·assetbundle
星辰徐哥15 小时前
Unity C#入门:Visual Studio与Unity的关联配置
unity·c#·visual studio
Sparkle Star15 小时前
Unity VRTK4包导入和依赖关系
unity·游戏引擎
WiChP16 小时前
【V0.1B7】从零开始的2D游戏引擎开发之路
游戏引擎
Sparkle Star19 小时前
Unity VRTK4+SteamVR传送组件使用和层级关系
unity·游戏引擎