DearImGuiInjection
Inject Dear ImGui into any process with C#
About this mod Author’s original text
DearImGuiInjection
Inject Dear ImGui into any process with C#.
Installation
Unzip this zip file \
Place the DearImGuiInjection directory located in BepInEx/plugins into your BepInEx plugins directory for PEAK
Usage
The keybind for bringing up the cursor for interaction is by default the Insert key, which can be modified in the configuration file.
Mod Developers
Download this package and add a reference to ImGui.NET.dll and DearImGuiInjection.dll in your C# project.
Above your BaseUnityPlugin class definition
[BepInDependency(DearImGuiInjection.Metadata.GUID)]
DearImGuiInjection.DearImGuiInjection.Render += MyUI;
private static void MyUI()
{
if (DearImGuiInjection.DearImGuiInjection.IsCursorVisible)
{
var dummy = true;
ImGui.ShowDemoWindow(ref dummy);
if (ImGui.BeginMainMenuBar())
{
if (ImGui.BeginMenu("MainBar", true))
{
if (ImGui.MenuItemBool("MyTestPlugin", null, false, true))
{
_isMyUIOpen ^= true;
}
ImGui.EndMenu();
}
ImGui.EndMainMenuBar();
}
if (ImGui.BeginMainMenuBar())
{
if (ImGui.BeginMenu("MainBar", true))
{
if (ImGui.MenuItemBool("MyTestPlugin2", null, false, true))
{
_isMyUIOpen ^= true;
}
ImGui.EndMenu();
}
ImGui.EndMainMenuBar();
}
}
if (_isMyUIOpen)
{
var dummy2 = true;
if (ImGui.Begin(Metadata.GUID, ref dummy2, (int)ImGuiWindowFlags.None))
{
ImGui.Text("hello there");
if (ImGui.Button("Click me", Constants.DefaultVector2))
{
// Interacting with the unity api must be done from the unity main thread
// Can just use the dispatcher shipped with the library for that
UnityMainThreadDispatcher.Enqueue(() =>
{
//var go = new GameObject();
//go.AddComponent();
});
}
}
ImGui.End();
}
}
Make sure to only interact with anything UnityEngine related from its main thread, easily doable through UnityMainThreadDispatcher
if (ImGui.Button("Click me", Constants.DefaultVector2))
{
// Interacting with the unity api must be done from the unity main thread
// Can just use the dispatcher shipped with the library for that
UnityMainThreadDispatcher.Enqueue(() =>
{
//var go = new GameObject();
//go.AddComponent();
});
}
Credits
Sewer56
Install & use Install: BepInEx plugin
- The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
- Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
- Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
- Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.
Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.
Install these first, or the mod will not work: