Unity UI(uGUI)のTextでFont.CacheFontForTextがCPUスパイクを発生させている問題
Unity UIのTextコンポーネントで秒数表示する機能を作っていた時の話。
iPad mini(初代)でアプリを起動してみたら、一定間隔でカクついてしまった。
Profilerで調べたところ、Font.CacheFontForTextが定期的にCPUをスパイクさせているようだ。
(ProfilerのCPUのところの緑の縦線がスパイクが発生しているところ)
ググってみたら、いくつか記事が出てきた。
- Massive lag due to Font.CacheFontForText. Please help! - Unity Answers
- Massive Font.CacheFontForText CPU spike using default GUI | Unity Community
- Lag on Ipad due to font.cachefontfortext
どうも、UnityのDynamicFontのバグ(仕様?)によるものみたいだ。
解決策
数字とアルファベットと記号だけしか使わないし...ということで、シーン内の描画されないところに、使う文字をフォントサイズ毎に並べておいた。
これでCPUスパイクは起きなくなったが、民間療法感が否めない。
先述したリンクに、よしなに解決できそうなスクリプトがあったので試してみてもいいかも(やってることはほとんど同じ気がするけど...)
誰か良い解決方法あったら教えて下さい m( )m