Unity中使用AssetBundle打包与加载的注意事项

这篇具有很好参考价值的文章主要介绍了Unity中使用AssetBundle打包与加载的注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、使用AssetBundle进行打包与加载
个人觉得可以参考以下两篇博客,这个网上相关教程很多,还不明白的可以去百度,或者给我留言。
Unity 打包与加载AssetBundle(加载对应的依赖)
Unity中的AssetBundle
二、使用AssetBundle进行加载的时候注意事项:
注意事项一:AssetBundle名字和设置AssetBundle名字的预制体这两个名字都要和C#代码方法中的参数一一对应。
如果不对应的话,在Unity的控制台会报这个错误:ArgumentException: The Object you want to instantiate is null.
Unity中使用AssetBundle打包与加载的注意事项

1、这是我要打包的预制体。
Unity中使用AssetBundle打包与加载的注意事项
可以看出TestCapsule这个预制体对应的AssetBundle名字我设置成为test_1
2、我是采用Unity官方提供的AB包管理插件AssetBundle Browser 进行打包。读者可以采用自定义脚本的方式进行打包,个人只是觉得插件打包的这种方式很好用。
Unity中使用AssetBundle打包与加载的注意事项
点击Build按钮后,会在项目Assets文件夹下生成一个StreamingAssets文件夹,这个StreamingAssets文件夹里面就是打出来的AssetBundle文件。
Unity中使用AssetBundle打包与加载的注意事项
Unity中使用AssetBundle打包与加载的注意事项

点击Build按钮后,在项目Assets文件夹同级目录还有一个AssetBundles文件夹,这个AssetBundles文件夹里面也是打出来的AssetBundle文件。
Unity中使用AssetBundle打包与加载的注意事项

Unity中使用AssetBundle打包与加载的注意事项

注意:StreamingAssets文件夹和AssetBundles文件夹里面的AssetBundle文件内容都是一样的。

3、利用C#代码加载AssetBundle资源包(本地相对路径加载)。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public class TestABLoad : MonoBehaviour
{
    void Start()
    {
        AssetBundle ab = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "test_1"));
        GameObject cube = ab.LoadAsset("TestCapsule") as GameObject;//LoadAsset方法中参数为导出前Prefab名字
        Instantiate(cube);//生成
    }
}

这里需要注意的是AssetBundle.LoadFromFile方法中的参数为打出来的AssetBundle文件路径。
Unity中使用AssetBundle打包与加载的注意事项
也就是Assets目录下StreamingAssets目录中,也就是test_1这个文件的全名(有后缀名的话要包括后缀名,没有后缀名可以不包括)。
Unity中使用AssetBundle打包与加载的注意事项
还有下图中LoadAsset方法中的参数是要和设置test_1这个AssetBundle文件名的预制体名字保持一致。
Unity中使用AssetBundle打包与加载的注意事项
Unity中使用AssetBundle打包与加载的注意事项
4、保存脚本后,回到Unity中,把这个TestABLoad脚本挂载到游戏中任意一个游戏物体上面,运行游戏之后,可以看到test_1这个资源包对应的游戏资源就被加载出来了。
Unity中使用AssetBundle打包与加载的注意事项
注意事项二:利用C#代码加载本地绝对路径AssetBundle资源包
1、上面也提到过,项目Assets文件夹同级目录还有一个AssetBundles文件夹,这个AssetBundles文件夹里面也是打出来的AssetBundle文件。StreamingAssets文件夹和AssetBundles文件夹里面的AssetBundle文件内容都是一样的。所以也可以使用AssetBundles文件夹里面的AssetBundles文件进行加载。
Unity中使用AssetBundle打包与加载的注意事项
可以看出来这个文件夹不在项目Assets目录下,所以要使用绝对路径进行加载。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public class TestABLoad : MonoBehaviour
{
    void Start()
    {
        var myLoadedAssetBundle = AssetBundle.LoadFromFile("G:\\C++ Open Sources Project\\NoahGameFrameClient\\UnityDemo\\AssetBundles\\StreamingAssets\\test_1");
        if (myLoadedAssetBundle == null)
        {
            Debug.Log("Failed to load AssetBundle!");
            return;
        }
        var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("TestCapsule");
        Instantiate(prefab);
    }
}

