• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共151篇

    Unity - 游戏引擎

关闭

返回栏目

关闭

返回Unity - 游戏引擎栏目

144 - 热更新 - AssetBundle (AB包)

作者:

贺及楼

成为作者

更新日期:2023-09-17 11:01:35

作用:可以跨越ios、Android 用于传输新数据的包

压缩算法LZMA、LZ4

序列化文件 - Serialized File

资源(Prefet、Object)被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)

源文件 - Resource Files

某些二进制资源(图片、声音)被单独保存,方便快速加载

打包思想(更新的时候不要重复更新就好)

!!一个Materials材质多个物体使用,把材质打一次包,可以减少容量!!
逻辑实体:(所有UI一个包、一个/所有角色一个包、场景模型贴图一个包)
类型:(声音一个包、sharder一个包、模型一个包、材质一个包)
使用分组:(关卡一个包)

会加载出AssetBundle对象

打包流程:

指定AssetBundle标签属性

Materials材质在预览图下方有AssetBundle属性
2个命名空格(例如:大空格.小空格)
大空格(可以直接写,也可以加个斜杠代表文件夹里的):

  1. wall
  2. scene/wall

小空格(版本)

  1. v1v2v3v4v5

通过Unity编辑器打包

Assets文件夹创建Editor文件夹 - CreateAssetBundles.cs

  1. using UnityEditor;
  2. using System.IO;
  3. public class CreateAssetBundles
  4. {
  5. [MenuItem("Assets/Build AssestBundles")]//菜单栏选项调用
  6. static void BuildALLAssetBundles()
  7. {
  8. string dir = "AssetBundles";//路径
  9. if (Directory.Exists(dir) == false)//检测路径是否存在
  10. {
  11. Directory.CreateDirectory(dir);
  12. }
  13. BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.Android);//平台区分的
  14. }
  15. }

压缩方式:
BuildAssetBundleOptions.None
LZMA:压缩率高,加载时间长
BuildAssetBundleOptions.UncompressedAssetBundle
不压缩、包大、加载快
BuildAssetBundleOptions.ChunkBasedCompression
LZ4:指定资源解压

代码创建AB包

菜单栏Assets - Build AssestBundles

查看AB包

Assets文件夹 - 右键 - Show in Explorer - AssetBundles文件夹
.manifest文件可以打开查看资源目录、一一对应

  1. AssetBundles
  2. AssetBundles.manifest

.manifest:

  1. CRC:校验是否完整
  2. Assets:资源路径
  3. Dependencies:依赖本资源的资源

重新打包需要删掉AssestBundles文件夹里的所有文件

加载AB包 - AssetBundle.LoadFromFile - 本地加载

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class LoadFromFileExample : MonoBehaviour
  5. {
  6. void start()
  7. {
  8. AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/scene/wall");
  9. GameObject wallPrefab = ab.LoadAsset<GameObject>("");
  10. Instantiate(wallPrefab);
  11. //object[] objs = ab.LoadAllAssets();
  12. //foreach (object o in objs)
  13. //{
  14. // Instantiate(o);
  15. //}
  16. }
  17. }

一个是加载一个
一个是循环加载全部

加载AB包 - AssetBundle.LoadFromMemoryAsync - 内存里byte数组

加载AB包 - UnityWebRequest - 服务器或者本地缓存(5.3开始)

加载AB包 - WWW.LoadFromCacheOrDownload - 服务器或者本地缓存(5.3前准备弃用)