查看: 62|回复: 0

[基础] Unity AssetBundle的使用两种方法

[复制链接]

432

主题

73

听众

4017

积分

Rank: 12Rank: 12Rank: 12

发表于 2020-3-16 18:42 |显示全部楼层
共享资源获取更多积分!share your resources get more credits!
资源信息 Tutorial Information
教程名称: Unity AssetBundle的使用两种方法(发布原创教程可获得更多积分哦!)
适用引擎: (资源适用引擎)
教程语种: 中文
教程等级: 小白(等级越高教程越难,但能学到的东西越多)
教程格式: 图文(请用IE9以上浏览器访问本版块)
教程作者: 转载自互联网 (如有问题请短消息联系作者或发表回复)
点击查看原图 --> 美丽分割线
请先回复
哇伊~ (((‵□′))回复太烦了,怒买VIP(充值金额将用于论坛采购更多资源)

--> 请先登录 --> 请先登录 --> 请先登录 --> 请先登录 --> 请先登录 --> 请先登录 -->
1、所有打包参数在代码里设置,完全代码控制;
第一种:

在代码中指定bundle包名,指定包含在该bundle里的所有资源路径
新建TestBundle.cs注意此脚本放在Editor文件夹下,
using UnityEngine;
using UnityEditor;
using System.IO;
[InitializeOnLoad]
public static class TestBundle
{
[MenuItem("AssetsBundle/Build Bundle -- 代码中设置参数")]
    static void BuildAB()
    {
        string path = Application.streamingAssetsPath + "/AssetsBundles/";

        if (Directory.Exists(path))
            Directory.Delete(path, true);
        Directory.CreateDirectory(path);

        AssetBundleBuild[] buildMap = new AssetBundleBuild[2];

        //指定bundle包名
        buildMap[0].assetBundleName = "prefab_bundle";

        string[] assets = new string[2];
        assets[0] = "Assets/AssetsBundleObj/Cube.prefab"; // 必须是完整的文件名(包括后缀)
        assets[1] = "Assets/AssetsBundleObj/Sphere.prefab";
        //指定bundle包含的资源路径数组
        buildMap[0].assetNames = assets;

        buildMap[1].assetBundleName = "scene_bundle";
        string[] scenes = new string[1];
        scenes[0] = "Assets/_Scenes/Scene.unity";
        buildMap[1].assetNames = scenes;

        BuildPipeline.BuildAssetBundles(path, buildMap, BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows);
    }
}

代码中设置参数




2、在编辑器中设置打包参数,代码简便
新建一个prefab,如下配置,一个名字,一个后缀



新建TestBundle.cs注意此脚本放在Editor文件夹下,代码如下:
using UnityEngine;
using UnityEditor;
using System.IO;

[InitializeOnLoad]
public static class TestBundle
{
   
    [MenuItem("AssetsBundle/Build Bundle -- 编辑器中设置参数")]
    static void BuildAB2()
    {
        string path = Application.streamingAssetsPath + "/AssetsBundles/";

        if (Directory.Exists(path))
            Directory.Delete(path, true);
        Directory.CreateDirectory(path);

        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneOSX);
    }
} 再新建一个脚本AssetBundleTest.cs 代码如下, using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AssetBundleTest : MonoBehaviour
{
    public GameObject obj;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    void OnGUI()
    {
        if (GUILayout.Button("加载预制体Cube"))
        {
            StartCoroutine(LoadObj("cube_ab", "cube.prefab"));//有没有.prefab后缀都正常加载
        }
        if (GUILayout.Button("加载预制体Sphere"))
        {
            StartCoroutine(LoadObj("prefab_bundle", "sphere"));
        }
    }
    /// <summary>
    /// 加载预制体
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    IEnumerator LoadObj(string bundle_name, string name)
    {
        string path = "file://" + Application.streamingAssetsPath + "/AssetsBundles/" + bundle_name;
        //Debug.LogError(string.Format("obj  {0}", path));
        WWW www = new WWW(path);
        yield return www;
        if (www.error == null)
        {
            AssetBundle bundle = www.assetBundle;
            //这里LoadAsset第二个参数 有没有都能正常运行,这个类型到底什么用途还有待研究
              obj = Instantiate(bundle.LoadAsset(name, typeof(GameObject))) as GameObject;
            obj.transform.parent = transform;
            // 上一次加载完之后,下一次加载之前,必须卸载AssetBundle,不然再次加载报错:
            //    The AssetBundle 'Memory' can't be loaded because another AssetBundle with the same files is already loaded
            bundle.Unload(false);
        }else
        {
            Debug.LogError(www.error);
        }
    }

}
工具栏中会出现



点击生成bundle目录,会看到AssetBundle文件夹在StreamingAssets目录中,
将AssetBundleTest.js绑定到场景中运行,点击  “加载预制体Cube”  cube就会出现在场景中了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

楼主热帖
人人为我 我为人人 互相分享 互相学习 互相进步 一带一路
温馨提示:求助请到“Unity技术讨论”版块中发帖,便于集中解决!
您需要登录后才可以回帖 登录 | 立即注册

懒人模式:

关闭

站长推荐 上一条 /1 下一条

Unity3D游戏开发联盟(资源共享平台) -Unity3D,Unreal ( 粤ICP备20003399号-2 )   

GMT+8, 2020-4-10 18:10 , Processed in 0.092345 second(s), 83 queries .