おもしろいもの、やくにたつもの を かきこむのだ!

Unity UI(uGUI)のTextでFont.CacheFontForTextがCPUスパイクを発生させている問題

Unity UIのTextコンポーネントで秒数表示する機能を作っていた時の話。
f:id:takashicompany:20141229161425g:plain

iPad mini(初代)でアプリを起動してみたら、一定間隔でカクついてしまった。

Profilerで調べたところ、Font.CacheFontForTextが定期的にCPUをスパイクさせているようだ。 f:id:takashicompany:20141229161602p:plain
(ProfilerのCPUのところの緑の縦線がスパイクが発生しているところ)

ググってみたら、いくつか記事が出てきた。

どうも、UnityのDynamicFontのバグ(仕様?)によるものみたいだ。

解決策

数字とアルファベットと記号だけしか使わないし...ということで、シーン内の描画されないところに、使う文字をフォントサイズ毎に並べておいた。
f:id:takashicompany:20141229162338p:plain

これでCPUスパイクは起きなくなったが、民間療法感が否めない。

先述したリンクに、よしなに解決できそうなスクリプトがあったので試してみてもいいかも(やってることはほとんど同じ気がするけど...)

誰か良い解決方法あったら教えて下さい m( )m