2、保存脚本后,回到Unity中,把这个TestABLoad脚本挂载到游戏中任意一个游戏物体上面,运行游戏之后,可以看到test_1这个资源包对应的游戏资源就被加载出来了。
Unity中使用AssetBundle打包与加载的注意事项
3、但我这做了一个小测试,把这个TestABLoad脚本挂载到我本地的另一个Unity项目场景中的一个游戏物体上,游戏运行后,对应的资源并没有加载出来,并且会报错。所以由此可知,X项目打出来的AssetBundles文件就只能X项目进行使用,其他项目并不能进行使用。
Unity中使用AssetBundle打包与加载的注意事项
Unity中使用AssetBundle打包与加载的注意事项
注意事项三:三种压缩方式的比较:
NoCompression:不压缩,解压快,包较大,不建议使用。
LZMA: 压缩最小,解压慢,用一个资源要解压包下所有资源。
LZ4: 压缩稍大,解压快,用什么解压什么,内存占用低,一般建议使用这种。

1、就拿我要打包的这个预制体为例,可以看出这个预制体文件占用为3KB
Unity中使用AssetBundle打包与加载的注意事项

Unity中使用AssetBundle打包与加载的注意事项
2、当我选择NoCompression不压缩,解压快,包较大,不建议使用的这种方式,进行打包,可以看出,打包出来的文件占用为138KB
Unity中使用AssetBundle打包与加载的注意事项

Unity中使用AssetBundle打包与加载的注意事项
3、当我选择LZMA:压缩最小,解压慢,用一个资源要解压包下所有资源的这种方式,进行打包,可以看出,打包出来的文件占用为28KB
Unity中使用AssetBundle打包与加载的注意事项
Unity中使用AssetBundle打包与加载的注意事项
4、当我选择LZ4: 压缩稍大,解压快,用什么解压什么,内存占用低,一般建议使用这种的这种方式,进行打包,可以看出,打包出来的文件占用为45KB
Unity中使用AssetBundle打包与加载的注意事项
Unity中使用AssetBundle打包与加载的注意事项
注意事项四:删除test_1这个AssetBundle资源包对应的TestCapsule预制体,项目运行后还能正常加载出来TestCapsule预制体。
1、这是test_1这个AssetBundle资源包对应的TestCapsule预制体。
Unity中使用AssetBundle打包与加载的注意事项
2、把这个TestCapsule预制体从当前项目中删除掉。
Unity中使用AssetBundle打包与加载的注意事项
3、把上面相对路径或者绝对路径TestABLoad脚本挂载到场景中的某一个游戏物体上面,运行游戏之后,可以看到test_1这个资源包对应的游戏资源就被加载出来了。

Unity中使用AssetBundle打包与加载的注意事项
这是使用本地绝对路径进行加载。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public class TestABLoad : MonoBehaviour
{
    void Start()
    {
        var myLoadedAssetBundle = AssetBundle.LoadFromFile("G:\\C++ Open Sources Project\\NoahGameFrameClient\\UnityDemo\\AssetBundles\\StreamingAssets\\test_1");
        if (myLoadedAssetBundle == null)
        {
            Debug.Log("Failed to load AssetBundle!");
            return;
        }
        var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("TestCapsule");
        Instantiate(prefab);
    }
}

接下来,我们使用本地相对路径进行加载,运行游戏之后,可以看到test_1这个资源包对应的游戏资源就被加载出来了。
Unity中使用AssetBundle打包与加载的注意事项

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public class TestABLoad : MonoBehaviour
{
    void Start()
    {
        AssetBundle ab = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "test_1"));
        GameObject cube = ab.LoadAsset("TestCapsule") as GameObject;//LoadAsset方法中参数为导出前Prefab名字
        Instantiate(cube);//生成
    }
}

由以上可知,资源的加载并不是依赖于test_1这个AssetBundle资源包对应的预制体TestCapsule,而是依赖于对应的test_1这个AssetBundle资源包。文章来源地址https://www.toymoban.com/news/detail-501522.html

