• unity打AB包,AssetBundle预制体与图集(二)


    第二步:加载AB包的资源,用于显示

    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using UnityEngine;
    using UnityEngine.Networking;
    using UnityEngine.U2D;
    using UnityEngine.UI;
    
    public class GameLaunch : MonoBehaviour
    {
        public Button Btn;
        public Button Btn2;
        private string bundlePath = "";
        private string bundlePath2 = "";
        public Transform Parent_;
        public Image IMG;
        void Start()
        {
            bundlePath =Path.Combine(Application.streamingAssetsPath + "/AB/","prefab_ui") ;
            bundlePath2 =Path.Combine(Application.streamingAssetsPath + "/AB/","prefab_altlas") ;
            Btn.onClick.AddListener(() =>
            {
                //加载资源
                // 同时启动两个异步加载过程
                StartCoroutine(LoadAssetBundlesAsync());
            });
            Btn2.onClick.AddListener(() =>
            {
                StartCoroutine(LoadAssetBundlesAsync2());
            });
        }
        IEnumerator LoadAssetBundlesAsync()
        {
            // 同时启动两个异步加载过程
            yield return StartCoroutine(LoadAssetBundleAsync(bundlePath2, "_图集_AB", "Atlas_One","ui_frame_fight"));
        }
        IEnumerator LoadAssetBundlesAsync2()
        {
            // 同时启动两个异步加载过程
            yield return StartCoroutine(LoadAssetBundleAsync(bundlePath, "_UI_AB", "Prefab_One"));
        }
        IEnumerator LoadAssetBundleAsync(string path, string debugMessage, string assetName, string spriteName = null)
        {
            AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);
            // 等待加载完成
            yield return request;
    
            var myLoadedAssetBundle = request.assetBundle;
            if (myLoadedAssetBundle == null)
            {
                Debug.LogError("Failed to load AssetBundle: " + debugMessage);
            }
            else
            {
                Debug.Log(debugMessage + "加载完成");
                if (debugMessage == "_UI_AB")
                {
                    if (!string.IsNullOrEmpty(assetName))
                    {
                        GameObject prefab = myLoadedAssetBundle.LoadAsset(assetName);
                        GameObject Clone = Instantiate(prefab); //prefab中有Imgs图片.sprite 在spriteAtlas里面,编辑器加载的图片是正确的,但是APK加载的Imgs图片.sprite = spriteAtlas图集
                        Clone.transform.SetParent(Parent_);
                        Clone.transform.localPosition = Vector3.zero;
                    }
                }
                else if (debugMessage == "_图集_AB")
                {
                    //用于检测该AB包中拥有的所有资源,如Atlas_One
                    object[] allAssets = myLoadedAssetBundle.LoadAllAssets();
                    foreach (var asset in allAssets)
                    {
                        Debug.Log("Asset in bundle: " + asset);
                    }
                    
                    if (!string.IsNullOrEmpty(assetName))
                    {
                        // 从 SpriteAtlas 中获取 Sprite
                        SpriteAtlas spriteAtlas = myLoadedAssetBundle.LoadAsset(assetName);
                        // 获取 SpriteAtlas 中的所有 Sprite
                        // Sprite[] sprites = new Sprite[spriteAtlas.spriteCount];
                        // spriteAtlas.GetSprites(sprites);
                        Sprite Sp = spriteAtlas.GetSprite(spriteName);//编辑器与APK加载的话,图片显示全都没问题
                        IMG.sprite = Sp;
                    }
                }
    
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90

    在这里插入图片描述
    运行,点击Btn1 ,可以加载图片ui_frame_fight
    在这里插入图片描述
    点击Btn2,可以创建预制体Prefab_One
    在这里插入图片描述
    一如既往,还有疑问,就直接在评论区问,我会尽快回复的

  • 相关阅读:
    springboot+vue+elementUI 汽车车辆充电桩管理系统#毕业设计
    VUE 文件导出下载
    淘宝API接入说明(商品详情数据示例)
    优化接口性能
    《Java基础知识》Java ArrayList源码分析 5
    网络安全等级保护相关标准及发展
    多模态大一统:开启全模态LLM和通用AI时代的大门
    企业架构LNMP学习笔记46
    关于Java代码如何项目部署
    Apache Commons CSV 基本使用
  • 原文地址:https://blog.csdn.net/qq_42489774/article/details/134243764