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,完事

相关推荐
叶帆14 天前
【YFIOs】用C#开发硬件之设备上云
开发语言·unity·c#
久数君14 天前
AI三维建模工具“造形家”:地理场景三维化的高效解决方案
unity·glb·ai算法·ai三维建模工具·地图框选·造形家·城市建筑模型
会思考的猴子14 天前
Unity VFX 属性 Postion 和 TargetPostion
unity
hai31524754314 天前
九章编程法 · 猜数字游戏 (GW-BASIC 重构版) *
人工智能·microsoft·游戏引擎·游戏程序
心前阳光15 天前
Unity资源导入之自动化资源导入
unity·自动化·游戏引擎
心前阳光15 天前
Unity之2021.3.45f2c1发布安卓程序遇到的问题
android·unity·游戏引擎
纪纯15 天前
PicoVR Unity Integration SDK 3.4 常用交互API
unity·游戏引擎·vr·pico
龙智DevSecOps解决方案15 天前
3A 游戏优化技术栈:如何打通引擎级分析工具与 DevOps 持续集成管线?
unity·性能优化·游戏开发·技术美术·perforce·unrealengine
葛兰岱尔15 天前
从 SolidWorks 到 Three.js,从 Inventor 到 Unity——制造业CAD模型“几何-语义一体化“转换,不再是天方夜谭!
开发语言·javascript·unity
鼎艺创新科技15 天前
三维电子沙盘中OSGB倾斜摄影数据的加载与渲染
游戏引擎·cocos2d