2017-08-03 4 views
-1

私はUnityでゲームを作成しています。最初のシーンを読み込むと、Font.CacheFontForTextに起因する6000 + msスパイクが発生します。シーンはベストフィットがチェックされています(私が知っている限り、異なるスクリーンサイズで自動的にテキストを拡大する最も良い方法です)、私はこの問題を探しましたが、私が理解したところではシーン内のすべてのテキストをあらかじめポピュレートする必要があり、彼らはたくさんあります。これを避け、この問題を別の方法で解決できますか?私はエディタ上でプロファイラを実行し、アンドロイド上でスパイクはAndroid上でのみ表示されますか?なぜそれがエディタで正常に動作しますか?Font.CacheFontForTextに起因する6000 + msの大きなスパイク

答えて

0

BestFitは、すべてのフォントサイズを1つずつ試して、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]; 
    } 
} 
+0

ありがとう!しかし、テキストのサイズが異なるすべてのテキストに対して、これを実行する必要があります。例えば、画面サイズが小さくなるにつれてテキストが小さくなる必要があるテキストと、サイズが大きいテキスト(同じ画面サイズではテキストサイズが大きくなる)が1回の場合は、自分自身をうまく説明することができます。 – rickyxd

+0

これは単なる例でした。あなたが多くのテキストを持っているなら、ポイントはベストフィットを使用しないことです。プロジェクトに合った最適な方法を見つける必要があります。 –