由Font.CacheFontForText引起的6000+ ms的大飙升

时间:2017-08-03 19:47:12

标签: android unity3d fonts rendering

我用Unity创建游戏并加载第一个场景我得到了一个由Font.CacheFontForText引起的6000+ ms峰值,我认为这是因为我场景中的所有文本都选中了Best Fit(因为as我所知道的是自动缩放不同屏幕尺寸文本的最佳方法),我搜索了这个问题,但据我所知,我必须预先设置场景中的所有文本,而且它们很多。我可以避免这样做并以另一种方式解决这个问题吗?我在编辑器和Android上运行了探查器,而尖峰只出现在Android上?为什么它在编辑器中工作正常?

1 个答案:

答案 0 :(得分:0)

BestFit逐个尝试所有字体大小,找到适合Text RectTransform的最大字体。这样,如果在场景中有多个带有BestFit的文本,它将会非常慢。它也为每个大小分配一个drawcall,因此使用BestFit通常是一种不好的做法。尝试为不同的分辨率使用不同的字体大小,并仅在Start()函数上设置字体大小。例如:

public int[] widths;
public int[] textSizes;
public Text[] texts;
private int widthIndex;

void Start()
{
    for(int i = widths.Length - 1; i >= 0; i++) {
        if(Screen.width > widths[i]) {
            widthIndex = i;
            break;
        }
    }

    for(int i = 0; i < texts.Length; i++) {
        texts[i].textSize = textSizes[widthIndex];
    }
}