UnityExplorer/README.md
2021-06-03 02:48:14 +10:00

7.5 KiB

🔍 An in-game UI for exploring, debugging and modifying Unity games.

Supports most Unity versions from 5.2 to >2020 (IL2CPP and Mono).

Enjoy this tool? Consider supporting me on ko-fi!

Releases

BepInEx

Release IL2CPP Mono
BIE 6.X link link
BIE 5.X ✖️ n/a link
  1. Take the UnityExplorer.BIE.[version].dll file and put it in BepInEx\plugins\
  2. In IL2CPP, you will need to download the Unity libs for the game's Unity version, create a folder BepInEx\unity-libs\, then extract the Unity libs into this folder.

Note: BepInEx 6 is obtainable via BepisBuilds

MelonLoader

Release IL2CPP Mono
ML 0.3.1+ link link
ML 0.3.0 link link
  1. Take the UnityExplorer.ML.[version].dll file and put it in the Mods\ folder created by MelonLoader.

Standalone

IL2CPP Mono
link link

The standalone release can be used with any injector or loader of your choice, but it requires you to load the dependencies manually: HarmonyX, and the IL2CPP version also requires that you set up an Il2CppAssemblyUnhollower runtime.

  1. Load the required libs - HarmonyX, and Il2CppAssemblyUnhollower if IL2CPP
  2. Load the UnityExplorer DLL
  3. Create an instance of Unity Explorer with UnityExplorer.ExplorerStandalone.CreateInstance();
  4. Optionally subscribe to the ExplorerStandalone.OnLog event to handle logging if you wish

Known issues

  • Any MissingMethodException or NotSupportedException: please report the issue and provide a copy of your mod loader log and/or Unity log.
  • In IL2CPP, some IEnumerable and IDictionary types may fail enumeration. Waiting for the Unhollower rewrite to address this any further.
  • The C# Console's completions have some minor issues such as not suggestion global classes which have no namespace, and erronously suggesting classes from using directives when they shouldn't be suggested. These are issues with mcs itself which I am looking into.

Features

Object Explorer

  • Use the Scene Explorer tab to traverse the active scenes, as well as the DontDestroyOnLoad scene and the HideAndDontSave "scene" (assets and hidden objects).
  • Use the Object Search tab to search for Unity objects (including GameObjects, Components, etc), C# Singletons or Static Classes.

Inspector

  • The inspector is used to see detailed information on GameObjects (GameObject Inspector), C# objects (Reflection Inspector) and C# classes (Static Inspector).
    • In the GameObject Inspector, you can edit any of the input fields in the inspector (excluding readonly fields) and press Enter to apply your changes. You can also do this to the GameObject path as a way to change the GameObject's parent. Press the Escape key to cancel your edits.
    • In the Reflection Inspectors, automatic updating is not enabled by default, and you must press Apply for any changes you make to take effect.

C# Console

  • The C# Console uses the Mono.CSharp.Evaluator to define temporary classes or run immediate REPL code.
  • See the "Help" dropdown in the C# console menu for more detailed information.

Mouse-Inspect

  • The "Mouse Inspect" dropdown on the main UnityExplorer navbar allows you to inspect objects under the mouse.
    • World: uses Physics.Raycast to look for Colliders
    • UI: uses GraphicRaycasters to find UI objects

Settings

  • You can change the settings via the "Options" page of the main menu, or directly from the config file.
  • Depending on the release you are using, the config file will be found at:
    • BepInEx: BepInEx\config\com.sinai.unityexplorer.cfg
    • MelonLoader: UserData\MelonPreferences.cfg
    • Standalone {DLL_location}\UnityExplorer\config.ini

Building

If you fork the repository on GitHub you can build using the dotnet workflow:

  1. Click on the Actions tab and enable workflows in your repository
  2. Click on the "Build UnityExplorer" workflow, then click "Run Workflow" and run it manually, or make a new commit to trigger the workflow.
  3. Take the artifact from the completed run.

For Visual Studio:

  1. Clone the repository and run git submodule update --init --recursive to get the submodules.
  2. Open the src\UnityExplorer.sln project.
  3. Build mcs, and if using IL2CPP then build UnhollowerBaseLib as well.
  4. Build the UnityExplorer release(s) you want to use, either by selecting the config as the Active Config, or batch-building.

Acknowledgments

Disclaimer

UnityExplorer is in no way associated with Unity Technologies. "Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere.