コンテンツにスキップ

ImGUI連携

ImGUIプラグイン(Promete.ImGui)を利用することで、アプリケーションにImGUIベースのUIを組み込むことができます。

インストール

ImGUI連携を利用するには、外部NuGetパッケージ Promete.ImGui をプロジェクトに追加してください。

Terminal window
dotnet add package Promete.ImGui

動作要件

  • .NET 8
  • Promete最新版
  • OpenGL Desktop バックエンド

基本の使い方

ImGuiPluginをアプリケーションに登録し、シーンでインジェクションして利用します。

using Promete;
using Promete.ImGui;
var app = PrometeApp.Create()
.Use<ImGuiPlugin>()
.BuildWithOpenGLDesktop();
app.Run<MainScene>();
class MainScene(ImGuiPlugin imgui) : Scene
{
public override void OnStart()
{
imgui.Render += OnRenderUI;
}
private void OnRenderUI()
{
ImGuiNET.ImGui.ShowDemoWindow();
}
}

ImGuiPluginのカスタマイズ

ImGuiPluginを継承し、OnConfigureメソッドをオーバーライドすることでImGuiの初期設定をカスタマイズできます。

初期設定の具体的な説明については、ImGui.NETのドキュメント等を参照してください。本ドキュメントでは割愛します。

using Promete.ImGui;
using ImGuiNET;
public class MyImGuiPlugin : ImGuiPlugin
{
protected override void OnConfigure(ImGuiIOPtr io)
{
// ここでフォントや設定をカスタマイズ
io.FontGlobalScale = 2.0f;
}
}

アプリケーション登録時に Use<MyImGuiPlugin>() として利用できます。

var app = PrometeApp.Create()
.Use<MyImGuiPlugin>()
.BuildWithOpenGLDesktop();

主なAPI

  • ImGuiPlugin.Render
    ImGUI描画時に呼ばれるイベント
  • IsSyncronizeWithWindowScaling
    ウィンドウのスケーリング値と同期するかどうか

サンプル:ImGUIでUIを表示

imgui.Render += () =>
{
ImGuiNET.ImGui.Begin("ImGui Window");
ImGuiNET.ImGui.Text("Hello, ImGui from Promete!");
if (ImGuiNET.ImGui.Button("Button")) { /* ... */ }
ImGuiNET.ImGui.End();
};

ノート

  • ImGuiPluginはOpenGL Desktopバックエンドでのみ利用可能です
  • シーン破棄時は imgui.Render -= ... でイベント解除を推奨します
  • ImGuiの初期設定をカスタマイズしたい場合はImGuiPluginを継承し、OnConfigureをオーバーライドしてください