The BepInExPack for PEAK has not been set up for the mod manager yet. Please manually install it here. The console will not appear when launching like it does for other games on Thunderstore.

DearImGuiInjection
Inject Dear ImGui into any process with C#
Date uploaded | 3 days ago |
Version | 1.0.0 |
Download link | penswer-DearImGuiInjection-1.0.0.zip |
Downloads | 2175 |
Dependency string | penswer-DearImGuiInjection-1.0.0 |
This mod requires the following mods to function

BepInEx-BepInExPack_PEAK
BepInEx pack for PEAK. Preconfigured and ready to use.
Preferred version: 5.4.2403README
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<Stuff>();
});
}
}
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<Stuff>();
});
}