【问题标题】:Unity Hololens Asset streaming optimizationUnity Hololens 资产流优化
【发布时间】:2017-09-07 14:32:37
【问题描述】:

我正在开发一个 Hololens 应用程序,该应用程序显示带有用户信息的 PNG 图像。图像是从协程中的 StreamingAssets 文件夹加载的。问题在于这些资产的加载速度。如果用户循环到另一个页面,应用程序在 PC 上会瞬间下降到大约 1-3 FPS。

我希望你们中的一些人可以帮助我想办法优化这些图像的存储和流式传输。例如,有没有办法以较低的分辨率加载图像以节省时间和内存(硬件的内存非常有限),并在实际需要显示时加载额外的细节?加载图像时多线程会提高帧率吗?

【问题讨论】:

  • 为什么不贴出协程加载代码呢?这可以帮助指出您的问题
  • 你说得对,这里是代码pastebin.com/j7YfA2Xj的链接,现在看,可能和while循环有关……
  • 我怀疑问题可能出在将纹理加载到图像而不是使用WWW API 的加载部分时。把www.LoadImageIntoTexture(tex);注释掉,看看问题是否依然存在。
  • 所以实际上完全消除了那里的任何性能问题!它还破坏了应用程序 pc 端的一些功能(该应用程序在 Hololens 和常规 win10 设备之间运行),但很容易解决。
  • 旁注:如果您本身没有 hololens 设备,您可能将对象放置在离相机太远的地方(并且您永远不会注意到,因为模拟器没有参考点比较)。 Unity 中的 1 个距离单位大约是 1 米的现实世界空间。相机的视野应设置为大约 60 度。一个具有舒适阅读尺寸/距离的方形物体大约有一米大(即一个大标志),距离为 2-3 米。

标签: c# unity3d hololens


【解决方案1】:

因此,程序员在 cmets 中的建议有助于完全消除性能问题。下面的代码是用于在启动时流式传输所需图像的协程。

IEnumerator LoadImages()
{
    int oldImgIndx = imageIndex;
    imageIndex = 1;

    bool thereAreImages = true;
    while (thereAreImages && imageIndex < 1000)
    {
        if (System.IO.File.Exists(CreateFilePath(imageIndex)))
        {
            string url = "File:///" + CreateFilePath(imageIndex);
            Texture2D tex = new Texture2D(4, 4);
            WWW www = new WWW(url);
            yield return www;
            www.LoadImageIntoTexture(tex);
            spriteList.Add(Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f)));
            imageIndex++;
        }
        else
        {
            thereAreImages = false;
        }
    }
    finished = true;
    imageIndex = oldImgIndx;
}

Hololens 的问题在于www.LoadImageIntoTexture(tex); 行。在 PC 端显示多张图片时需要此代码,但在 Hololens 上,一次只显示一张图片可以省略。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 2023-03-13
    • 2019-10-13
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多