AssetBundle.CreateFromMemory()的疑问?

1回答

AssetBundle.CreateFromMemory()的疑问?

提问者 felix 2016-01-13 773浏览
刚看了培训视频中的AssetBundle这一篇,里面说到了AssetBundle的加载。
其中的两个接口:
AssetBundle.CreateFromMemory()
AssetBundle.CreateFromFromFile()
讲师在ppt中说CreateFromMemory()这个接口的效率很低,原因是此时拿到的是字节流,需要对这个字节流进行序列化和结构化,才能形成最终的AssetBundle,所以性能很差,而CreateFromFile这个接口的性能很好。

我的疑问是:
1,如果调用CreateFromMemory(buffer),buffer中是未压缩和加密的AssetBundle数据,它的性能跟CreateFromFile相比,谁快谁慢?
2,如果问题1的答案是仍旧比CreateFromFile()慢,那么CreateFromFile()这个接口,难道不是先文件IO,然后再解析内存数据建立AssetBunle结构么?跟CreateFromMemory()的区别到底在哪里?

问题类型 : 编辑器相关     开发平台 : Windows 7     发布平台 : Windows     Unity 版本 : Unity Pro     版本号 : 4.6.f1     优先级 : 轻微故障    

快来消灭0回答吧

{{ dataList.answer_count | view-format }}回答
  • Unity官方专家 2016-01-13 09:55
    CreateFromMemory并不是对压缩过或者没有压缩过的数据都进行解压缩处理,是会做一个区别处理。进一步向dev确认了以后了解到,一般而言,CreateFromMemory中最耗时的操作是它需要从获取的bytes中重建assetbundle的数据头,而并非解压缩操作。这一点也是CreateFromMemory和CreateFromFile两个API本质上的最大区别。因此,就算提供了非压缩的bytes数据流,构建assetbundle头依然无法避免。

    据我们所知,目前unity没有提供类似接口的计划,因为这涉及assetbundle的结构问题。但如果你们有好的建议,可以去http://feedback.unity3d.com/ 发一个feature request,我们的开发人员会在今后的开发中考虑加入其中投票较高,且合理的 feature~

    CreateFromFile()读取的格式一定是未压缩的Assetbundle文件,并会在特定位置读取Assetbundle文件的序列化信息。通过该信息,则可以以FileStream的形式直接读取用户想要加载的资源。
    0评论
  • {{ answer.user.NickName }} {{ answer.profession }} {{ answer.created_at | time-format }}
    专家回答
    {{{ answer.answer }}}
    {{ answer.answer_count | view-format }}评论
加载中... 查看更多回答