AssetBundle打包依赖(宽宽又欠我一顿烧烤)


using UnityEngine;
using System.Collections;
using UnityEditor;
public class dabao : EditorWindow
{
    /*
     * 主要就这俩东西 - -、
     *BuildPipeline.PushAssetDependencies():依赖资源压栈;

    BuildPipeline.PopAssetDependencies():依赖资源出栈。
     */
    [MenuItem("z/make")]
    static void CreateAssetBunldesMain_exe()
    {
        BuildPipeline.PushAssetDependencies();
        Object Ztexture = Resources.Load("z");
        string path = Application.dataPath + "/StreamingAssets/z.bytes";
        BuildPipeline.BuildAssetBundle(Ztexture, null, path, BuildAssetBundleOptions.CollectDependencies);

        Object[] SelectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
        foreach (Object obj in SelectedAsset)
        {
            BuildPipeline.PushAssetDependencies();
            string targetPath = Application.dataPath + "/StreamingAssets/" + obj.name + ".bytes";
            BuildPipeline.BuildAssetBundle(obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies);
            BuildPipeline.PopAssetDependencies();

        }

        BuildPipeline.PopAssetDependencies();
        //刷新编辑器
        AssetDatabase.Refresh();
    }

}

打包代码完成的功能是: 先把选中预设们公用的那个贴图打包了。然后再打包选中的这几个预设(贴图名字是“z”,预设们名字是 t1和t2)通过push压栈和pop出栈来隔离开,内层可以包含外层的引用,但不包含外层的资源本身。

加载代码的逻辑是:为了试验一下是否有依赖关系,先加载预设t2,等确保加载出来之后,再加载贴图z,等确保加载完贴图之后,再加载预设t1。最后会发现t1上有贴图,而t2上没有贴图。(这个代码编写的逻辑并不好,只是通过协程来挂起时间。但是用来实验还是不错吧~~~~所以 在加载预设之前,必须先把他们引用到的资源加载上)

QQ  745701540
using UnityEngine;
using System.Collections;

public class jiazai : MonoBehaviour
{

    IEnumerator Start()
    {
        Caching.CleanCache();

        #region 无贴图实验
        StartCoroutine(Load("file://" + Application.dataPath + "/StreamingAssets/t2.bytes"));
        yield return new WaitForSeconds(3);
        #endregion

        #region  贴图实验
        StartCoroutine(LoadTP());//加载贴图
        yield return new WaitForSeconds(3);
        StartCoroutine(Load("file://" + Application.dataPath + "/StreamingAssets/t1.bytes"));

        #endregion

    }

    IEnumerator LoadTP()
    {
        string path = "file://" + Application.dataPath + "/StreamingAssets/z.bytes";
        WWW bundle = WWW.LoadFromCacheOrDownload(path, 5);
        yield return bundle;
    }

    private IEnumerator Load(string path)
    {
        WWW bundle = WWW.LoadFromCacheOrDownload(path, 5);
        yield return bundle;
        if (bundle != null)
        {
            //加载到游戏中
            Instantiate(bundle.assetBundle.mainAsset);
        }

    }
}

这种方式打包之后的三个包的大小(一个贴图   俩预设)

最简单粗暴的打包那俩预设的大小(俩预设)

哎呦不错喔足足小了一个贴图z的资源大小呀~

时间: 2024-10-15 16:54:12

AssetBundle打包依赖(宽宽又欠我一顿烧烤)的相关文章

Unity AssetBundle共享资源打包/依赖资源打包

依赖性打包 依赖性打包的作用在于避免资源冗余,同时提高资源加载和卸载的灵活性,其重要性不言而喻.在4.x版本的AssetBundle打包系统中,涉及一对 BuildPipeline.PushAssetDependencies和BuildPipeline.PopAssetDependencies接口,从官方文档中可以大致了解其用法:http://docs.unity3d.com/ScriptReference/BuildPipeline.PushAssetDependencies.html 可以简

Assetbundle 打包加载及服务器加载等(采用unity3d5.0后的新版)

