AB包(Asset Bundle)是一种 Unity 引擎中用于打包资源的机制。将游戏中的资源(如纹理、模型、音频等)打包成AB包可以带来诸多优势,包括降低内存占用、提高加载速度、支持资源的动态加载和热更新等
1. AB包的概念
-
资源打包:将游戏中的资源文件(如图片、音频、视频、预制体等)打包成一个或多个AB包。
-
独立加载:AB包是一种独立的资源单元,可以单独加载和卸载,从而实现资源的动态加载和卸载。
2. AB包的优势
-
资源管理:通过AB包可以更加灵活地管理资源,根据需要加载和卸载资源,避免一次性加载所有资源造成内存浪费。
-
减少内存占用:只加载需要的资源,可以有效减少游戏的内存占用,提高游戏性能。
-
支持热更新:AB包使得游戏资源可以进行热更新,更新游戏内容而无需重新发布整个游戏。
3. AB包的使用
-
打包资源:通过Unity的打包工具(如AssetBundleManifest)可以将资源打包成AB包,可以设置资源的标识符和依赖关系。
-
加载资源:在游戏中可以通过代码动态加载AB包,获取其中的资源并实例化、显示或播放。
-
卸载资源:当资源不再需要时,可以卸载AB包以释放资源占用的内存。
4. AB包的注意事项
-
依赖关系:在打包AB包时要注意资源之间的依赖关系,确保资源加载顺序正确。
-
版本管理:为了支持热更新,需要进行版本管理,确保新版本的资源能够正确加载并替换旧版本。
-
性能优化:合理使用AB包可以提高游戏性能,但过度使用也可能造成资源加载时间过长,需要权衡利弊。
总结
AB包在游戏开发中扮演着重要角色,能够有效管理和优化游戏资源,主要实现于游戏的热更新,提升游戏性能和开发效率。熟练使用AB包可以帮助开发者更好地控制游戏的资源管理和加载过程
AB包中主要目录不同的作用
1.Assets目录
-
作用:Assets 目录是 Unity 项目中最重要的目录之一,其中包含了项目的所有资源文件,如场景、脚本、模型、纹理、音频等。
-
AB包关联:在打包 AB 包时,通常会从 Assets 目录中选择需要打包的资源,并将其打包成 AB 包。
-
资源引用:Assets 目录中的资源可以直接在 Unity 编辑器中使用,并与场景、脚本等进行关联。
2.AssetBundles目录
-
作用:AssetBundles 目录通常用于存储打包好的 AB 包,这些 AB 包可以包含游戏中需要的各种资源。
-
AB包管理:在开发过程中,可以将打包好的 AB 包保存在 AssetBundles 目录中,并在游戏运行时动态加载这些 AB 包。
-
版本管理:AssetBundles 目录中的 AB 包可以根据版本进行管理,支持热更新和动态加载新版本的资源。
3.StreamingAssets目录(S目录)
StreamingAssets
是一个特殊的文件夹,用于存放需要打包到应用程序中的资源。这些资源在构建应用时会被直接复制到应用程序的数据文件夹中,可以通过路径 Application.streamingAssetsPath
来访问
-
作用:StreamingAssets 目录用于存储游戏在发布后需要动态加载的资源,这些资源通常是不需要经过压缩的原始资源,一般是用来游戏开始的时候,存放一些加载的界面,例如防沉迷,登录界面,主界面内容,存储的内容较小
-
AB包加载:在游戏运行时,可以通过路径
Application.streamingAssetsPath
访问 StreamingAssets 目录中的资源,包括 AB 包。 -
热更新:StreamingAssets 目录通常用于存储需要热更新的资源,游戏可以动态加载这些资源而无需重新发布整个游戏。
存储静态资源
StreamingAssets
目录通常用于存储应用程序运行时需要访问的静态资源,例如文本文件、配置文件、初始关卡数据等。
Asset Bundle 初始加载
- Asset Bundles 可以被放置在
StreamingAssets
目录中,用于应用程序的初始加载。这些 Asset Bundles 在构建时会被打包到应用程序中,可以通过Application.streamingAssetsPath
加载。
跨平台资源
StreamingAssets
中的资源在不同平台上的路径是一致的,这使得开发者可以跨平台地访问这些资源,而不需要担心路径的差异。
读取外部文件
- 在某些情况下,
StreamingAssets
目录也可以用于读取用户可能添加的额外文件,例如自定义关卡、模型等。这些文件可以被应用程序读取和使用。
保留资源结构
- 由于
StreamingAssets
中的资源会被直接打包到应用程序中,保留资源结构和路径可以帮助应用程序更轻松地访问这些资源。
简易代码介绍:
string filePath = Path.Combine(Application.streamingAssetsPath, "data.json");
// 加载 StreamingAssets 目录下的文本文件
string jsonText = File.ReadAllText(filePath);
StreamingAssets目录总结:
通过利用 StreamingAssets
目录,开发者可以方便地管理应用程序在打包时需要包含的静态资源,包括配置文件、初始加载的 Asset Bundles 等
4.PersistentDataPath目录(P目录)
-
持久性存储:
Application.persistentDataPath
目录在游戏运行期间持久保存数据,这意味着在游戏运行时写入的数据将在游戏关闭后仍然存在,直到被显式删除。
-
保存用户数据:
- 可以将用户生成的数据(如配置文件、游戏进度、用户设置等)保存在
Application.persistentDataPath
目录下,以便在下次游戏启动时加载和使用这些数据。
- 可以将用户生成的数据(如配置文件、游戏进度、用户设置等)保存在
-
下载资源存储:
- 在某些情况下,游戏需要动态下载资源(例如 Asset Bundles),这些资源可以被保存在
Application.persistentDataPath
目录中,以便在需要时加载。
- 在某些情况下,游戏需要动态下载资源(例如 Asset Bundles),这些资源可以被保存在
-
热更新支持:
- 对于需要热更新的游戏,可以将新版本的资源存储在
Application.persistentDataPath
目录中,并在需要时动态加载这些资源,实现热更新功能。 - 下载的 AB 包可以被保存在
Application.persistentDataPath
目录中。这样可以避免重复下载,提高游戏的加载速度,并允许离线访问这些资源。
- 对于需要热更新的游戏,可以将新版本的资源存储在
-
跨平台兼容性:
Application.persistentDataPath
目录的路径在不同平台上是统一的,这意味着开发人员可以跨平台使用这个路径来访问持久化数据
- 简易代码实现:
// 从 persistentDataPath 加载 Asset Bundle
string path = Path.Combine(Application.persistentDataPath, "MyAssetBundle");
AssetBundle assetBundle = AssetBundle.LoadFromFile(path);
persistentDataPath目录总结:
通过 Application.persistentDataPath
目录,开发者可以方便地管理和存储游戏中的持久化数据,包括用户配置、进度、下载资源等,为游戏的持久性和数据管理提供了便利
附加:压缩的步骤