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

StreamingAssets文件夹下的资源,会不经处理放到安装包中。所以一般StreamingAssets会放一下二进制文件

[展开全文]
艾润Irene · 2020-03-20 · 该任务已被删除 0

资源加载到内存,需要unload,不然会占用内存,否则会长期占用内存。不能在使用该资源时unload

[展开全文]
艾润Irene · 2020-03-20 · 该任务已被删除 0

manifest文件中的CRC校验文件的完整性

下载的文件CRC与manifest文件对比,如果一致,说明下载的文件是完整的

[展开全文]
艾润Irene · 2020-03-20 · 该任务已被删除 0

manifest文件中的CRC校验文件的完整性

下载的文件CRC与manifest文件对比,如果一致,说明下载的文件

[展开全文]
艾润Irene · 2020-03-20 · 该任务已被删除 0

本地文件前缀需要加上file:///

[展开全文]
艾润Irene · 2020-03-20 · 该任务已被删除 0

根据ab包的来源,采用不同的ab

[展开全文]
艾润Irene · 2020-03-20 · 该任务已被删除 0

Unity不会自动加载依赖。一般先加载依赖的包,再加载GO。补充:主要在使用前,

[展开全文]
艾润Irene · 2020-03-19 · 该任务已被删除 0

开发中,会存在本地,通过测试后,通过http网络传输,上传到服务器

[展开全文]
艾润Irene · 2020-03-19 · 该任务已被删除 0

AssetBundles当前目录生成的目录,定义当前目录生成了那些ab包,是二进制文件。每一个manifest

[展开全文]
艾润Irene · 2020-03-19 · 该任务已被删除 0

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

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

1.

[展开全文]
调皮 · 2020-02-09 · 该任务已被删除 0

localhost 后面的斜杆必须是 /

[展开全文]
neverxuan · 2019-09-21 · 该任务已被删除 0

有个疑问,之前公司项目一直是unity4.6.5,所有的打包基本上都是代码控制,依赖关系的处理是在打资源之前将所有的依赖关系打成一张xml,这个XML和5.X以后的AssetBundleManifest是一个作用吗?

[展开全文]
南曰天 · 2019-07-05 · 该任务已被删除 0

Unity3d 2019无需下载浏览工具,本身自带

[展开全文]
YH1209 · 2019-06-26 · 该任务已被删除 1

Unity3d 2019中,UnityWebRequest不包含GetAssetBundle()方法,需要使用UnityWebRequestAssetBundle代替。

[展开全文]
YH1209 · 2019-06-26 · 该任务已被删除 1

/// <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

假如两个预制体共享一个材质资源,当分别将两个预制体打成两个ab包的时候,每个ab包会将预制体依赖的材质同时打进包中,这样每个包中都会有一份材质,会导致包体变大。

因此需要将材质打包成一个ab包,然后再将两个预制体打依赖于材质ab包的ab包,这样就节省了资源。

[展开全文]
黯然止殇 · 2019-04-21 · 该任务已被删除 0

题外话:初学者对英文文档的阅读能力要求不高,但是想要在程序的路上越走越远的话,就需要能看懂一些英文文档。

[展开全文]
黯然止殇 · 2019-04-21 · 该任务已被删除 0

1.依赖包重复问题

把需要共享的资源打包到一起

分割包,这些包不是同一时间使用的

把共享的部分打包成一个单独的包

2.图集重复问题

 

[展开全文]
罗卡恩 · 2019-04-21 · 该任务已被删除 0

文件校验

CRC MD5 SHA1

通过对数据进行计算,来生成一个校验值,该校验值用来检验数据的完整性

1.算法不同。CRC采用多项式除法,MD5和SHA1使用的是替换、轮转等方法

2.校验值长度不同。CRC长度一般跟其多项式有关,一般16位或32位;MD5是16字节(128位);SHA1是20个字节(160位)

3.校验值的称呼不同。CRC叫CRC值 MD5和SHA1一般叫Hash或散列值

4.安全性不同。这里的安全性是指验错能力,即数据的错误能通过校验检测出来。CRC的安全性跟多项式有关系,相对于MD5 SHA1要弱;MD5安全性高,但是被破解了。SHA1安全性最高

5.效率不同CRC的计算效率很高;MD5 SHA1比较慢

6.用途不同 CRC一般用作通信数据的校验:MD5和SHA1用于安全领域,比如文件校验、数字签名等

[展开全文]
罗卡恩 · 2019-04-21 · 该任务已被删除 0

授课教师

问问题加入A计划,有专门负责答疑的老师哦!!!

课程特色

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

学员动态