コンテンツにスキップ

ImGUI連携

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

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

Terminal window
dotnet add package Promete.ImGui
  • .NET 10
  • Promete最新版
  • OpenGL Desktop バックエンド、または Vulkan Desktop バックエンド

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

using Promete;
using Promete.GLDesktop;
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を継承し、OnConfigureメソッドをオーバーライドすることでImGuiの初期設定をカスタマイズできます。

ImGuiPlugin のコンストラクタは PrometeApp と InputProvider を受け取るため、継承したクラスでも同じ引数を受け取り、基底クラスへ渡す必要があります。これらはDIによって自動的に注入されます。

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

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

アプリケーション登録時に Use<MyImGuiPlugin>() として利用できます。シーンでは MyImGuiPlugin 型として受け取ってください。

var app = PrometeApp.Create()
.Use<MyImGuiPlugin>()
.BuildWithOpenGLDesktop();
  • ImGuiPlugin.Render
    ImGUI描画時に呼ばれるイベント
  • IsSyncronizeWithWindowScaling
    ウィンドウのスケーリング値と同期するかどうか
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バックエンドとVulkan Desktopバックエンドで利用可能です
  • シーン破棄時は imgui.Render -= ... でイベント解除を推奨します
  • ImGuiの初期設定をカスタマイズしたい場合はImGuiPluginを継承し、OnConfigureをオーバーライドしてください