lib | ||
resources | ||
src | ||
.gitattributes | ||
.gitignore | ||
icon.png | ||
LICENSE | ||
overview.png | ||
README.md |
An in-game explorer and a suite of debugging tools for IL2CPP and Mono Unity games, to aid with modding development.
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).
Features
Click here for an image overview of UnityExplorer
- 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
BepInEx
- Install BepInEx for your game.
- Download the UnityExplorer release for BepInEx IL2CPP or Mono above.
- Take the
UnityExplorer.dll
file and put it in[GameFolder]\BepInEx\plugins\
- Take the
UnityExplorer\
folder (withexplorerui.bundle
) and put it in[GameFolder]\Mods\
, so it looks like[GameFolder]\Mods\UnityExplorer\explorerui.bundle
. - In IL2CPP, it is highly recommended to get the base Unity libs for the game's Unity version and put them in the
BepInEx\unhollowed\base\
folder.
MelonLoader
- Install MelonLoader for your game.
- Download the UnityExplorer release for MelonLoader IL2CPP or Mono above.
- Take the contents of the release and put it in the
[GameFolder]\Mods\
folder. It should look like[GameFolder]\Mods\UnityExplorer.dll
and[GameFolder]\Mods\UnityExplorer\explorerui.bundle
.
Mod Config
You can access the settings via the "Options" page of the main menu, or directly from the config at Mods\UnityExplorer\config.xml
(generated after first launch).
Main Menu Toggle
(KeyCode)
- Default:
F7
- See this article for a full list of all accepted KeyCodes.
Force Unlock Mouse
(bool)
- Default:
true
- Forces the cursor to be unlocked and visible while the UnityExplorer menu is open, and prevents anything else taking control.
Default Page Limit
(int)
- Default:
25
- Sets the default items per page when viewing lists or search results.
- Requires a restart to take effect, apart from Reflection Inspector tabs.
Default Output Path
(string)
- Default:
Mods\Explorer
- Where output is generated to, by default (for Texture PNG saving, etc).
- Currently this is not actually used for anything, but it will be soon.
Log Unity Debug
(bool)
- Default:
false
- Listens for Unity
Debug.Log
messages and prints them to UnityExplorer's log.
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.
- Install MelonLoader or BepInEx for your game.
- Open the
src\Explorer.csproj
file in a text editor. - Set the relevant
GameFolder
values for the versions you want to build, eg. setMLCppGameFolder
if you want to build for a MelonLoader IL2CPP game. - Open the
src\Explorer.sln
project. - Select
Solution 'UnityExplorer' (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. - The DLLs are built to the
Release\
folder in the root of the repository. - 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 some aspects of the C# Console and Auto-Complete features.
- denikson (aka Horse) for mcs-unity. I commented out the
SkipVisibilityExt
constructor since it was causing an exception with the Hook it attempted in IL2CPP.