【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)

这篇具有很好参考价值的文章主要介绍了【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需要源码及依赖请点赞关注收藏后评论区留言私信~~~

AssetBundle最重要的操作就是AssetBundle打包 下载 加载以及卸载 下面就来了解一下AssetBundle的常用操作

1:AssetBundle打包

AssetBundle打包主要用到下面两个API

BuildAssetBundles(string outputPath,AssetBundleBuild[] builds,

BuildAssetBundleOptions assetBundleOptions,BuildTarget targetPlatform);

BuildAssetBundles(string outputPath,BuildAssetBundleOptions assetBundleOptions,BuildTatget targetPlarform);

 下面新建一个PackBundles.cs脚本 放入Editor文件夹中 代码如下

using System.Collections.Generic;
using System.IO;
using UnityEditor;

public class PackBundles : Editor
{
    //选定资源打包
    [MenuItem("PackBundles/PackBundles")]
    static void PutBundleAssetes()
    {
        //初始化一个AssetBundleBuild表
        List<AssetBundleBuild> buildMap = new List<AssetBundleBuild>();
        AssetBundleBuild build = new AssetBundleBuild();
        //设置AssetBundleBuild的名字和资源路径
        build.assetBundleName = "tempImg.unity3d";
        build.assetNames = new[] { "Assets/Textures/tempImg.jpg" };
        //添加进表
        buildMap.Add(build);

        //将这些资源包放在一个名为ABs的目录下        
        string assetBundleDirectory = "Assets/ABs";
        //如果目录不存在,就创建一个目录        
        if (!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        //资源打包
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, buildMap.ToArray(), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
    }
}

全部资源打包

进行全部资源打包前需要先设置每个需要打包的资源的属性 然后我们修改PackBundles.cs脚本 实现添加选定资源打包盒全部资源打包功能

using System.Collections.Generic;
using System.IO;
using UnityEditor;

public class PackBundles : Editor
{
    //选定资源打包
    [MenuItem("PackBundles/PackBundles")]
    static void PutBundleAssetes()
    {
        //初始化一个AssetBundleBuild表
        List<AssetBundleBuild> buildMap = new List<AssetBundleBuild>();
        AssetBundleBuild build = new AssetBundleBuild();
        //设置AssetBundleBuild的名字和资源路径
        build.assetBundleName = "tempImg.unity3d";
        build.assetNames = new[] { "Assets/Textures/tempImg.jpg" };
        //添加进表
        buildMap.Add(build);

        //将这些资源包放在一个名为ABs的目录下        
        string assetBundleDirectory = "Assets/ABs";
        //如果目录不存在,就创建一个目录        
        if (!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        //资源打包
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, buildMap.ToArray(), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
    }
    //全部打包
    [MenuItem("PackBundles/AllPackBundles")]
    static void PutBundleAssetesAll()
    {
        //将这些资源包放在一个名为ABs的目录下        
        string assetBundleDirectory = "Assets/ABs";
        //如果目录不存在,就创建一个目录        
        if (!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    }
}

在菜单栏中选择PackBundles->AllPachBundles命令 可以在Project视图中看到ABs文件夹中生成的AssetBundle文件 可以看到打包出来的文件有一个特点,就是每个AssetBundle资源包都会有一个后缀名为.manifest的文件

assetbundle文件用什么打开,Unity 3D,unity,游戏引擎,3d,c#,AssetBundle

2:Manifest文件

Manifest文件其实是AssetBundle资源文件的依赖关系以及对包的信息的记录文件,根据这个文件可以获取某个包的依赖关系,或者判断所获取包的大小,效验码是否是正常的 将这个文件使用文本编辑器打开后 可以看到文件内容

CRC: 效验码 通过其检查包是否完整

Assets:表示包里包含多少资源

Dependencies:表示包有哪些依赖

3:AssetBundle文件上传 

接下来使用IIS搭建本地服务器

1:在Windows中打开如下界面

assetbundle文件用什么打开,Unity 3D,unity,游戏引擎,3d,c#,AssetBundle

2:打开IIS 新建网站 设置网站名称 端口号以及物理路径 将物理路径设置为存放AssetBundle资源文件的路径

assetbundle文件用什么打开,Unity 3D,unity,游戏引擎,3d,c#,AssetBundle

 3:设置IIS属性

4:将生成的AssetBundle文件放入设置的物理路径的文件夹中 然后删除后缀名为.meta的文件

assetbundle文件用什么打开,Unity 3D,unity,游戏引擎,3d,c#,AssetBundle

 4:AssetBundle加载

AssetBundle的加载方式有以下四种

AssetBundle.LoadFromFile:从本地加载

AssetBundle.LoadFromMemory 从内存加载

WWW.LoadFromCacheOrDownload 加载后放在缓存备用

UnityWebRequest 从服务器加载

下面新建一个脚本用于加载AssetBundle文件

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

public class LoadBundles : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(Load());
    }

