この記事の3行まとめ
- サムザップ、内製Unity向けアプリケーション基盤「Spica」に含まれるデバッグツール「Spica.Debugger」の詳細をブログ記事で紹介
- UI Toolkitをベースに構築。ゲーム本体のUIとは独立して動作することや、USSに対応していることなどを利点に挙げている
- プロジェクト固有の要件に応じて拡張機能を導入する仕組みなどを、実際のコードをもとに解説している
サムザップは2026年7月7日(火)、『UI Toolkitで自作するUnityランタイムデバッグツールの設計と実装』と題した記事を、自社ブログ「Sumzap Engineering Blog」で公開しました。
同社内製のUnity向けアプリケーション基盤「Spica」に含まれるデバッグツール「Spica.Debugger」について、設計思想や内部実装の詳細を語っています。
(画像はブログ記事より引用)
同社では従来、デバッグツールとしてサードパーティ製の「SRDebugger」を使用していましたが、長らく更新が停止していたため最新のUnityバージョンに対応しておらず、また社内で挙がる独自要件を満たす上で拡張性に課題を抱えていたといいます。
こうした背景から内製デバッグツールの開発に踏み切り、「Spica」を構成するパッケージのひとつとして「Spica.Debugger」が誕生。共通基盤を維持しつつ、個々のプロジェクトに応じて拡張できる設計が目指されました。
「Spica.Debugger」の操作画面(画像はブログ記事より引用)
同社が掲げるランタイムデバッガの要件に対応するべく、ツールは「UI Toolkit」をベースに構築。
uGUIではなくUI Toolkitを採用するメリットとして、ゲーム本体のUIを構築する「uGUI」とは独立した動作が可能となることや、「USS(Unity Style Sheets)」(※)でスタイルを管理できること、ListViewにおけるVisualElementを仮想化できることなどが挙げられています。
※ CSS(Cascading Style Sheets)に近い形式で、UIのフォントやカラーといったデザインを定義できるスタイルシート言語
「Spica.Debugger」におけるConsoleページの構成。UI ToolkitのListViewは、画面に表示されるVisualElementのみを生成でき、数千にわたるログを快適にスクロール可能(画像はブログ記事よりスクリーンショットで引用)
「Spica.Debugger」の設定はすべて「DebuggerSettings」というScriptableObjectに集約され、Inspector上にその全貌が一覧されます。
Inspectorには「UI Assets」や「Triggers」など全ての設定項目が掲載されている(画像はブログ記事より引用)
プロジェクト固有の拡張機能は、独自にScriptableObjectを作成してDebuggerSettingsに登録することで自由に追加できます。
拡張可能な機能は、デバッガの起動方法を指定する「Trigger」、バグレポートの送信先を指定する「Report Sender」、ツールのUI構成を定義する「DebugPage」の3種類で、それぞれ抽象クラスを継承することでScriptableObjectを作成します。
たとえばTriggerにおいては、抽象クラスの「TriggerBase」を継承して「端末を振ったらデバッガが開く」という独自クラス「ShakeTrigger」を作成する実装例が紹介されています。
TriggerBaseの実装。ライフサイクル(Initialize/Update/Dispose)と、発火を通知するメソッド「Trigger」が提供される(画像はブログ記事よりスクリーンショットで引用)
そのほか、UI Toolkitのさらなる利点として「ランタイムで動いているデバッガと同一のものをEditor Window内でも表示・操作できる」ことについて、内部の仕組みやユースケースが紹介されています。
詳細は、Sumzap Engineering Blogのブログ記事をご確認ください。
UI Toolkitで自作するUnityランタイムデバッグツールの設計と実装 | Sumzap Engineering Blog