尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

AB包自定义打包工具细分包策略

AB包自定义打包工具细分包策略
📅 发布时间:2026/7/4 17:00:49

为什么要自己写打包:细分包策略

我们知道Unity内置的打包方案是在右下角指定包名。

我们看到商业项目都在使用细分包策略,一个包装一个预制体,包括它的模型、材质、贴图、脚本。或者装一个图标、大图、声音、动画。一个游戏有上百个甚至上千个包。这样能做到最精准的热更,更新资源时下载最少的数据。

那么如果用Unity内置打包,就选一个预制体,选择它的依赖,全部打上包名。只是这个过程要重复几十上百次。

我们知道预制体路径都是要填在配表的,如果采用细分包,包名也要填到配表。那么在Unity内置工具把这些包名手填一遍就是大量重复劳动。

那么我们自然想到让编辑器工具读取配表去打包。

这里又分为两种策略,可以先根据配表设置包名,也可以直接打包。我们发现官方的工具在浏览包内容、依赖时是很好用的。所以采取工具设置包名-browser检查包内容和依赖-打包的策略。

细分包用内置设置包名后看起来是这样的。很明显不可能手填包名。

依赖处理、防止重复包含

使用

string[] deps = AssetDatabase.GetDependencies(path, true);

获得依赖。我们发现获取的依赖包括资源本身、脚本、着色器(包括内置着色器)。脚本、内置着色器是无法打包的。需要根据类型过滤后再设置包名。可以用白名单或者黑名单过滤。

打印一下所有依赖项的类型:

string[] deps = AssetDatabase.GetDependencies(path, true); foreach (string dep in deps) { importer=AssetImporter.GetAtPath(dep); UnityEngine.Object depObj = AssetDatabase.LoadAssetAtPath <UnityEngine.Object>(dep); MyTools.Print("类型是"+depObj.GetType(), Color.green);

当依赖的包名已经不为空且和主资源包名不同时,需要某种处理。

如果想引起人的注意,直接弹窗,那么弹窗应该有几个选项?保持原名和设置为目标名字。但其实我们想要的是要么打成公共包,要么这些都打成一个包。

我们决定一个资源已经有包名时,放弃修改包名,打印报错。

public static T CheckRes<T>(string path, string ABName) where T : UnityEngine.Object { ABName= ABName.ToLower();//AB包名全是小写 T t = AssetDatabase.LoadAssetAtPath<T>(path); if (t != null) { MyTools.Print($"{path}存在。", Color.cyan); var importer = AssetImporter.GetAtPath(path); if (!string.IsNullOrEmpty(ABName)) { if (importer.assetBundleName != ABName) { importer.assetBundleName = ABName; MyTools.Print($"设置了{path}的AB包名为{ABName}"); } string[] deps = AssetDatabase.GetDependencies(path, true); foreach (string dep in deps) { importer=AssetImporter.GetAtPath(dep); UnityEngine.Object depObj = AssetDatabase.LoadAssetAtPath <UnityEngine.Object>(dep); MyTools.Print("类型是"+depObj.GetType(), Color.green); if (depObj is GameObject||depObj is Texture2D|| depObj is AudioClip) { if (!string.IsNullOrEmpty(importer.assetBundleName) && importer.assetBundleName != ABName) { //处理重复包含 Debug.LogError($"{dep}希望设置包名{ABName},但已经有包名{importer.assetBundleName},请手动处理!"); } else { importer.assetBundleName = ABName; } } } } } else { Debug.LogError($"在{path}找不到{typeof(T)}!!!"); } return t; }

同一个资源被指定2次包名

在配表里遇到了多个物品用一个图标。在批量设置包名时我是直接给Id加_Icon,很难注意到多个道具共用一个图标。

程序会检测出

相关新闻

  • 从零到英雄:3个技巧快速融入TwelveMonkeys开源图像处理社区
  • YOLO目标检测中的CPCA注意力模块优化实践
  • 数据为中心的AI建模:从分布对齐到工业落地的实战方法论

最新新闻

  • 遗传算法工程化实战:编码、适应度与算子的工业级设计
  • 抖音内容高效下载终极方案:从单视频到批量管理的完整工作流
  • 终极指南:如何从零开始打造你的Voron 2.4专业级3D打印机 [特殊字符]
  • 基于EfficientNet的肺癌CT图像分类模型构建
  • 数据科学写作的硬核实践:问题驱动、可验证与工程化沉淀
  • 基于YOLOv8的手写数字与符号识别系统开发实战

日新闻

  • STM32F745VG与MC6470 IMU的高性能姿态控制系统设计
  • 机器不消费,人何以生存
  • AI项目操作手册编写规范与最佳实践

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号