15946人加入学习
(55人评价)
AssetBundle(创建打包)入门学习(基于Unity2017)
价格 免费

/// <summary>
    /// 本地同步加载
    /// </summary>
    void Synchronous(string ObjName)
    {
        string path = "AssetBundles/"+ObjName+".unity3d";
        AssetBundle ab = AssetBundle.LoadFromFile(path);
        GameObject tmp = ab.LoadAsset<GameObject>(ObjName);
       
        GameObject go = Instantiate(tmp);
        go.transform.parent = this.transform;
        go.transform.localPosition = Vector3.zero;
        //加载所有ab包
        // //object []all=  ab.LoadAllAssets();
        // //  foreach (var o in all)
        // //  {
        // //      Instantiate(o as GameObject);
        // //  }
    }

    /// <summary>
    /// 第一种加载,www加载
    /// </summary>
    /// <returns></returns>
    IEnumerator Www(string ObjName)
    {
        string path = "AssetBundles/" + ObjName + ".unity3d";
        AssetBundleCreateRequest re = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
        yield return re;
        AssetBundle ab = re.assetBundle;
        GameObject tmp = ab.LoadAsset<GameObject>(ObjName);
        GameObject go=  Instantiate(tmp);
        go.transform.parent = this.transform;
        go.transform.localPosition = Vector3.zero;

    }
    IEnumerator WwW(string ObjName)
    {
        // string path = @"E:\UnityWork\MyAssetBundle\AssetBundles\" + ObjName + ".unity3d";
        string path = @"http://localhost/AssetBundles/" + ObjName + ".unity3d";
        while (!Caching.ready)
        {
            yield return null;        
        }
        WWW www = WWW.LoadFromCacheOrDownload(path,5);
        yield return www;
        if (www.error!=null)
        {
            Debug.Log(www.error);
            yield break;
        }
        AssetBundle ab = www.assetBundle;
        GameObject tmp = ab.LoadAsset<GameObject>(ObjName);
        GameObject go = Instantiate(tmp);
        go.transform.parent = this.transform;
        go.transform.localPosition = Vector3.zero;
    }
    /// <summary>
    /// 第四种UnitywbeRequest
    /// </summary>
    /// <returns></returns>
    IEnumerator UnityWbe(string ObjName)
    {
        string uri = @"http://localhost/AssetBundles/" + ObjName + ".unity3d";
        UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri);
        yield return request.SendWebRequest();
        // AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);//加载多种
        AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
      //  File.WriteAllBytes();   //保存
        GameObject tmp = ab.LoadAsset<GameObject>(ObjName);
        GameObject go = Instantiate(tmp);
        go.transform.parent = this.transform;
        go.transform.localPosition = Vector3.zero;
    }


    /// <summary>
    /// 第二种方式,内存同步加载
    /// </summary>
    void Memory(string ObjName)
    {
        string path = "AssetBundles/" + ObjName + ".unity3d";
        AssetBundle ab=  AssetBundle.LoadFromMemory(File.ReadAllBytes(path));
        GameObject tmp = ab.LoadAsset<GameObject>(ObjName);
       
        GameObject go = Instantiate(tmp);
        go.transform.parent = this.transform;
        go.transform.localPosition = Vector3.zero;
    }

[展开全文]
穿拖鞋的小女孩 · 2019-05-16 · 该任务已被删除 0

1:指定ab包签名:(不区分大小写)

2:构建ad包在Editor 下写打包代码

3:

[展开全文]
unitywen · 2018-08-13 · 该任务已被删除 0

1:ab签名可以划分类别 列如签名:scene/wall

2:

[展开全文]
unitywen · 2018-08-13 · 该任务已被删除 0

1:加载ab资源

[展开全文]
unitywen · 2018-08-13 · 该任务已被删除 0

小知识点,大家一起注意下,必须在Unity的Asset目录下创建正确的Editor文件夹,并将打包的函数放在该文件夹下,否则UnityEditor的头文件引用会报错!

[展开全文]
丿星幻翼灬 · 2018-12-21 · 该任务已被删除 0

1:同时加载的资源放在同一个包内。

2:共享资源 ,要分包

3:同时加载的小资源放一个包内

4:同一个资源有两个版本,通过后缀来进行区分

5:

[展开全文]
unitywen · 2018-08-13 · 该任务已被删除 0

1:LZMA 压缩的包更小时间长,默认压缩方式

2:下载时使用LZMA算法快,用lz4算法保存本地

3:uncompressedassetbundle:不压缩

4:

[展开全文]
unitywen · 2018-08-13 · 该任务已被删除 0

