Unity向けの軽量FPSカウンターを作りました

github.com

特徴

  • FrameTimingManagerによる計測。
  • ビットマップフォントは任意のグリフ/セル寸法のアトラスに差し替え可能。
  • もちろん実行時のGCアロケーションはゼロ。

経緯

世の中に意外とFrameTimingManagerで計測を行っているFPSカウンターのパッケージが無く、
グラフとかリッチな表現が欲しいわけでもないのに有料アセット入れるのもなぁ・・・。
と、試しに素直にuGUI + TextMeshProで自作してみると毎フレーム更新するにはまぁ遅い。
(ここで言う遅いは毎フレーム0.1ms~0.5msほどの話。)

そんなとき、Claude Fable 5が優秀という話を耳に挟んだので試しに一緒に作ってみました。

なぜ早いのか

こちらから提案したものもありますが、「実行時の処理負荷を最大まで抑えたい」と言ったらFableが色々アイデアを出してきてくれました。

  • 桁数を固定して頂点更新をなくす
  • ラベルと数値を別メッシュにする
  • 通常更新はUVだけにする
  • RendererFeatureを使わずフレーム終端で描画する

Fableを利用した開発の話

最初はCompatibility Mode (Render Graph Disabled)じゃないと動かないコードを出してきたり
「ポストプロセスがカウンター表示にもかかっちゃってて読みにくい!」とか、
「Screen Space - OverlayなuGUIのUIより奥に描画されてしまう」とか、 まあ流石に全知全能というわけにはいかないですが
それでもこのコードを数時間のやりとりで作れたのはデカいなぁと思う反面、
流石に高いのでどこまで金を払ってコードを書いてもらうのが良いかをちゃんと考えないといけなくなってきましたね・・・。