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

标签 android ios unity-game-engine

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

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/

相关文章:

安卓 Facebook v4.0 发布图文

Android 计算应用程序/进程的线程数

ios - UICollectionview 的无限滚动

iphone - 具有不同 TableView 标签的 TableView 的问题

iphone - 在分页 UIScrollView 中手势识别器的 sender.view 上的奇怪行为 UIView 动画

java - 如何使用按位运算检查置换的十六进制整数是否与另一个匹配(性能优化)

android - 2 个按钮并排

c# - 根据 bool 值更改单击时的按钮文本颜色

c# - 玩家被困在墙上| Unity2D

c# - Unity - OnMouseDown 双击