    IEnumerator Load()
    {
        //从远程服务器上进行下载和加载
        string url = "http://localhost:8090/cube.unity3d";
        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
        //等待文件下载完毕
        yield return request.SendWebRequest();
        AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
        //加载AssetBundle资源
        AssetBundleRequest ABrequest = bundle.LoadAssetAsync("Cube.prefab", typeof(GameObject));
        //根据资源生成文件
        Instantiate(ABrequest.asset as GameObject, new Vector3(0f, 0f, 0f), Quaternion.identity);
        yield return ABrequest;
        //释放资源
        request.Dispose();
    }
}

 5:AssetBundle卸载

AssetBundle的卸载方式同样有四种 新建测试脚本代码如下

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

public class LoadBundles : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(Load());
    }

    IEnumerator Load()
    {
        //从远程服务器上进行下载和加载
        string url = "http://localhost:8090/cube.unity3d";
        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
        //等待文件下载完毕
        yield return request.SendWebRequest();
        AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);
        //加载AssetBundle资源
        AssetBundleRequest ABrequest = bundle.LoadAssetAsync("Cube.prefab", typeof(GameObject));
        //根据资源生成文件
        GameObject go = Instantiate(ABrequest.asset as GameObject, new Vector3(0f, 0f, 0f), Quaternion.identity);
        yield return ABrequest;
        //释放资源
        request.Dispose();

        //卸载资源 包含所有Load创建出来的对象
        bundle.Unload(true);
        //卸载资源 除了Load创建出来的对象
        bundle.Unload(false);
        //释放已加载的资源Object
        Resources.UnloadAsset(go);
        //卸载所有没有被场景引用的资源对象
        Resources.UnloadUnusedAssets();
    }
}

6:AssetBundle打包工具

我们可以使用Unity AssetBundle Browser Tool插件 来查看AssetBundle 帮助打包AssetBundle和查看AssetBundle内容

创作不易 觉得有帮助请点赞关注收藏~~~文章来源地址https://www.toymoban.com/news/detail-689611.html

