栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

【AssetBundle】AssetBundleVariant的使用

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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("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的使用方法介绍,到此全部完成。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901567.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号