Assetbundle为资源包不是资源 打包1:通过脚本指定打包 AssetBundleBuild ab = new AssetBundleBuild { assetBundleName = PlayerSettings.bundleVersion + "@" + "zhao",//资源包assets的名字 assetNames = new string[1],  //包里的每个资源的名字 }; string outputPath = Path.Combine(Ut

unity3d assetbundle打包策略

由于assetbundle打包存在依赖的问题,所有资源要进行合理的分包 零.代码 代码都放在本地,包括NGUI等插件的代码.shader代码 一.单位 单位的模型贴图.动画一起打包 二.UI 1.公用图集一起打包(UIAtlas.prefab.UIAtlas.mat.UIAtlas.png)在进入游戏的时候加载并且常驻内存 2.(依赖公共图集)面板图集和面板预设一起打包  在切换场景的时候加载场景所需要的面板图集 三.场景 1.场景公用的贴图和预设一起打包 一种风格的场景有一个公用依赖资源包 2

[Unity3d][NGUI]两种思路解决AssetBundle的依赖关系.

接上文. 使用上文中的AssetBundle打包方式生成的文件包括了依赖关系中的文件. 一般的使用中并不会发现什么问题. 可是当配合NGUI的时候,使用dynamicFont时打包AssetBundle会将每一个组件使用的dynamicFont都分开打包进去. 导出函数请參考:导出资源 导出资源包时出现的问题: 如图: 在解决依赖关系上我使用过2种方案: 第一种是使用BuildPipeline中的PushAssetDependencies和PopAssetDependencies方法来解决依赖关

Unity5.x版本AssetBundle打包研究

Unity5的AssetBundle打包机制和以前版本不太一样.简单的说就是,只要给你要打包的资源设置一个AssetBundleName ,Unity自身会对这些设置了名字的资源进行打包,如果一个资源依赖了另一个资源.Unity自己会处理依赖关系,AssetBundleManifest文件就保存着这些资源的依赖关系.比如一个UI面板.Prefab,依赖了一个图集Atlas,一个字体文件做个测试:只给UI面板3.prefab设置AssetBundleName.打出包来看,别看只有371KB,那是因

Unity AssetBundle打包与资源更新

Unity的AssetBundle打包是一件让人头疼的事情,当我接手这项工作时,我以为最多只用两个周就可以把整个打包和资源热更新的流程搞定,结果还是花了一个月,期间踩坑无数,总结出来希望能够节约别人的时间. (一)你的游戏项目是什么类型的? 在开始写打包的Editor脚本之前,你最好先详细考察一下你们的游戏项目是什么类型?是端游,手游还是页游?因为这三者涉及到bundle包的资源管理策略截然不同,如果你们是跨平台发布,那我建议你最好用宏来切换管理策略. 我先分享一下我曾经接手过打包工作的两个项目

Unity3d 5.x AssetBundle打包与加载

1.AssetBundle打包 unity 5.x版本AssetBundle打包,只需要设置好AssetBundle的名称后,unity会自动将其打包,无需处理其他,唯独需要做的是设置好个AssetBundle的名称. 注意:AssetBunlde的名称只能设置小写字母,即使你写成大写也会被自动转置成大写字母,而且名称中支持"/",如:"AssetBundles/cube.unity3d",.unity3d的后缀是自己设置的,可以不设置 代码: using Unit

一个灵活的AssetBundle打包工具

尼尔:机械纪元 上周介绍了Unity项目中的资源配置,今天和大家分享一个AssetBundle打包工具.相信从事Unity开发或多或少都了解过AssetBundle,但简单的接口以及众多的细碎问题也给工作带来较多的困扰.今天分享AssetBundle工具的实践与想法,相信这块内容对帮助理解AssetBundle有较大的帮助. Unity提供了两种资源加载方式,一种是Resources,另外种就是AssetBundle.所有的资源只要放在Resources目录下,在打包的时候会自动打进去,并可以通

AssetBundle打包优化解决方案

第一阶段:AssetBundle出一套解决方案 1.解决现在同一个资源打2个bundle的冗余问题 2.测试验证节省资源的比率是多少 问题拆分 一.bundle重复 问  题  :相同资源拆分问题? 解决方案:1.制作场景时将相同部分分开 制作方法:将每个场景相同部分放到同一个目录,不同部分保留在场景中 打包方法:a.打成独立的bundle,不同部分放到每个场景中打成bundle b.用xml记录下每个场景中公共部分的transform,bundle名称.资源名称.父节点信息 优    点:打包