Unity实现简易打AB包并且加载的简易流程

Unity实现简易打AB包并且加载的简易流程

前言

相信很多人在进行Unity面试的时候,都会被问及到是不是会用Unity打包的问题。Unity两种经典的动态加载资源的方式,Resources和AssetBundles。
Resources是动态内部调用,Recouces是在编辑环境下project的一个文件夹,调用里面的资源可以使用Resources类,比如使用Resources.load方法,打包后这个文件夹是不存在的,会统一生成assets资源。
AssetBudle是外部调用,要用AssetBundle首先要把资源打包成.assetbundle文件,再动态加载这个文件,本地或者网络都可以,这样可以减少打出程序包的大小,也可以实现通过服务器加载游戏资源。这篇博客简单介绍下使用AssetBundle加载资源的方法。

步骤

1.新建项目,在Assets文件夹下建立Editor文件夹和StreamingAssets文件夹,如下图所示:
在这里插入图片描述
2.在Editor文件夹下建立CreateAssetBundle.cs脚本,切记,一定要在Editor文件夹下建立脚本,否则打包会报错,代码如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class CreateAssetBundle
{

    [MenuItem("Bulid/BUild AssetBundles")]//编辑器菜单路径 打包
    static void BulidAllAssetBundle()
    {
#if UNITY_ANDROID//安卓端
        Debug.Log("安卓平台打包成功");
        BulidPipeline.BulidAssetBundles(Application.streamingAssetsPath,
        BulidAssetBundleOptions.UncompressedAssetBundle,
        BulidTarget.Android);
#elif UNITY_IPHONE//IOS
         Debug.Log("IOS平台打包成功");
        BulidPipeline.BulidAssetBundles(Application.streamingAssetsPath,
        BulidAssetBundleOptions.UncompressedAssetBundle,
        BulidTarget.iOS);
#elif UNITY_STANDALONE_WIN||UNITY_EDITOR//PC或则编辑器
        Debug.Log("PC平台打包成功");
        BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath,
            BuildAssetBundleOptions.UncompressedAssetBundle,
            BuildTarget.StandaloneWindows);
#endif
    }
}

3.因为这个脚本不是继承MonoBehaviour的,所以不需要将它挂载到场景中,写完这个脚本后,可以看到Unity菜单栏上多了一个Build按钮,如图所示:
在这里插入图片描述
4.在场景中新建一个Cube,将其设置成为预制体,在预制体的Inspector下将AssetBundle的name修改为cube,如下图所示:
在这里插入图片描述
5.依次点击菜单栏Bulid---->Build AssetBundles,出现打包进度,完成后,可以发现AB包已经被打到了StreamingAssets文件夹中,如下图所示:
在这里插入图片描述
6.接着就是对打出的AB包的调用了,新建Load.cs脚本,代码如下所示:

using System.Collections;
using UnityEngine;
public class Load : MonoBehaviour
{
    private string pathUrl;//AB包路径

    public string abName;//AB包的名字
    public string prefabsName;//想要从AB包中加载物体的名字

    void Start()
    {
        pathUrl =
#if UNITY_ANDROID
            "jar:file://"+Application.dataPath+"!/assets/";
#elif UNITY_IPHONE
            Application.dataPath+"/Raw/";
#elif UNITY_STANDALONE_WIN||UNITY_EDITOR
           "file://" + Application.dataPath + "/StreamingAssets/";
#endif
    }
    public IEnumerator LoadAsset(string assetBundle, string resName)
    {
        string mUrl = pathUrl + assetBundle;
        WWW www = new WWW(mUrl);
        yield return www;
        if (!string.IsNullOrEmpty(www.error))
            Debug.LogError(www.error);
        else
        {
            Object obj = www.assetBundle.LoadAsset(resName);
            yield return Instantiate(obj);
            www.assetBundle.Unload(false);
        }
        www.Dispose();
    }

    private void OnGUI()
    {
        if (GUILayout.Button("LoasAsset"))
        {
            StartCoroutine(LoadAsset(abName, prefabsName));
        }
    }
}    

7.将该脚本挂载到场景的物体上,并且将Prefabs的名称赋值到到挂载的脚本上,如下图所示:
在这里插入图片描述
8.运行场景,点击打包按钮,发现AB包中的物体已经被初始化到了场景中,如下图所示:
在这里插入图片描述

相关链接

项目链接

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

波波斯维奇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值