到了这里,关于Unity中使用AssetBundle打包与加载的注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Maven引用本地jar包以及打包发布注意事项

    1、Maven引用本地jar包 首先在resources目录下创建名为【lib】的文件夹,然后将本地jar包放入该文件夹下,如图  然后在pom文件中引用该jar包 2、maven编译时找不到本地引用的jar包 在maven编译完成后,运行jar包的时候报错找不到本地引用的jar包,需要在pom文件中build中的【spring-b

    2023年04月09日
    浏览(102)
  • Unity学习笔记--File.ReadAllLines和File.ReadAllText的使用以及注意事项(一定要看到最后!!!)

    最近在做文件存储以及读取的时候,需要用到C#给我们提供的类: File 具体使用方法可以看官方文档:C# File 类 这篇文章只会说 File.ReadAllLines 和 File.ReadAllText 的使用以及注意事项 Tips:(一定要看到最后!!!) 一、File.ReadAllLines 重载 操作 ReadAllLines(String) 打开一个文本文件

    2024年02月02日
    浏览(44)
  • Unity 2D精灵分割图片注意事项

    ** ** 1.导入的图片必须是png格式(其他格式或许可以,但是以现在的水平只能了解到使用png是不出错的) 2.导入图片后,将图片类型改为Sprite(2D and UI),Sprite Mode 改为Multiple,其中Sprite可视情况而定,一般导入的一张图片含有很多要分割的UI就选Multiple,如果只有一个可默认为S

    2024年02月11日
    浏览(41)
  • Linux tar命令教程:文件打包和压缩的神器(附案例详解和注意事项)

    tar(Tape ARchive),用于在linux中打包和备份文件。它可以将多个文件和目录打包成一个tar文件,也可以从tar文件中提取文件和目录。此外,它还可以与gz,bzip2,xz等压缩工具结合使用,进行文件和目录的压缩和解压。 tar命令在各个Linux发行版中均通用。包括但不限于 Ubuntu、

    2024年01月17日
    浏览(59)
  • Unity初学注意事项,以及最新如何删除云端项目

    作为一个对好玩的事感兴趣的人 近段时间我开始学习Unity了 首先呢,我们得先了解Unity是用于开发游戏的一个开源软件(当然他的专业版还是要收费的,这里指的个人版,初学者都是够用的,个人版开发的游戏也可以发布,只要游戏所赚的金额不超过100000元都是可以不用换的

    2024年02月07日
    浏览(49)
  • Unity-AssetBundle Browser 打包和加载

    进入unity手册中,搜素 Unity Asset Bundle Browser 工具,选择你使用的版本号,根据显示出的操作进行资源导入即可。 注:有的版本可能没有资源链接,可以百度一下有很多。 1、制作预制体(省略)  2、选择一个预制体,在Inspector窗口下方,设置预制体的ab包名(包名只能为小写字

    2024年04月13日
    浏览(37)
  • [游戏开发][Unity]Assetbundle打包与资源加载框架

    我会分三个篇章写整个框架分别是: AB打包篇 AB下载篇 AB加载篇 整个框架内容比较多,属于企业级方案,涉及到增量打包、打包策略、AB包下载、边玩边下、资源管理系统,资源加载系统等功能。 Unity小白看本系列文章可能比较吃力。如果我哪里写的不好,影响理解了,欢迎

    2024年02月13日
    浏览(55)
  • Unity3D开发流程及注意事项

    使用Unity3D开发游戏需要遵循一定的流程和注意事项,以确保项目的顺利进行并获得良好的结果。以下是一般的游戏开发流程以及一些注意事项,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 游戏开发流程: 1.概念和计划阶段

    2024年02月09日
    浏览(48)
  • Unity AssetBundle批量打包、加载(场景、Prefab)完整流程

    1、文章介绍 2、具体思路和写法         (1)AB包的打包         (2)AB包的加载         (3)AB包卸载 3、结语 本篇博客主要起记录和学习作用,简单的介绍一下AB包批量的打包和加载AB包的方式,若各位同学有幸看到本篇博客,希望能够对你有所帮助。 (1)

    2024年02月04日
    浏览(43)
  • Unity发布抖音小游戏的一些注意事项

    使用 webgl模式 发布抖音小游戏的一些注意事项 1.打包 使用webgl模式打包抖音小游戏,会因为找不到aapt工具导致打包失败 提示: aapt检查失败: sdk/build-tools/版本号。 解决方法:再unity hub里添加Android Build Support  2.黑屏问题 相机的HDR设为off 3.Text字体不见的问题 不能用unity自带的

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包