gpt4 book ai didi

android - 提高过多 UI 图像的帧速率 - Unity UI

转载 作者:行者123 更新时间:2023-11-28 21:02:32 27 4
gpt4 key购买 nike

在我的单个页面中,有太多纹理需要渲染,然后我才遇到屏幕打开问题,但我能够解决这个建议:

OnBecomeVisible for Canvas UI Objects

这是我为此目的使用的实际代码:

public void OnValueChangeRefreshCards (Vector2 valueChange)
{
elapsedYDist += valueChange.y;

if (elapsedYDist > 3f) {
elapsedYDist = 0f;
for (int i = 0; i < GameConstants.TOTAL_ROSE_COUNT; i++) {
Card card = roseList [i].GetComponent<Card> ();

if (RendererExtensions.IsVisibleFrom (card.MyRectTransform, Camera.main))
card.roseImage.enabled = true;
else
card.roseImage.enabled = false;
}
}
}

但现在我开始出现过多的帧率丢失相关问题,所以即使滚动页面对我来说也变得非常困难。请查看随附的视频,了解有关我所面临问题的更多信息。 NameThatRose - Low Frame Rate

请给我一些下一步改进的建议。

编辑:这是我的分析器输出。

  • 详细的深度剖析器 enter image description here
  • Deep Profiler 概览 enter image description here

最佳答案

您可以尝试一些方法来找出导致低帧率的原因。

  1. 使用profiler深入剖析以找出哪个 UI 调用花费了更多时间。就像我所做的一样here .由于 Image 继承自 UIMaskableGraphics,它会在列表中的每个图像的每一帧调用 MaskableGraphics.OnEnable()。这会占用您在这里看到的时间:

  1. 我相信您的 OnValueChanged 方法在每一帧都会被调用,这只会增加启用/禁用迭代及其处理时间。您可以将调用限制在某个时间,例如每秒处理 4 次。

    float timeSinceLastUpdate = 0;

    void Update()
    {
    timeSinceLastUpdate += Time.deltaTime;
    }

    public void OnValueChangeRefreshCards (Vector2 valueChange)
    {
    if(timeSinceLastUpdate < 0.25f)
    {
    return;
    }
    timeSinceLastUpdate = 0;

    // do your stuff here...
    }
  2. 您有 250 多张图像要处理每一帧,这对于旧版 Android 设备来说是个大问题,同样,MaskableGraphics.OnEnable() 调用可能是罪魁祸首。如果需要,您可以避免更改状态:

    if (RendererExtensions.IsVisibleFrom (card.MyRectTransform, Camera.main))
    {
    if(!card.roseImage.enalbed)
    card.roseImage.enabled = true;
    }
    else
    {
    if(card.roseImage.enalbed)
    card.roseImage.enabled = false;
    }

此外,以下是一些有助于在 Unity 中优化 UI 的链接:

更新:

以下博客提供了有关 UI 渲染的更多信息:


希望这有帮助:)

关于android - 提高过多 UI 图像的帧速率 - Unity UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47671113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com