Unity——浅谈AB包(AssetBundle)
发布日期:2021-05-10 06:02:06 浏览次数:23 分类:精选文章

本文共 1670 字,大约阅读时间需要 5 分钟。

浅谈AB包

在Unity中,资源管理是一个核心任务。与传统的资源加载方式不同,AB包(AssetBundle)提供了一种更加灵活和高效的资源管理方式。本文将从多个角度探讨AB包的使用方法和相关知识。


Unity资源管理

在Unity中,资源可以通过两种方式加载:Resources.Load()AssetBundle

  • Resources.Load():将资源存放在特定文件夹(Resources),通过Resources.Load()方法直接加载。这种方式简单方便,但存在以下问题:

  • 对内存管理造成一定压力。
  • 加载时间较长。
  • 不建议大量使用资源文件,可能导致性能问题。
  • AssetBundle:通过打包资源文件形成可执行的AB包。这种方式解决了内存管理和加载时间的问题,同时支持热更新和资源优化。


什么是AB包

AB包(全称AssetBundle)是Unity用于存储和管理资源的包。通过将资源分布在多个AB包中,可以显著减少运行时内存占用,并支持按需加载资源。

  • 核心优势
    • 支持热更新。
    • Resources文件夹的资源问题得到缓解。
    • 适合大型项目对内存和加载性能要求高的场景。

为什么要使用AB包

  • 热更新需求

    • 需要确保AB包的资源具有唯一性,且检验码一致。
  • 问题总结

    • Resources加载方式对内存和性能有较大负担。
    • 文件打包方式存在优化限制。
    • 不建议大量使用Resources文件夹。

  • AB包打包方法

    在Unity中使用BuildAssetBundles方法打AB包:

    public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);
    • BuildAssetBundleOptions

      • 逐个位代表不同的策略,可通过按位或操作多选。
      • 常用选项:UncompressedAssetBundle(无压缩)、DeterministicAssetBundle(哈希映射及固定ID)。
    • BuildTarget:指定目标平台,因为不同平台的AB包格式不兼容。

    • 打包步骤

    • 确定AB包名和变体名,通过AssetImporter.assetBundleNameAssetImporter.assetBundleVariant设置。
    • 调用BuildAssetBundles,按需设置打包选项。

    AB包的加载方法

    • 从文件加载

      AssetBundle.LoadFromFile(string path)
      • 从文件系统中加载AB包。
    • 从内存加载

      AssetBundle.LoadFromMemory(byte[] binary)
      • 在内存中加载二进制数据,适合缓存和多次加载场景。
    • 从流加载

      AssetBundle.LoadFromStream(Stream stream)
      • 从网络流加载AB包,适用于实时下载和离线下载。
    • WWW加载

      WWW.assetBundle
      • 使用WWW类从网络获取资源包。
    • 资源加载方法

      AssetBundle.LoadAsset(string assetName)
      • 异步与同步加载选项。

    AB包变体与组件

    • AB包变体

      • 变体用于资源分类和定制化加载。
      • 示例:将同一资源(如图)拆分为多个变体(如LowPolyHighPoly Bend)。
    • AB包内部结构

      • AssetBundleFileHeader:存储版本号、压缩方式等。
      • AssetFileHeader:记录资源列表(文件名、偏移、长度)。
      • Asset类文件:包含AssetHeaderTypeTree(可选)、ObjectPathAssetRef
    • .manifest文件

      • 包含AB包的哈希、类型树哈希、依赖关系等信息。

    AB包优化与使用技巧

    优化建议

    • 粒度控制
      • 建议将经常更新的资源单独打包。
        -{{< /div> }}
    上一篇:Mac、移动端的抓包方式和注意事项——Charles
    下一篇:UGUI文图混合排列问题——Horizontal Layout Group和Content Size Fitter

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年05月07日 22时38分57秒