unity AB包的理解和练习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

对于不理解和不会应用AB包的小伙伴,希望给自己加深印象的同时可以帮助到你们


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是AB包?

AB包全名AssetBundle(资源包)。是一种Unity提供的用于存放资源的包。通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,并且可以有选择地加载内容。
(直白点讲就是对内存有优化)

二、为什么要用AB包?

1.热更新(不理解的可以去理解一下)
2.Resources加载应用的时间比较长,对内存会造成一定的负担
3.Resources文件夹下的所有资源统一合并到一个序列化文件中,对资源优化有很大的限制

三、如何将资源打入AB包中

理解AB包概念后应用起来,以下是打入本地资源为例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEditor;

//1.需要创建打包脚本,并且该脚本需要放在编辑目录Editor下
//2.该脚本需要继承Editor类
//3.添加编辑扩展器(简单理解为编辑unity,创建工具) [MenuItem("AssetBundleTools/BuildAllAssetBundles")],创建的方法必须是静态的,在方法中写入打包逻辑 
public class AssetBundleDemo : Editor
{
    [MenuItem("AssetBundleTools/BuildAllAssetBundles")]
    static void AssetBundle()
    {
        //打包输出的位置
        string bundlePath = "Assets/AssetBundles";

        //如果没有该文件夹就创建一个,保证输出的位置不会为空
        if (!Directory.Exists(bundlePath))
        {
            Directory.CreateDirectory(bundlePath);
        }

        //打包
        /*
         参数1:打包输出的路径
         参数2:打包的方式,选项
         参数3:打包的平台
         */
        BuildPipeline.BuildAssetBundles(bundlePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);

        //刷新
        AssetDatabase.Refresh();
    }
}

以上就完成了打包的工具编写,下面是如何去选择需要打包的资源并且打入到包体中
在这里插入图片描述
以图片为例
在这里插入图片描述
在这里插入图片描述
可以选择New自行取名然后添加标签

点击打包选项右边就是将资源成功打进了ab包,至于打到哪个文件夹中自己去打包脚本中定义就行了
在这里插入图片描述

打进包里是为了用到的时候要加载出来资源去用,下面就如何去加载ab包中的资源

    void Start()
    {
        //存放ab包资源的路径
        string cubePath = Application.dataPath +'/' + "AssetBundles/cube";
        //读取ab包文件
        AssetBundle ab = AssetBundle.LoadFromFile(cubePath);
        //解析资源
        GameObject cube = ab.LoadAsset<GameObject>("cube");
        //该cube是个预设体所以需要克隆到场景中
        GameObject go = Instantiate(cube);
        go.transform.position = new Vector3(1, 1, 1);
    }

在这里插入图片描述

void Start()
{
    //再读取一张图片
    string txPath = Application.dataPath + '/' + "AssetBundles/texture";
    AssetBundle txAB = AssetBundle.LoadFromFile(txPath);
    Texture2D tx = txAB.LoadAsset<Texture2D>("texture");
    Sprite sp = Sprite.Create(tx, new Rect(new Vector2(0, 0), new Vector2(tx.width, tx.height)), new Vector2(0.5f, 0.5f));
    img.sprite = sp;
    img.transform.localScale = new Vector3(5, 5, 5);
}

在这里插入图片描述

总结

1.AB是一种可以减轻内存压力的资源包
2.大量资源的时候选择用ab包加载,不要用Resource.load去加载
3.如何打包
4.如果加载包中的资源

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值