到了这里,关于【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity AssetBundle批量打包、加载(场景、Prefab)完整流程

    Unity AssetBundle批量打包、加载(场景、Prefab)完整流程

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

    2024年02月04日
    浏览(10)
  • Unity资源管理(AssetBundle加载和卸载)及内存管理(内存的申请和释放)

    Unity资源管理(AssetBundle加载和卸载)及内存管理(内存的申请和释放)

    GameObject, Transform, Mesh, Texture, Material, Shader, Script和各种其他Assets。 静态引用,在脚本中加一个public GameObject变量,在Inspector面板中拖一个prefab到该变量上,然后在需要引用的地方Instantiate; Resource.Load,资源需要放在Assets/Resources目录下; AssetBundle.Load, Load之后Instantiate。 GameOb

    2024年02月16日
    浏览(10)
  • Unity中使用AssetBundle打包与加载的注意事项

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

    一、使用AssetBundle进行打包与加载 个人觉得可以参考以下两篇博客,这个网上相关教程很多,还不明白的可以去百度,或者给我留言。 Unity 打包与加载AssetBundle(加载对应的依赖) Unity中的AssetBundle 二、使用AssetBundle进行加载的时候注意事项: 注意事项一:AssetBundle名字和设置

    2024年02月11日
    浏览(6)
  • Unity3D打包Assetbundle丢失Shader问题

    Unity3D打包Assetbundle丢失Shader问题

    详情见:https://www.pianshen.com/article/5391338163/ 1、Unity3D在打包Assetbundle时,可能会遇到Shader丢失的问题,解决方法:打开 Edit-Project Settings-Graphics,在Always Included Shaders列表添加上所需的shader ,再打包即可。 2、参考 3、原文复制 Scriptable RenderLoop settings This is an experimental setting wh

    2023年04月22日
    浏览(36)
  • Unity 3D模型展示框架篇之资源打包、加载、热更(二)

    Unity 3D模型展示框架篇之资源打包、加载、热更(二)

    本项目将整合之前Unity程序基础小框架专栏在Unity 3D模型展示项目基础上进行整合,并记录了集成过程中对原脚本的调整过程。增加了Asset Bundle+ILRuntime热更新技术流程。 本篇文章介绍如何对更新进行代码检测以及使用更新资源服务器进行资源热更新。 创建登录UI预制体 Log

    2023年04月20日
    浏览(14)
  • [游戏开发][Unity]Assetbundle打包篇(1)打包流程介绍

    [游戏开发][Unity]Assetbundle打包篇(1)打包流程介绍

    打包与资源加载框架目录 先捋一下打AB包的整体思路,首先,Unity4.6版本之后就使用了全新的打包接口 无论是全新打包还是增量打包都是使用这个API,所以一切的一切,都要围绕这个API开始讲起。 该API有四个参数 string outputPath AssetBundleBuild[] builds BuildAssetBundleOptions assetBundle

    2024年02月10日
    浏览(10)
  • [游戏开发][Unity]Assetbundle打包篇(2)打包资源配置篇

    [游戏开发][Unity]Assetbundle打包篇(2)打包资源配置篇

    打包与资源加载框架目录 可视化配置的方式有很多种,Json、XML、以及Unity内置的ScriptableObject序列化 配置文件里要有哪些内容呢,很显然,最重要的就是目标文件路径,其次是权重类型,权重类型有:必要打包型、被引用打包型、忽略类型。为何会有忽略类型呢,是因为我们

    2024年02月09日
    浏览(22)
  • Unity 解决SpriteAtlas图集打包AssetBundle白图问题

    Unity 解决SpriteAtlas图集打包AssetBundle白图问题

    之前文档上说勾选了Include in build之后,就不需要自己增加一个Binding脚本,但是仍然会弹出警告,并且会出现白图现象 Tight Packing 勾选之后当Sprite有透明通道可能会出现错位 不推荐勾选 选项取消勾选之后打包AssetBundle会报警告 并且出现白图现象 那是因为没有进行bing  Sprite

    2024年02月11日
    浏览(58)
  • Unity引擎打包AssetBundle后模型网格数据丢失问题

    Unity引擎打包AssetBundle后模型网格数据丢失问题

    大家好,我是阿赵。 在项目里面,有时候会遇到这样一个问题。在Unity编辑器里面编写了一个shader,在编辑器看,效果都是没有问题的。但如果把资源打包成AssetBundle后,会发现shader的表现不对了。遇到了这种问题的时候,一般人会各自的怀疑,怀疑是不是shader写得不对,导

    2024年02月07日
    浏览(13)
  • Unity的AssetBundle系统来动态加载FBX模型

    在Unity中,可以使用C#脚本和Unity的AssetBundle系统来动态加载FBX模型。以下是一个简单的示例,演示如何动态加载FBX模型: 准备FBX模型 首先,准备一个或多个FBX模型,并将它们导入到Unity项目中。确保每个FBX模型都有一个独立的游戏对象,并且已经被正确地设置为“Static”或“

    2024年02月06日
    浏览(7)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包