Skip to content

orcun9988/UnityResolve.hpp

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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

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

转存储到文件 (DumpToFile)

UnityResolve::DumpToFile("./Dump.cs");

创建C#字符串 (Create C# String)

const auto str     = UnityResolve::UnityType::String::New("string | 字符串");
std::string cppStr = str.ToString();

创建C#数组 (Create C# Array)

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

获取实例 (Obtaining an instance)

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

世界坐标转屏幕坐标 (WorldToScreenPoint)

Camera* pCamera = UnityResolve::UnityType::Camera::GetMain();
Vector3 point   = pCamera->WorldToScreenPoint(Vector3, Eye::Left);

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 100.0%