sound sepher's PASTIME

ゲーム開発で思ったことや、趣味などの話を書き綴っていきます。

【Unity】TextMeshProのlocalScale拡大縮小でテキストが一瞬文字化けする

問題

  • サブジェクトの通り、
    TextMeshPro で localScale が (0, 0, 1) などの値から (1, 1, 1) に一瞬で拡大するとき、
    フォントは適切に設置されているのに、なぜか少しの間「■■■■」と文字化けして表示される
  • Canvas 下にオブジェクトを仕込んで、その下に TextMeshPro を配置した際、
    Object をエディタ上で直接上記の値に設定すると同様の事象が発生

原因

  • localScale.y の値をゼロから1にした瞬間に文字化けするらしい
    • 文字化けするということは認識されなくなったということだし、
      localScale.yをゼロにするとテクスチャが解放されてしまうのだろうか??
  • localScale.x の値をゼロから1に一瞬で変えても何も起きない、問題ない

解決方法

  • localScale.yの値はゼロにしない。new Vector3(0, 1, 0) だとか、
    そんな感じに y だけ 0 にしない形で不可視状態にすれば、
    元に戻したとき普通に表示される。

補足

なぜ localScale をゼロにするか

  • uGUI にはオブジェクトをアクティブ・非アクティブで切り替えて表示・非表示を操作すると、
    非アクティブ時にガベージコレクションが走ってしまう問題があるため。

別案

  • Image などの uGUI のオブジェクトには、
    CanvasRenderer という Canvas にアクセスするためのコンポーネントが必ず実装されてる。
    これの SetAlpha をいじれば似たような処理はできるけど、
    localScale は親オブジェクトごと非表示にできるのが強みか?
  • このあたり、処理速度にどの程度の差があるかまではチェックしてないが、
    そういう方法もあるみたい、ということでメモしておく。