/UnityResolve.hpp

Unity引擎C++接口 | Unity Engine C++ API | Mono/il2cpp

Primary LanguageC++MIT LicenseMIT

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);