Some mods may be broken due to the recent Alloyed Collective update.
This package has been marked as deprecated, and it's suggested another
alternative is used.
DearImGuiInjection
Inject Dear ImGui into any process with C#
| Last updated | 2 years ago |
| Total downloads | 929 |
| Total rating | 2 |
| Categories | Libraries |
| Dependency string | xiaoxiao921-DearImGuiInjection-1.0.2 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
bbepis-BepInExPack
Unified BepInEx all-in-one modding pack - plugin framework, detour library
Preferred version: 5.4.2113README
DearImGuiInjection
Inject Dear ImGui into any process with C#.
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 DearImguiSharp.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>();
});
}