Skip to main content

unity_helper

Runtime inspection toolkit for Unity IL2CPP applications — explore classes, methods, fields, and live objects in real time.

Python Platform License


✨ Overview

unity_helper is a Python toolkit for runtime inspection of Unity applications using the IL2CPP scripting backend. It provides reflection-like capabilities, allowing you to dynamically explore and interact with internal game structures directly from Python.


🚀 Features

  • Inspect Unity assemblies (images)
  • Explore classes, methods, and fields
  • Call methods dynamically at runtime
  • Read and modify field values
  • Interact with live Unity objects (Camera, Rigidbody, etc.)
  • Designed specifically for IL2CPP environments

⚡ Quick Start

from unity_helper import Il2cpp

ref = Il2cpp()

# Get a Unity class
time = ref.get_class_from_name(
    'UnityEngine.CoreModule.dll',
    'UnityEngine.Time'
)

print(time.name)

📦 Installation

pip install -U unity_helper

# optional: assembly support
pip install unity_helper[asm]

🧰 Requirements

  • Windows (64-bit)
  • Python 3.11+
  • Target application using Unity IL2CPP

🧪 Examples

🔹 Class & Method Inspection

time = ref.get_class_from_name(
    'UnityEngine.CoreModule.dll',
    'UnityEngine.Time'
)

print('Time info:', time.cls, time.name, time.object, time.type, time.instance)

for method in time.list_methods():
    print(
        'Method info:',
        method.name,
        method.address,
        method.methodInfo,
        method.is_static,
        method.param_count
    )

🔹 Calling Methods

import ctypes

set_timeScale = time.find_method('set_timeScale')
set_timeScale = time.method.set_timeScale # Getting a method the lazy way

if not set_timeScale.is_static:
    time.instance = 123456789

set_timeScale(ctypes.c_float(5)) # Invoke set_timeScale with an explicit native float type
set_timeScale_m(5.0) # Invoke set_timeScale with automatic type conversion

Using ctypes directly (most consistent):

new_set_timeScale = ctypes.WINFUNCTYPE(
    ctypes.c_void_p,
    ctypes.c_float
)(set_timeScale.address)

new_set_timeScale(5.0)

🔹 Field Access

for field in time.list_fields():
    print('Field:', field.name, field.type, field.is_static)

example_field = time.find_field('example_field')
example_field = time.field.example_field # Getting a field the lazy way


if not example_field.is_static:
    time.instance = 123456789

example_field.value = 9999

🔹 Working with Unity Objects

main_cam = ref.get_mainCamera()
rigidbody = unity_helper.objects.Rigidbody(123456789)

Rigidbody

velocity = rigidbody.velocity
velocity.y = 10
rigidbody.velocity = velocity

pos = rigidbody.position
print(pos.x, pos.y, pos.z)

Camera

fov = main_cam.fov
main_cam.fov = fov + 10.0

main_cam.enabled = not main_cam.enabled
print(main_cam.name)

🔹 Finding Objects

player = ref.find_object('Player')
player = ref.find_object_with_tag('Player')

🔹 Assemblies & Classes

for image in ref.list_assemblies():
    print(image.name, image.filename)

for clazz in ref.list_classes_in_image('Assembly-CSharp.dll'):
    print(clazz.name)

🎯 Common Use Cases

  • Runtime debugging of Unity applications
  • Reverse engineering IL2CPP builds
  • Building tooling and automation scripts
  • Inspecting and modifying live game state
  • Creating game mods

⚠️ Important Notes

  • This is a Python script that must be executed within the game's process.
  • It does not work as a standalone script and cannot interact with external processes.
  • Running it outside of the game environment will not work.
  • Directly calling a MonoMethod can lead to inconsistencies due to the vast number of underlying engine data types. For best results, dynamically create a WINFUNCTYPE or CFUNCTYPE wrapper and invoke it that way.

🔴 Known issues

  • None! All known bugs have been squashed. If you run into any unexpected behavior or crashes, please feel free to open an Issue on GitHub.

📝 Future Roadmap / TODO

  • Eliminate the pylocalmem dependency by reimplementing all required functions in memory.py using ReadProcessMemory, ensuring crash safety.
  • Add obfuscation detection and implement basic name de-obfuscation. (Experimental / Tentative)

📄 License

MIT License

Metadata

Release files for unity-helper 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for unity-helper 1.4.0
File Size Uploaded
unity_helper-1.4.0.tar.gz 29.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for unity-helper 1.4.0
File Interpreter ABI Platform
unity_helper-1.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 60.8 kB

Release files / unity_helper-1.4.0.tar.gz

Download URL unity_helper-1.4.0.tar.gz
Size 29.7 kB
Tags Source
SHA-256 checksum
How to use checksums
519eddee020b3c908e7eb0d9ba6d22abd28b75af25319fd21f1c8a5bfd8089e5
BLAKE2b-256 checksum
How to use checksums
74a8d2064c9c7bb544ce36a02c7c49a2ed110673a0d118d41a911fe8ea17edf4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / unity_helper-1.4.0-py3-none-any.whl

Download URL unity_helper-1.4.0-py3-none-any.whl
Size 31.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ad24c15ec06a05674b62c3aedd20534e0b1b8fea30899829c0131ed6439eabec
BLAKE2b-256 checksum
How to use checksums
ca38b8d21214f8913f45c36390933e27de654039d75282588f51cbacef53ac90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.4.1

2 release files

This release

1.4.0 This release

2 release files

1.3.9

2 release files

1.3.8

2 release files

1.3.7

2 release files

1.3.6

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.9

2 release files

1.2.8

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.9

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page