- ImGui (Dear ImGui) は、C++ 用の小型のイミディエイトモード GUI ライブラリです。
- ウィジェットツリーを維持することなく、関数呼び出しに基づいて毎フレームメニューを再描画します。
- ネイティブクライアントやツールは、3D シーン上に低遅延オーバーレイを表示するためにこれを使用します。
- これは C++ のパターンであり、Java Fabric mod はゲーム独自の GUI フックを使用します.
ImGui、Dear ImGuiの略で、C++のための小型のイミディエイトモードGUIライブラリです。ウィジェットオブジェクトのツリーを保持する代わりに、毎フレーム、単純な関数呼び出しからメニューを新たに描画します。これにより、接続が高速になり、ゲームの既存のレンダーループに容易に組み込むことができます。そのため、ツールやネイティブクライアントは、低遅延オーバーレイのためにこれを使用しています.
どこ Opal 合う
即時モードとは
ImGuiは、毎フレームインターフェースを再構築します。ボタンオブジェクトを作成して保存することはありません。ボタンを描画する関数を呼び出し、その呼び出しはボタンを描画すると同時に、今フレームでクリックされたかどうかを通知します。
リテンションモードのツールキットは、その逆の動作をします。メモリ内に長寿命のウィジェットツリーを保持し、状態が変化する際にそのツリーを更新します。即時モードは、この永続的な構造を、自分の状態の隣に存在し、上から下まで読み込むコードと交換します。
なぜツールやクライアントがこれを選ぶのか
ImGuiは、3Dシーンの上に配置されるメニューで人気があります。その理由は実用的です。
- 低遅延: プログラムがすでにレンダリングしているフレームにフックするため、メニューはすぐに反応します。
- わずかな連携: ウィンドウといくつかのコントロールは、ほんのわずかな関数呼び出しで実現できます。レイアウトファイルや管理する個別のUIスレッドはありません。
- 自己完結型: ライブラリは依存関係が少なく、一般的なグラフィックスバックエンドに適合するため、大規模なフレームワークを引き込むことはありません。
- デバッグに優しい: リリースメニューを構築するのと同じ呼び出しが、開発者が機能構築中に使用する使い捨てのデバッグパネルも構築します。
即時モードとリテンションモード
| 側面 | 即時モード (ImGui) | 保留モードツールキット |
|---|---|---|
| 状態の所有 | あなたのコードがデータを保持 | ツールキットがウィジェットツリーを保持 |
| フレームごとの処理 | 各フレームごとにUIを再構築 | 変更時にツリーを更新 |
| セットアップコスト | 数回の関数呼び出し | より多くの構造を事前に準備 |
| 最適な用途 | オーバーレイ、ツール、ゲームメニュー | 大規模なドキュメント形式のアプリケーション |
ネイティブクライアントへの適合
C++で構築されたネイティブユーティリティクライアントは、ゲームのフレーム上にImGuiでメニューを描画することが多いです。メニューコードはレンダーループ内で実行され、クライアント自身の設定を読み取り、変更を直接書き戻します。個別のUIプロセスがないため、機能の切り替えは、クライアントがすでに所有している値に対する単一の関数呼び出しで行われます。
これはC++のパターンです。FabricのJavaで書かれたmodは、ゲーム自身のGUIフックを通じてインターフェースに到達するため、ImGuiは主にネイティブコードとして配布されるクライアントで現れます。Java modとしてはあまり見られません。
FAQ
コアライブラリはC++で、ほとんどのプロジェクトでそれが利用されています。他の言語へのコミュニティによるバインディングは存在しますが、オリジナルで最も一般的な使用方法は、C++のゲームツールやネイティブアプリケーションです。
デフォルトでは、単調な開発者ツール風の外観です。カスタムのスタイルテーマを強く適用したり、独自のウィジェットを描画したりすることで、出荷されたメニューはデフォルトとは全く異なる外観になることがあります。
通常の使い方はできません。 FabricMODはJavaで動作し、ゲームのGUIシステムを使用します。ImGuiを使うのに典型的な環境は、ネイティブC++クライアントです。
いいえ。UI の再構築は安価であり、プログラムはすでに毎フレームレンダリングしているので、メニューはともかく、すでに実行されている作業に付随します。