Unity加载AB包

简介: 在 Unity 中加载 AssetBundle(AB 包)涉及文件定位、反序列化和内存管理。本地路径可通过 `Application.dataPath` 或 `Application.persistentDataPath` 获取,结合文件名定位 AB 包。远程 URL 则通过网络请求下载。代码示例展示了从本地和远程加载 AB 包的方法,使用 `UnityWebRequest` 和 `WWW` 类进行资源加载和实例化。

在 Unity 中加载 AssetBundle(AB 包)的原理涉及多个关键步骤,包括 AB 包文件的定位与读取、资源的反序列化以及内存管理等
本地路径:如果 AB 包存储在本地磁盘,开发者需要明确其具体的文件路径。在 Unity 里,可使用Application.dataPath(应用数据路径)、Application.persistentDataPath(可持久化数据路径)等获取本地目录,再结合 AB 包文件名来定位文件。例如,对于存储在持久化数据路径下的 AB 包,可通过以下方式获取完整路径:
csharp
string assetBundlePath = Path.Combine(Application.persistentDataPath, "myAssetBundle");
远程 URL:当 AB 包存放在远程服务器时,需要提供其对应的 URL 地址。借助 Unity 的网络请求功能,可从该 URL 下载 AB 包文件。

两种加载代码如下:

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class Load_AB : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(LoadWWW());
        StartCoroutine(FromWebRequest());
    }
    private IEnumerator FromWebRequest()
    {
        string path = @"http://192.168.1.80:8088/unity/model.ab";
        UnityWebRequest webRequest = UnityWebRequestAssetBundle.GetAssetBundle(path);
        yield return webRequest.SendWebRequest();
        AssetBundle assetBundle = DownloadHandlerAssetBundle.GetContent(webRequest);
        //object obj = assetBundle.LoadAsset("Image");
        //Instantiate((GameObject)obj, FindObjectOfType<Canvas>().transform);
        object[] objects = assetBundle.LoadAllAssets();
        foreach (var item in objects)
        {
            Instantiate((GameObject)item, FindObjectOfType<Canvas>().transform);
        }
        yield return null;
    }

    private WWW Loadab;

    private IEnumerator LoadWWW()
    {
        Loadab = new WWW("http://192.168.1.80:8088/unity/model.ab");  // 路径可以根据自己需求来修改
        yield return Loadab;
        if (Loadab.error != null)
        {
            Debug.Log(Loadab.error);
        }
        else
        {
            object[] objects = Loadab.assetBundle.LoadAllAssets();
            foreach (var item in objects)
            {
                Instantiate((GameObject)item, FindObjectOfType<Canvas>().transform);
            }
        }
    }
}
相关文章
|
Windows
[✔️]exe引入ffmpeg后,在win7上应用程序无法正常启动(0xc0000005)
[✔️]exe引入ffmpeg后,在win7上应用程序无法正常启动(0xc0000005)
1131 0
|
22小时前
|
存储 算法 API
Unity打包AB包
在 Unity 中,AssetBundle(AB 包)用于存储和管理游戏资源,支持动态加载。开发者需为资源标记 AssetBundle 名称,Unity 会自动处理依赖关系并进行序列化。资源被打包成二进制格式,并可选择压缩算法(如 LZMA 或 LZ4)。通过 BuildPipeline API 可控制打包过程,包括设置目标平台(如 WebGL、PC)。示例代码展示了如何使用 BuildPipeline.BuildAssetBundles 方法打包 AB 包并输出到 StreamingAssets 文件夹中。
|
6月前
|
缓存 Go
Go引用包版本更新但是被引用的包的子包并没有出现在vendor中的问题和解决方案
文章讨论了在Go模块项目中升级依赖包版本时遇到的子包未出现在vendor目录的问题,并提供了直接删除旧版本引用并重新执行`go mod vendor`的解决方案。
66 0
|
8月前
|
存储 缓存 开发工具
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
初识Unity——unity的安装以及工程介绍(安装unity hub、版本选择、中文设置、安装编辑器、Assets文件、Library 文件、[ProjectName].sln 文件)
1811 0
|
9月前
|
缓存 API 图形学
【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)
【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)
368 0
|
9月前
|
Python
Python 使用 pyinstaller 打包成 exe/app 文件,并支持传入外部参
Python 使用 pyinstaller 打包成 exe/app 文件,并支持传入外部参
294 0
|
算法 Java 编译器
Unity 之 获取发布APK的SHA1值步骤详解
Unity获取发布APK的SHA1值步骤详解, 以Unity2019为例进行解析。
754 0
Unity 之 获取发布APK的SHA1值步骤详解
|
图形学
Unity热更新——AB包的基本操作
Unity热更新——AB包的基本操作
578 1
|
图形学 Windows
Unity热更新——AB包
Unity热更新——AB包
387 0
|
传感器 编解码 5G
Unity配置Android开发环境与第一个Demo
ARFoundation之路-环境配置(Android)
590 0
Unity配置Android开发环境与第一个Demo