Note
有新的功能建议或者Bug可以提交Issues
New feature suggestions or bugs can be submitted as issues.
如果在调用Unity函数时发生崩溃情况可以使用以下方法解决
If a crash occurs when calling Unity functions, you can use the following methods to resolve it.__try { // your code // if error C2712 [&]() { // your code }(); } __except (EXCEPTION_EXECUTE_HANDLER) { return; }
UnityResolve.hpp
类型 (Type)
- Camera
- Transform
- Component
- Object (Unity)
- LayerMask
- Rigidbody
- Physics
- GameObject
- Collider
- Vector4
- Vector3
- Vector2
- Quaternion
- Bounds
- Plane
- Ray
- Rect
- Color
- Matrix4x4
- Array
- String
- Object (C#)
- List
- Dictionary
- More...
功能 (Function)
- DumpToFile
- 修改静态变量值 (Modifying the value of a static variable)
- 获取实例 (Obtaining an instance)
- More...
初始化 (Initialization)
UnityResolve::Init(GetModuleHandle(L"GameAssembly.dll | mono.dll"), UnityResolve::Mode::Auto);
参数1: dll句柄
Parameter 1: DLL handle
参数2: 使用模式
Parameter 2: Usage mode
- Mode::Il2cpp
- Mode::Mono
- Mode::Auto
附加线程 (Thread Attach / Detach)
// C# GC Attach
UnityResolve::ThreadAttach();
// C# GC Detach
UnityResolve::ThreadDetach();
获取函数地址及调用 (Obtaining Function Addresses and Invoking)
const auto classes = UnityResolve::assembly["assembly name.dll | 程序集名称.dll"]->classes;
auto klass = classes["class name | 类名称"];
const auto field = klass->Get<UnityResolve::Field>("Field | 变量名");
const auto method = klass->Get<UnityResolve::Method>("Method | 函数名");
const auto functionPtr = method->function;
const auto method1 = klass->methods["method name1 | 函数名称1"];
const auto method2 = klass->methods["method name2 | 函数名称2"];
method1->Invoke<int>(114, 514, "114514");
const auto ptr = method2->Cast<void, int, bool>();
ptr(114514, true);
转存储到文件 (DumpToFile)
UnityResolve::DumpToFile("./Dump.cs");
创建C#字符串 (Create C# String)
auto str = UnityResolve::UnityType::String::New("string | 字符串");
std::string cppStr = str.ToString();
创建C#数组 (Create C# Array)
const auto classes = UnityResolve::assembly["assembly name.dll | 程序集名称.dll"]->classes;
auto klass = classes["class name | 类名称"];
auto array = UnityResolve::UnityType::Array::New(klass, size);
std::vector<T> cppVector = array.ToVector();
获取实例 (Obtaining an instance)
const auto ass = UnityResolve::assembly["Assembly-CSharp.dll"];
const auto klass = ass->classes["Player"];
std::vector<Player*> playerVector = klass->FindObjectsByType<Player*>();
playerVector.size();
世界坐标转屏幕坐标 (WorldToScreenPoint)
Camera* pCamera = UnityResolve::UnityType::Camera::GetMain();
Vector3 point = pCamera->WorldToScreenPoint(Vector3, Eye::Left);