Note
有新的功能建议或者Bug可以提交Issues
New feature suggestions or bugs can be submitted as issues.
如果在调用Unity函数时发生崩溃情况可以使用以下方法解决 (仅il2cpp)
If a crash occurs when calling Unity functions, you can use the following methods to resolve it. (il2cpp only)__try { // your code // if error C2712 [&]() { // your code }(); } __except (EXCEPTION_EXECUTE_HANDLER) { return; }
- 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...
- DumpToFile
- 修改静态变量值 (Modifying the value of a static variable)
- 获取实例 (Obtaining an instance)
- More...
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
// C# GC Attach
UnityResolve::ThreadAttach();
// C# GC Detach
UnityResolve::ThreadDetach();const auto assembly = UnityResolve::Get("assembly.dll | 程序集名称.dll");
const auto pClass = assembly->Get("className | 类名称");
// assembly->Get("className | 类名称", "*");
// assembly->Get("className | 类名称", "namespace | 空间命名");
const auto field = pClass->Get<UnityResolve::Field>("Field | 变量名");
const auto fieldOffset = pClass->Get<std::int32_t>("Field | 变量名");
const auto method = pClass->Get<UnityResolve::Method>("Method | 函数名");
// pClass->Get<UnityResolve::Method>("Method | 函数名", { "System.String" });
// pClass->Get<UnityResolve::Method>("Method | 函数名", { "*", "System.String" });
// pClass->Get<UnityResolve::Method>("Method | 函数名", { "*", "", "System.String" });
// pClass->Get<UnityResolve::Method>("Method | 函数名", { "*", "System.Int32", "System.String" });
// pClass->Get<UnityResolve::Method>("Method | 函数名", { "*", "System.Int32", "System.String", "*" });
// "*" == ""
const auto functionPtr = method->function;
const auto method1 = pClass->Get<Method>("method name1 | 函数名称1");
const auto method2 = pClass->Get<Method>("method name2 | 函数名称2");
method1->Invoke<int>(114, 514, "114514");
// Invoke<return type>(args...);
const auto ptr = method2->Cast<void, int, bool>();
// Cast<return type, args...>(void);
ptr(114514, true);UnityResolve::DumpToFile("./Dump.cs");const auto str = UnityResolve::UnityType::String::New("string | 字符串");
std::string cppStr = str.ToString();const auto assembly = UnityResolve::Get("assembly.dll | 程序集名称.dll");
const auto pClass = assembly->Get("className | 类名称");
const auto array = UnityResolve::UnityType::Array::New(pClass, size);
std::vector<T> cppVector = array.ToVector();const auto assembly = UnityResolve::Get("assembly.dll | 程序集名称.dll");
const auto pClass = assembly->Get("className | 类名称");
std::vector<Player*> playerVector = pClass->FindObjectsByType<Player*>();
// FindObjectsByType<return type>(void);
playerVector.size();Camera* pCamera = UnityResolve::UnityType::Camera::GetMain();
Vector3 point = pCamera->WorldToScreenPoint(Vector3, Eye::Left);