【AssetBundle】AssetBundleVariant的使用

目录

1.AssetBundleVariant介绍

2.如何制作AssetBundleVariant

2.1 准备3档LOD资源

2.2 设置ab名以及variant名

2.3 构建AssetBundle的变体

​ 3.使用代码加载各LOD档资源


1.AssetBundleVariant介绍

AssetBundleVariant是Unity的AB变体技术,常用于制作LOD资源,用于适配多档机型性能优化策略,是非常好用的一种资源分级技术,帮助项目对资源的分类编辑、管理、构建、发布提供了极大的便利性。

AssetBundleVariant的最终存在形式,还是AB,例如hight、default、low三种变体,构建后得到的是ab.high、ab.default、ab.low三个ab,把后缀作为变量传入加载即可实现多档机型的AB资源使用管理了。

2.如何制作AssetBundleVariant

制作AssetBundleVariant非常简单。下面以制作p1.png的三档资源为例。

2.1 准备3档LOD资源

对于一张贴图p1.png,如果制作3种变体资源,首先要保证产出3份命名相同的p1.png并且目录不同,目的是为了从ab中加载Asset的时候使用相同的资源名。

2.2 设置ab名以及variant名

在每张贴图的右下角Inspector处设置AssetBundleName和VariantName即可。

2.3 构建AssetBundle的变体

构建很简单,直接看代码:

[@MenuItem("Tools/BuildAB")]
public static void BuildAB()
{
    BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath, BuildAssetBundleOptions.UncompressedAssetBundle | BuildAssetBundleOptions.StrictMode, BuildTarget.StandaloneWindows);
    AssetDatabase.Refresh();
}

 构建结束后,得到3个ab,分别是3个Variant对应的ab。

3.使用代码加载各LOD档资源

加载也很简单,直接看代码:

using UnityEngine;
using UnityEngine.UI;

public class TestLoadABVariant : MonoBehaviour
{
    public Image image;

    AssetBundle ab;

    string abName = "ab_p1";

    private void OnGUI()
    {
        if (GUILayout.Button("Set_H"))
        {
            string variantName = "h";
            LoadAndSetSprite(variantName);
        }
        if (GUILayout.Button("Set_D"))
        {
            string variantName = "d";
            LoadAndSetSprite(variantName);
        }
        if (GUILayout.Button("Set_S"))
        {
            string variantName = "s";
            LoadAndSetSprite(variantName);
        }
    }

    private void LoadAndSetSprite(string variantName)
    {
        if (ab != null)
        {
            ab.Unload(true);
        }

        ab = AssetBundle.LoadFromFile($"{Application.streamingAssetsPath}/{abName}.{variantName}");

        Sprite s = ab.LoadAsset<Sprite>("p1");

        image.sprite = s;

        image.rectTransform.sizeDelta = new Vector2(s.texture.width, s.texture.height);
    }
}

4.使用代码构建AssetBundleVariant

需要注意,只要这个ABName使用了Variant,那么此AB的其他Variant就不能为""空字符串。

var assetBundleBuilds = new AssetBundleBuild[]
{
   new AssetBundleBuild
   {
      assetBundleName = "ab_p",
      assetBundleVariant = "H",
      assetNames = new string[] { "Assets/H/p.png" }
   },

   new AssetBundleBuild
   {
      assetBundleName = "ab_p",
      assetBundleVariant = "",   // <- Cause error
      assetNames = new string[] { "Assets/D/p.png" }
   }
};

BuildPipeline.BuildAssetBundles(outputPath, assetBundleBuilds, BuildAssetBundleOptions.None, BuildTarget.Android);

AssetBundleVariant的使用方法介绍,到此全部完成。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值