通过服务器在运行时导入3d对象和纹理

时间:2017-12-20 14:17:52

标签: unity3d

我正在尝试如何在运行时使用Unity3D以最有效的方式加载模型和纹理,到目前为止我已经阅读了关于glTF格式,Draco API,目前我已经实现了一个简单的过程这工作真的很慢。我正在使用BestHTTP和纹理我正在这样做:

var texFoundPath = Directory.GetFiles(outFolder, texFileName, SearchOption.AllDirectories).Single();
                            Debug.Log("Loading texture from " + texFoundPath);

                            var texBytes = File.ReadAllBytes(texFoundPath);

                            Texture2D tex = new Texture2D(2,2);
                            tex.LoadImage(texBytes);

使用ObjImporter导入对象。

var gameObject = ObjImporter.Import(objStr, mtlStr, textureHashtable);

因此,在运行时,3-5mb的模型最多需要3-5秒才能加载。这很慢,不适合任何事情。如果我有大约100个型号,在本地执行此操作将导致200-300mb apk。

所以目前我正在寻找一种有效地做到这一点的方法,并希望得到你的帮助。我认为用Draco API加载模型是最好的。但我不知道如何创建与该API通信的插件。

1 个答案:

答案 0 :(得分:0)

每秒1 MB并不是一个糟糕的下载速度。实际上,不使用预测的唯一选择是降低纹理的分辨率并使其更小,将纹理文件压缩为"块"并下载每个" chunk"根据需要,解压缩并应用于模型,但这可能仍需要很长时间。

我认为你真正想要的是有一些预测逻辑加载"捆绑"实际需要之前的资产,并将它们存储在内存中供以后使用。

例如,如果玩家距离需要在观看之前下载的房屋200米,并且玩家观看距离为100米,则开始下载房屋。当房子在播放器的观看距离内时,它将被下载并准备使用。