Unity AB包

预制体a中有图片b
1、将a打ab包后图片b会打进a的ab里面。
2、若先将b打包,后将a打包则b不会在a的ab里面,但加载时得先加载b的ab包,否则将出现图片丢失

预制体预览

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

情况1

只将a打ab包
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using System.IO;
using UnityEngine;

public class BundleTool
{
    [MenuItem("AssetsBundle/Build AssetBundles")]
    static void BuildAllAssetBundles()//进行打包
    {
        string dir = "AssetBundles";
        //判断该目录是否存在
        if (Directory.Exists(dir) == false)
        {
            Directory.CreateDirectory(dir);
        }
        var bundles = new List<AssetBundleBuild>();
        var target = BuildTarget.StandaloneWindows64;

        //将所有prefab文件夹下打包
        var prefabPaths = Directory.GetFiles("Assets/Resources/Prefab/", "*.prefab", SearchOption.AllDirectories);
        var build = new AssetBundleBuild();
        build.assetBundleName = "prefabs";
        build.assetNames = prefabPaths; //所有的prefab打进一个包
        bundles.Add(build);
        BuildPipeline.BuildAssetBundles(dir, bundles.ToArray(), BuildAssetBundleOptions.None, target);
    }
}

manifest文件
在这里插入图片描述

加载prefab
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoadAssetsBundlePackage : MonoBehaviour
{
    // Use this for initialization
    void Start()
    {
        //先将prefab资源包加载进内存
        AssetBundle prefabsAssetBundle = AssetBundle.LoadFromFile("AssetBundles/prefabs");
        //然后再加载prefab
        GameObject prefab = prefabsAssetBundle .LoadAsset<GameObject>("Prefab");
        //实例化出一个实体
        Instantiate(prefab);
    }
}
正常显示

在这里插入图片描述

情况2

将a、b分别打ab包
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using System.IO;
using UnityEngine;

public class BundleTool
{
    [MenuItem("AssetsBundle/Build AssetBundles")]
    static void BuildAllAssetBundles()//进行打包
    {
        string dir = "AssetBundles";
        //判断该目录是否存在
        if (Directory.Exists(dir) == false)
        {
            Directory.CreateDirectory(dir);
        }
        var bundles = new List<AssetBundleBuild>();
        var target = BuildTarget.StandaloneWindows64;

        //将所有icon文件夹下png打包(一张一张图片打包) 图片b
        var icons = Directory.GetDirectories("Assets/Resources/Icon/");
        foreach (var icon in icons)
        {
            var pngs = Directory.GetFiles(icon + "/", "*.png");
            foreach (var item in pngs)
            {
                var bundle = new AssetBundleBuild();
                var key = Path.GetFileNameWithoutExtension(icon) + "_" + Path.GetFileNameWithoutExtension(item);
                key = key.ToLower();
                bundle.assetBundleName = "icon/icon_" + key;//打进AssetBundles/icon文件夹下
                bundle.assetNames = new[] { item }; //一张图片一打
                bundles.Add(bundle);
            }
        }
        //将所有prefab文件夹下打包(所有预制体打进一个ab) 预制体a
        var prefabPaths = Directory.GetFiles("Assets/Resources/Prefab/", "*.prefab", SearchOption.AllDirectories);
        var build = new AssetBundleBuild();
        build.assetBundleName = "prefabs";
        build.assetNames = prefabPaths; //所有的prefab打进一个包
        //
        bundles.Add(build);
        BuildPipeline.BuildAssetBundles(dir, bundles.ToArray(), BuildAssetBundleOptions.None, target);
    }
}

manifest文件
在这里插入图片描述
在这里插入图片描述

加载prefab
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LoadAssetsBundlePackage : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {
        //先将icon资源包加载进内存  若没有将icon资源加入包中,image组件将丢失sourceImage
        //AssetBundle.LoadFromFile("AssetBundles/icon/icon_emoji_biti"); 
        
        //再将prefab资源包加载进内存
        AssetBundle prefabsAssetBundle = AssetBundle.LoadFromFile("AssetBundles/prefabs");
        //然后再加载prefab预制体
        GameObject prefab = prefabsAssetBundle .LoadAsset<GameObject>("Prefab");
        //实例化出一个实体
        Instantiate(prefab);
    }
}
显示

若不先加载icon资源
在这里插入图片描述
先加载icon资源,显示正常
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值