さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

GetCharacterInfoが動かない?

 表示されてる文字の情報を取ろうとして失敗する現象に遭遇した。

CharacterInfo characeterInfo
if (Text.font.GetCharacterInfo(c, out characterInfo))
{
    // 通らない
}

 原因はどうやら、

  • GetCharacterInfoの第三引数を省略するとフォントのデフォルトサイズで検索をかける
  • CanvasScalerやらなんやらの影響で、レンダリングの際にはText.fontSizeで指定したフォントサイズとは異なるフォントサイズが適用される

というわけで、以下の書き方なら通るっぽい。

CharacterInfo characterInfo;
if (Text.font.GetCharacterInfo(c, out characterInfo, Text.cachedTextGeneratorForLayout.fontSizeUsedForBestFit))
{
    // ヒットする
}

ちなみに_Text.cachedTextGeneratorForLayoutに似たプロパティで_Text.cachedTextGeneratorって言うのもあるんだけど、どっちが適正なのか調べる気力はナイアガラ。