(unity)AssetBundle资源打包基础——笔记

本文介绍了Unity中AssetBundle的基础知识,包括AssetBundle的用处、定义、使用流程。详细阐述了AssetBundle的加载方式,如从内存、本地、缓存和服务器加载,并探讨了AssetBundle的分组策略和卸载方法,旨在帮助开发者更有效地管理和使用资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(完整代码–懒人笔记–学习用)

一、AssetBundle用处

1,AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载,可以理解成资源包;
2,AssetBundle可以相互依赖,比如说,预制体模型包(一个包)可以依赖与材质包(另一个包);
3,压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网络传输;
4,把一些可以下载内容放在AssetBundle里面,可以减少安装包的大小,游戏更新时下载的包也是如此;

二、什么是AssetBundle

1、它是一个存在于硬盘上的文件。可以称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含了多个文件。这些文件可以分为两类:serialized file(资源被打碎放在一个对象中,最后统一被写进一个单独的文件(只有一个)) 和 resource files(某些二进制资源(图片、声音)被单独保存,方便快速加载)。(序列化文件和源文件)

2、它是一个AssetBundle对象,我们可以通过代码从一个特定的压缩包加载出来的对象。这个对象包含了所有我们当初添加到这个压缩包里面的内容,我们可以通过这个对象加载出来使用。(所谓的面向对象吧~)

三、AssetBundle使用流程

比如:将更新需加载的资源打成AssetBundle包放到服务器上(可能会有多个AssetBundle包)
在这里插入图片描述

玩家检测到游戏需要更新时,从服务器将资源包下载下来。如果检查到不需要更新就不用了从服务器上下载。(下载后会保存到本地)

在这里插入图片描述

我们要如何使用(步骤)

1,指定资源的AssetBundle属性(xxxa/xxx)这里xxxa会生成目录,名字为xxx(比如我这里的选择一个材质)
在这里插入图片描述
2,构建AssetBundle包,用Editor写一个打包工具方便操作嘛

在这里插入图片描述
上面那东西的代码在这,看注释理解

using UnityEditor;  //unity编辑器
using System.IO;   

public class CreateAssetBundles{
   
   

	//将此方法设置为菜单选项
        [MenuItem("Assets/Build AssetBundle")]
        static void BuildAllAssetBundles() {
   
   
        
        //创建目录 Directory
        string dir = "AssetBundles";
        if (Directory.Exists(dir)==false) {
   
       
            Directory.CreateDirectory(dir);    //判断目录是否存在,不存在的话创建
        }
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
        //"AssetBundles":文件夹创建在根目录下,(代码在unity内运行)以相对路径创建,相对路径以工程的根目录为准
        //BuildAssetBundleOptions.None : 默认为LZMA算法压缩
        // StandaloneWindows64 : 按平台进行打包(这里只能在Win64下可以使用)
    }
    
}

打出来的AssetBundle长这样(加载Manifests文件可以处理资源的依赖)
在这里插入图片描述
在这里插入图片描述

3,上传AB包,说白了就是把包丢到服务器上去
4,加载AB包和包里面的资源(下面给代码详细讲)

四、AssetBundle的加载方式

(个人感觉嘛就把ab包当成对象那样加载使用就好了。)

① 从内存加载(AssetBundle.LoadFromMemoryAsync)

同步加载,我这里加载得可能有点累赘了…但最直接的方法就是这么加载

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

public class LoadFromMemoryExample : MonoBehaviour {
   
   

    void Start() {
   
              //同步方式加载
    
        string path_m = "AssetBundles/share.ab";
        string path_p1 = "AssetBundles/sphere.ab";
        string path_p2 = "AssetBundles/cylinder.ab";
        
        //从内存加载(同步)
        AssetBundle ab_m = AssetBundle.LoadFromMemory(File.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值