在要用到bundle的manifest时,不需要在程序里直接加载manifest文件,只需要加载对应的bundle,然后bundle里有方法可以获取到对应的manifest文件。

 

manifest.GetAllAssetBundles() 获取所有assetbundle的名字

manifest.GetAllDependencies("assetbundle");//获取assetbundle所依赖的

[展开全文]
cwenn · 2018-04-19 · 该任务已被删除 0

1:crc:文件校验

2:dependenies:依赖关系

3:

[展开全文]
unitywen · 2018-08-13 · 该任务已被删除 0

1:UnityWebReqequest 

[展开全文]
unitywen · 2018-08-13 · 该任务已被删除 0

看的我尴尬症都犯了,这种不应该API或者文档是最佳答案吗,竟然自己蒙了十分钟

[展开全文]
shirt · 2018-01-11 · 该任务已被删除 0

assetbundle   使用步骤: 在unity面板材质右下角,选择是否assetbundle,指定路径,然后代码创建打包类,然后可视化在控制面版生成menuitem ,点击开始打包。
 
创建一个打包类,代码: 
   
   using UnityEditor;  using system.io;    //引用unityEditor 需要将脚本创建在Editor文件夹下 ,  
     [menuitem("Assets/Build AssetBundles")]  //可视化控制面板   

   public class CreatAssetBundles(){
 
   static void BuildAllAsset(){

    string dir="AssetBundle"
  if(directory.Exit(dir)==false)
  {
   directory.CreatDirectory(dir)
  }
   buildPipeline.BuildAssetbundles(dir,buildoptions.none, buildtarget.windows64)
  }
}}

加载的方法 ,加载本地文件里的ab包,

 Assetbundle ab=Assetbundle.LoadFromFile("Assetbundle/Scene/wall.unity3d");  // 从文件夹加载资源包
 GameObject wallpfef=ab.loadAsset<GameObject>("Cubewall");   //加载物体资源, 从ab包加载    
  instantiate(wallpref);     
加载单个资源泛型,   加载所有loadAllAssets(), 返回uniyt.object数组 ,  getAllAssetName获取所有资源名字 

安卓平台,需要添加上级目录 :string path = Application.dataPath+"Assetbundle/Scene/wall.unity3d";  

卸载AB包,减少内存占用, asset.unload(false) ; false是不卸载被其他物体使用的材质, true是全部卸载  

进一步减少包的大小:   打包的时候,先打包共享资源,然后其他的只需要引用不打包。
比如两个模型不一样的墙  共用一个材质和贴图 , 如果先把材质贴图打包,这墙打包的时候只需要地址指向,不再次打包材质贴图 , 如果不把材质贴图先打包,独立打包两种墙, 则每个墙都会把材质贴图包含在内打包,就大了

包的依赖关系, 墙依赖材质贴图的包,所以墙的的preb包和材质包都要加载,不然会丢失材质 。

[展开全文]
青春不远万里 · 2019-04-06 · 该任务已被删除 0

压缩包包含:

1:serialized file

2:resource files

[展开全文]
youxiaohui · 2017-12-11 · 该任务已被删除 0

AsseetBundle为一个存放再硬盘上的压缩文件。文件夹中,包含两类文件:

1.serialized file(序列化文件),其为一个多资源文件的集合文件,多为Unity中自定义的文件类型,如Prefab,模型等都会被集中再这个文件中存放。

2.resource file(资源文件),多为可直接使用的二进制资源,如图片、声音等。可方便快速加载。

 

AssetBundle文件可通过Unity代码进行加载进内存,成为一个C#对象,对象中包含了打包时,所有的资源。

 

 

[展开全文]
祁汉 · 2017-08-16 · 该任务已被删除 0

1:

[展开全文]
youxiaohui · 2017-12-11 · 该任务已被删除 0

创建出的AB包是有平台限制的

[展开全文]
风旅人 · 2020-03-04 · 该任务已被删除 0

依赖资源路径是绝对路径不合理吧

[展开全文]

压缩包使用LZMA和LZ4压缩算法

[展开全文]
LucasDeng · 2021-08-09 · 该任务已被删除 0

能在电脑中直接查看的会被打包成resource file,不能直接查看的会被打包成serialized file

[展开全文]
LucasDeng · 2021-08-09 · 该任务已被删除 0

加载assetbundle时先加载依赖包,只需加载,无需其他操作,然后加载prefab对应的包,使用全称

[展开全文]
huangchongqing · 2017-10-28 · 该任务已被删除 0

授课教师

SiKi学院老师

课程特色

图文(1)
下载资料(1)
视频(24)