精华内容
下载资源
问答
  • ABSystem, Unity3D AssetBundle 打包与管理系统,支持增量更新打包
  • 视频中详细介绍了 unity AssetBundle 的工作原理和流程,可以供想学习相关知识的人学习
  • 引擎版本更新 , ab打包加载方式也在发生变化, 之前的脚本还需要再改改才能继续用 这个没有太多功能 就是简单地打包和加载 ...using UnityEditor; public class CreateAB : Editor { /// <summary>...

    引擎版本更新 , ab打包加载方式也在发生变化, 之前的脚本还需要再改改才能继续用

    这个没有太多功能 就是简单地打包和加载 

    废话不多说  直接上代码 先看打包 编辑器拓展脚本要放Editor 文件夹下

    using UnityEngine;
    using UnityEditor;
    
    public class CreateAB : Editor {
        /// <summary>
        /// 将符合条件的全部分包打包(基本没什么卵用)
        /// </summary>
        [MenuItem("AB工具/单独打包")]
        static void GreatBundle()
        {
            Object[] selects = Selection.objects;
            foreach (Object item in selects)
            {
                Debug.Log(item);
                BuildPipeline.BuildAssetBundles(Application.dataPath + "/", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
                AssetDatabase.Refresh();//打包后刷新,不加这行代码的话要手动刷新才可以看得到打包后的Assetbundle包
            }
        }
        /// <summary>
        /// 将选定的多个游戏对象打包一个
        /// </summary>
        [MenuItem("AB工具/整体打包")]
        static void GreatAllBundle()
        {
            AssetBundleBuild[] builds = new AssetBundleBuild[1];
            Object[] selects = Selection.GetFiltered(typeof(Object),SelectionMode.DeepAssets);
            string[] TestAsset = new string[selects.Length];
            for (int i = 0; i < selects.Length; i++)
            {
                TestAsset[i] = AssetDatabase.GetAssetPath(selects[i]);
                Debug.Log(TestAsset[i]);
            }
            builds[0].assetNames = TestAsset;
            builds[0].assetBundleName = selects[0].name;
            BuildPipeline.BuildAssetBundles(Application.dataPath + "/", builds, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
            AssetDatabase.Refresh();
        }
    }
    

    然后是加载ab 

    using System.Collections;
    using UnityEngine;
    
    public class LoadAB : MonoBehaviour {
    	void Start ()
        {
            ///两种选其一
            StartCoroutine(Load(Application.dataPath + "/cube"));
            //StartCoroutine(LoadA(Application.dataPath + "/cube"));
        }
        IEnumerator Load(string url)
        {
            WWW www = new WWW(url);
            yield return www;
            if (!string.IsNullOrEmpty(www.error)) print(www.error+url);
            else
            {
                GameObject go = Instantiate(www.assetBundle.LoadAsset<GameObject>("cube"));
                www.assetBundle.Unload(false);
            }
        }
        IEnumerator LoadA(string path)
        {
            WWW bundle = WWW.LoadFromCacheOrDownload(path, 5);
            yield return bundle;
            yield return Instantiate(bundle.assetBundle.LoadAsset<GameObject>("cube"));
            bundle.assetBundle.Unload(false);
        }
    }
    

    两种加载的方式都差不多  第一个正常加载  第二种是从缓存中加载 

    有关缓存  想清理的话加一句

     Caching.ClearCache();//清理全部缓存 想具体清理某一个 请参考点击这里看如何删除本地指定的缓存

     

     

    第一个单独打包好像有点问题  先记录下 有时间再改

     

     

     

    展开全文
  • Unity5.4的AssetBundle打包和加载,是一个包含了打包资源包和更新下载资源包的简单框架, 可用于大部分游戏开发的初始化操作,实际项目可根据具体需求扩展。 项目详解参考项目中的ReadMe.txt说明。 PS:小弟分享...
  • 新版的 Unity 中资源更新有所改变,做个总结,主要参考,留言: https://blog.csdn.net/lmyfx/article/details/78236225 https://blog.csdn.net/elineSea/article/details/79866758 ...

    新版的 Unity 中资源更新有所改变,做个总结,主要参考,留言:

    https://blog.csdn.net/lmyfx/article/details/78236225

    https://blog.csdn.net/elineSea/article/details/79866758

     

    展开全文
  • 博客:https://blog.csdn.net/u014261855/article/details/109583480 unity自动按文件夹打包assetbundle,无需逐个命名,工程实现核心editor代码,以及整个测试项目
  • Unity 简易AssetBundle打包方法(一)

    千次阅读 2019-03-14 22:00:39
    本文全程以Unity中基础3d Object 以及部分材质作为AssetBundle(AB)导出素材 创建一个Editor文件夹(一定要放在这个文件夹里面),并在其中创建一个C#脚本MyAssetBundles,代码如下 using System.IO; using Unity...

    一.打包AB

    本文全程以Unity中基础3d Object 以及部分材质作为AssetBundle(AB)导出素材

    创建一个Editor文件夹(一定要放在这个文件夹里面),并在其中创建一个C#脚本MyAssetBundles,代码如下

    using System.IO;
    using UnityEditor;
    
    public class MyAssetBundles  {
        [MenuItem("Assets/BuildBundles")]//在Assets选项中添加点击按钮
        static void BuildBundles()
        {
            string assetBundlesLibrary = "AssetBundles";
            if (!Directory.Exists(assetBundlesLibrary))//判断本地目录是否已经存在目录名
            {
                Directory.CreateDirectory(assetBundlesLibrary);
            }
    
            BuildPipeline.BuildAssetBundles(assetBundlesLibrary, BuildAssetBundleOptions.None,
                BuildTarget.StandaloneWindows64);//在此目录下创建AssetBundle
        }
    }
    
    

    其次要对需要打包的预制体添加生成的名字,后面的选项可以修改后缀名为unity3d
    在这里插入图片描述
    我们找到Assets->BuildBundles运行即可对这个Cube进行打包
    在这里插入图片描述
    找到你项目的根目录里面就会有一个AssetBundles文件夹,里面就是打包的内容

    scene文件夹下:

    二.加载AB包

    首先创建一个脚本 LoadFileFromAB ,代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class LoadFileFromAB : MonoBehaviour {
    
    	// Use this for initialization
    	void Start ()
    	{
    	    AssetBundle ab=AssetBundle.LoadFromFile("AssetBundles/scene/cube.unity3d");//加载本地AB包内容
    	    GameObject cube=ab.LoadAsset("Cube") as GameObject;//LoadAsset中参数为导出前Prefab名字
    	    Instantiate(cube);//生成cube
    	}
    	
    }
    
    

    然后将脚本挂载在Camera上 运行即可 发现已经创建了一个Cube(Clone)

    此时,我们将整个Cube(Clone)拖拽至Project面板中,做成Prefab预制体,然后结束运行会发现,Cube材质已经丢失,这是因为运行的时候是在内存中加载AB包中cube所带有的材质,一旦结束运行,自动回收了。

    三.打包策略

    对于一些需要公共材质的预制体,推荐将材质球和贴图合并为同一AB名字打包,再将不同预制体进行打包

    例子:我们先创建两个不同的物体,并为其附上材质球,修改颜色为红色

    然后我们开始给他们打包,修改Assetbundle名


    运行Assets->BuildBundles后我们找到目录下打包的文件

    我们这里看到capsule和cube分别打包了占40kb

    接下来我们换一种打包方式
    我们对他们两个共有的材质球也进行AB包命名

    然后再运行BuildBundles(先删除之前我们打包完的文件)观察文件目录

    现在只有我们打包的材质球占了39kb,其余的capsule和cube,由于他们是公用一个材质球,Unity自动帮我们内部打包时进行了打包依赖,所以我们省下了近一半的容量


    那么我们如何导入呢?

    我们应该在使用资源之前,先加载依赖的材质包

    参考资料:https://blog.csdn.net/lmyfx/article/details/78236225
    未完待续…

    展开全文
  • unity5.X之后AssetBundle打包和加载使用
  • Unity5.x打包场景AssetBundle和加载场景Unity5.x打包场景AssetBundle和加载场景Unity5.x打包场景AssetBundle和加载场景
  • 这是一个AssetBundle打包管理的工具,通过编辑器扩展写的打包工具,通过填写prefab文件夹和其他需要打包的shader或音频等文件夹路径后即可一键打包,自动剔除冗余的ab包,自动生成AssetBundle的xml和二进制的配置表...
  • 打包 using System.IO; using UnityEditor; public class CreateAssetBoudles { //在主页面菜单添加功能键 [MenuItem("Assets/Build AssetBundles")] static void BuildAllAssetBundles() { string d...
    1. 打包
    using System.IO;
    using UnityEditor;
    
    public class CreateAssetBoudles 
    {
        //在主页面菜单添加功能键
        [MenuItem("Assets/Build AssetBundles")]
        static void BuildAllAssetBundles()
        {
            string dir = "AssetBundles";
            if (!Directory .Exists (dir ))
            {
                Directory.CreateDirectory(dir);//没有文件新建文件
            }
            BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
            //打包代码,参数:文件地址,算法类型,目标使用平台
        }
    }
    
    

    2.加载

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System.IO;
    using UnityEngine.Networking;
    using System;
    
    public class Load_AssetBundles : MonoBehaviour
    {
        string path = "AssetBundles/scene/wall.unity3d";
    
        void Start()
        {
        //方法一:从文件中加载
            AssetBundle ab1 = AssetBundle.LoadFromFile("AssetBundles/share.unity3d");//依赖包
            AssetBundle ab = AssetBundle.LoadFromFile(path);
            Instantiate(ab.LoadAsset<GameObject>("Cube"));
    
            //Object[] objs = ab.LoadAllAssets();//加载包的所有内容
            //foreach (Object o in objs)
            //{
            //    Instantiate(o);
            //}
       //方法二:从内存中加载
            //AssetBundle ab = AssetBundle.LoadFromMemory(File.ReadAllBytes(path));
            //Object[] objs = ab.LoadAllAssets();
            //foreach (Object o in objs)
            //{
            //    Instantiate(o);
            //}
    
       //利用manifest文件信息加载依赖
            //AssetBundle manifestAB = AssetBundle.LoadFromFile(@"file://D:\unity项目\W0902AssetBundle Learn\AssetBundles/AssetBundles");
            //Debug.Log(1);
            //AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
            //foreach (string item in manifest.GetAllAssetBundles())
            //{
            //    print(item);
            //}
            //string[] strs = manifest.GetAllDependencies("AAAA.unity3d");
            //foreach (string item in strs)
            //{
            //    AssetBundle.LoadFromFile("AssetBundles/" + item);
            //}
            //StartCoroutine(Load());
    
        }
        IEnumerator Load()
        {
            yield return null;
            //异步内存加载AssetBundle
            //AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
            //yield return request;
            //AssetBundle ab = request.assetBundle;
            //Object[] objs = ab.LoadAllAssets();
            //foreach (Object o in objs)
            //{
            //    Instantiate(o);
            //}
            //while (Caching.ready ==false )
            //{
            //    yield return null;
            //}
            
            //方法三:利用WWW此API加载(**将要弃用,不建议使用**)
            //WWW www = WWW.LoadFromCacheOrDownload(@"file://D:\unity项目\W0902AssetBundle Learn\AssetBundles/scene/wall.unity3d", 1);
            //WWW www = WWW.LoadFromCacheOrDownload(@"http://localhost/AssetBundles/scene/wall.unity3d", 1);
    
            //if (!string.IsNullOrEmpty(www.error))
            //{
            //    Debug.Log(www.error);
            //    yield break;
            //}
            //AssetBundle ab = www.assetBundle;
            //string uri = @"http://localhost/AssetBundles/scene/wall.unity3d";
            string  uri = @"file://D:\unity项目\W0902AssetBundle Learn\AssetBundles/scene/wall.unity3d";
            
            //方法四:利用UnityWebRequestAssetBundle此API加载(**UnityWebRequest.GetAssetBundle将弃用请换成UnityWebRequestAssetBundle.GetAssetBundle**)
            UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(uri);
            yield return request.SendWebRequest();
            if (request.error != null)
                throw new Exception("www download had an error" + request.error);
            float loadProgress = request.downloadProgress;
            //AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
            AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
            UnityEngine.Object[] objs = ab.LoadAllAssets();
            foreach (UnityEngine.Object o in objs)
            {
                Instantiate(o);
            }
    
    
        }
    
    
    展开全文
  • Assetbundle打2个包 分为shader_pkg包、model_pkg包 其中 shader_pkg 包含有shader文件,含有各种变体 model_pkg 包含有美术模型文件,引用了shader的各种变体 二、表现: 加载model_pkg中的模型,材质Keyword(变体...
  • AssetBundleUnity加载的资源格式。游戏不管使用什么平台打包AssetBundle都是必不可少的。 为何选择AssetBundle 资源加载常用有几种模式: 1.直接使用IO进行加载,适合文本资源。 2.Resources类。将资源放置到名...
  • 图片打包,预制体打包 项目相关文档:http://blog.csdn.net/until_/article/details/79389023
  • unity AssetBundle打包完整代码(可直接用) using System.IO; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.Text; public class Tools : ...
  • Unity场景打包AssetBundle并加载

    千次阅读 2019-07-04 15:15:14
    场景打包AssetBundle资源和普通资源打包有所区别。 打包场景为AssetBundle [MenuItem("Custom Editor/Create Scene")] static void CreateSceneALL () { //清空一下缓存 Caching.CleanCache(); string path = ...
  • 上一节我们讲解了AssetBundle的打开以及资源load以及资源释放的问题。那么本节主要想讲解的是打包之后的文件夹关系,还有就是如何减小包的大小,也就是依赖打包,然后依赖打包的问题解决了,最终还要能够正确的加载...
  • 实力封装:Unity打包AssetBundle(一)

    千次阅读 2018-03-24 22:01:56
    Unity打包AssetBundle包之从入门到放弃系列...
  • 是因为unity4.x时代还是默认的lzma的压缩方式 直到unity5.3版本开始出现lz4的压缩方式, 所以就出现了本次问题,unity2019打包时默认使用lz4 比 unity4.7打出来的...[]unity2019打包assetBundleunity4.7要大很多] ...
  • Unity3d之AssetBundle打包与读取

    万次阅读 2015-03-28 22:59:57
    unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包Assetbundle,方便我们后面的使用,来达到资源的更新。  一个Assetbundle可以打包一个模型(这里的模型不单单指的是预制模型,...
  • Unity打包/读取AssetBundle资源全教程

    万次阅读 2018-07-08 02:37:36
    Unity 资源AssetBundle打包 助力快速完成资源进行 AssetBundle 打包与读取,为新手节省宝贵的时间,避免采坑 那就是最主要的热更新了 注意-命名规范: 写一个编辑器脚本,菜单栏中添加一个按钮,用来完成 ...
  • 直接上源码,功能:选中文件下所有带_ab的文件夹分为一个ab包,自动命名打包 public class EDxAssetBundle : MonoBehaviour { //[MenuItem("Tool/Create AssetBundle All")] //private static void ...
  • 把这个脚本复制下来,弄到你的项目当中,然后打包看看,你会发现它的强大之处
  • Unity3D游戏开发中,要做到游戏资源的热更新,只有唯一途径,就是使用AssetBundle打包资源,使用过AssetBundle的应该都知道,体验不是很好!实话说,从AssetBundle的设计来说就有太多的问题,AssetBundle对使用...
  • 首先打包对应平台的Ab时需要有这个平台的组件,举例讲比如我要打包WSA平台,那就需要把UWP的IL2CPP装上,否则搞不定; 打包个资源包比较简单,说白了核心的就BuildPipeline.BuildAssetBundles。 [MenuItem("打包/...
  • Unity AssetBundle打包场景并加载

    千次阅读 2018-10-20 09:17:28
    脚本1(放入Editor文件夹):可以在unity菜单栏的Assets下方找到Build AssetBundle MyScene。如下图: CreatAssetsBundle: using UnityEngine; using System.Collections; using UnityEditor; public class C....
  • unity打包插件,将脚本放入Editor文件夹下面
  • 转至...之前有一篇文章中我们相惜讨论了Assetbundle的原理,如果对原理还不太了解的朋友可以看这一篇文章:Unity游戏开发使用Assetbundle加载场景的原理本篇文章我们将说说assetbundl...
  • UnityEditor中,模拟解压assetbundle来运行游戏,一切正常 但是打包出exe后,发现部分prefab丢失了引用   解决方法: 将所有的prefab都打入一个assetbundle中,公有的资源按其他的命名方案打入其他ab包,不用...
  • Unity5 AssetBundle 打包

    千次阅读 2015-11-08 15:50:11
    Unity5 AssetBundle打包 关于AssetBundle 是什么,干什么用,在网上到处是,在此就不过多赘述了。 下面直接上代码,本篇只包含如何打包 AssetBundle,下篇为AB加载 打包AB Unity5 打AssetBundle 将要打包的资源...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,630
精华内容 2,252
关键字:

assetbundle打包unity2018