An in-game UI for exploring, debugging and modifying IL2CPP and Mono Unity games.
Go to file
2020-10-24 20:18:42 +11:00
lib Merging the two Mono builds, now just targets .NET 3.5 2020-10-05 23:08:59 +11:00
resources some early steps remaking the GUI with UnityEngine.UI, working in all tested game so far 2020-10-23 01:50:33 +11:00
src Debug console basically finished and working (using TMP now) 2020-10-24 20:18:42 +11:00
.gitattributes Initial commit 2020-08-07 22:18:48 +10:00
.gitignore Update .gitignore 2020-09-09 00:53:31 +10:00
icon.png 1.8.0, merging Mono and Il2Cpp builds, adding BepInEx support 2020-09-27 22:04:23 +10:00
LICENSE Initial commit 2020-08-07 22:18:48 +10:00
overview.png Update overview.png 2020-10-08 06:26:15 +11:00
README.md Update README.md 2020-10-12 20:23:21 +11:00

An in-game explorer and a suite of debugging tools for IL2CPP and Mono Unity games, using MelonLoader and BepInEx.

Releases

Mod Loader Il2Cpp Mono
MelonLoader ✔️ link ✔️ link
BepInEx link ✔️ link

Il2Cpp Issues:

  • Some methods may still fail with a MissingMethodException, please let me know if you experience this (with full debug log please).
  • Reflection may fail with certain types, see here for more details.
  • Scrolling with mouse wheel in the Explorer menu may not work on all games at the moment.

Features

  • Scene Explorer: Simple menu to traverse the Transform heirarchy of the scene.
  • GameObject Inspector: Various helpful tools to see and manipulate the GameObject, similar to what you can do in the Editor.
  • Reflection Inspector: Inspect Properties and Fields. Can also set primitive values and evaluate primitive methods.
  • Search: Search for UnityEngine.Objects with various filters, or use the helpers for static Instances and Classes.
  • C# Console: Interactive console for evaluating C# methods on the fly, with some basic helpers.
  • Inspect-under-mouse: Hover over an object with a collider and inspect it by clicking on it.

How to install

MelonLoader

Requires MelonLoader to be installed for your game.

  1. Download the relevant release from above.
  2. Unzip the file into the Mods folder in your game's installation directory, created by MelonLoader.
  3. Make sure it's not in a sub-folder, Explorer.dll should be directly in the Mods\ folder.

BepInEx

Requires BepInEx to be installed for your game.

  1. Download the relevant release from above.
  2. Unzip the file into the BepInEx\plugins\ folder in your game's installation directory, created by BepInEx.
  3. Make sure it's not in a sub-folder, Explorer.dll should be directly in the plugins\ folder.

Mod Config

There is a simple Mod Config for the Explorer. You can access the settings via the "Options" page of the main menu.

Main Menu Toggle (KeyCode) | Default: F7

  • See this article for a full list of all accepted KeyCodes.

Default Window Size (Vector2) | Default: x: 550, y: 700

  • Sets the default width and height for all Explorer windows when created.

Default Items per Page (int) | Default: 20

  • Sets the default items per page when viewing lists or search results.

Enable Bitwise Editing (bool) | Default: false

  • Whether or not to show the Bitwise Editing helper when inspecting integers

Enable Tab View (bool) | Default: true

  • Whether or not all inspector windows a grouped into a single window with tabs.

Default Output Path (string) | Default: Mods\Explorer

  • Where output is generated to, by default (for Texture PNG saving, etc).

Mouse Control

Explorer can force the mouse to be visible and unlocked when the menu is open, if you have enabled "Force Unlock Mouse" (Left-Alt toggle). Explorer also attempts to prevent clicking-through onto the game behind the Explorer menu.

If you need more mouse control:

  • For VRChat, use VRCExplorerMouseControl
  • For Hellpoint, use HPExplorerMouseControl
  • You can create your own plugin using one of the two plugins above as an example. Usually only a few simple Harmony patches are needed to fix the problem.

For example:

using Explorer;
using Harmony; // or 'using HarmonyLib;' for BepInEx
// ...
// You will need to figure out the relevant Class and Method for your game using dnSpy.
[HarmonyPatch(typeof(MyGame.InputManager), nameof(MyGame.InputManager.Update))]
public class InputManager_Update
{
    [HarmonyPrefix]
    public static bool Prefix()
    {
        // prevent method running if menu open, let it run if not.
        return !ExplorerCore.ShowMenu;
    }
}

Building

If you'd like to build this yourself, you will need to have installed BepInEx and/or MelonLoader for at least one Unity game. If you want to build all 4 versions, you will need at least one Il2Cpp and one Mono game, with BepInEx and MelonLoader installed for both.

  1. Install MelonLoader or BepInEx for your game.
  2. Open the src\Explorer.csproj file in a text editor.
  3. Set the relevant GameFolder values for the versions you want to build, eg. set MLCppGameFolder if you want to build for a MelonLoader Il2Cpp game.
  4. Open the src\Explorer.sln project.
  5. Select Solution 'Explorer' (1 of 1 project) in the Solution Explorer panel, and set the Active config property to the version you want to build, then build it.
  6. The DLLs are built to the Release\ folder in the root of the repository.
  7. If ILRepack fails or is missing, use the NuGet package manager to re-install ILRepack.Lib.MSBuild.Task, then re-build.

Credits

Written by Sinai.

Thanks to:

  • ManlyMarco for their Runtime Unity Editor, which I used for the REPL Console and the "Find instances" snippet, and the UI style.
  • denikson for mcs-unity. I commented out the SkipVisibilityExt constructor since it was causing an exception with the Hook it attempted.