Giter Site home page Giter Site logo

dvgco / unityresolve.hpp Goto Github PK

View Code? Open in Web Editor NEW

This project forked from issuimo/unityresolve.hpp

0.0 0.0 0.0 394 KB

Unity引擎C++接口 | Unity Engine C++ API | Mono/il2cpp | 支持 Windows, Android, Linux | Game Cheat | 游戏作弊

License: MIT License

C++ 100.00%

unityresolve.hpp's Introduction

Note

有新的功能建议或者Bug可以提交Issues (当然你也可以尝试自己修改代码后提交到该仓库
New feature suggestions or bugs can be commit as issues. Of course, you can also try modifying the code yourself and then commit it to the repository.

Dome


简要概述 (Brief overview)


UnityResolve.hpp

支持的平台 (Supported platforms)

  • Windows
  • Android
  • Linux

类型 (Type)

  • Camera
  • Transform
  • Component
  • Object (Unity)
  • LayerMask
  • Rigidbody
  • MonoBehaviour
  • Renderer
  • Mesh
  • Behaviour
  • Physics
  • GameObject
  • Collider
  • Vector4
  • Vector3
  • Vector2
  • Quaternion
  • Bounds
  • Plane
  • Ray
  • Rect
  • Color
  • Matrix4x4
  • Array
  • String
  • Object (C#)
  • Type (C#)
  • List
  • Dictionary
  • Animator
  • CapsuleCollider
  • BoxCollider
  • More...

功能 (Function)

  • DumpToFile
  • 附加线程 (Thread Attach / Detach)
  • 修改静态变量值 (Modifying the value of a static variable)
  • 获取对象 (Obtaining an instance)
  • 创建C#字符串 (Create C# String)
  • 创建C#数组 (Create C# Array)
  • 创建C#对象 (Create C# instance)
  • 世界坐标转屏幕坐标/屏幕坐标转世界坐标 (WorldToScreenPoint/ScreenToWorldPoint)
  • 获取继承子类的名称 (Get the name of the inherited subclass)
  • 获取函数地址(变量偏移) 及调用(修改/获取) (Get the function address (variable offset) and invoke (modify/get))
  • 获取Gameobject组件 (Get GameObject component)
  • More...

功能使用 (How to use)


更改平台 (Change platform)

#define WINDOWS_MODE 1 // 如果需要请改为 1 | 1 if you need
#define ANDROID_MODE 0
#define LINUX_MODE 0

初始化 (Initialization)

UnityResolve::Init(GetModuleHandle(L"GameAssembly.dll | mono.dll"), UnityResolve::Mode::Mono);
// Linux or Android
UnityResolve::Init(dlopen(L"GameAssembly.so | mono.so", RTLD_NOW), UnityResolve::Mode::Mono);

参数1: dll句柄
Parameter 1: DLL handle
参数2: 使用模式
Parameter 2: Usage mode

  • Mode::Il2cpp
  • Mode::Mono

附加线程 (Thread Attach / Detach)

// C# GC Attach
UnityResolve::ThreadAttach();

// C# GC Detach
UnityResolve::ThreadDetach();

获取函数地址(变量偏移) 及调用(修改/获取) (Get the function address (variable offset) and invoke (modify/get))

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 Name | 变量名");
const auto fieldOffset = pClass->Get<std::int32_t>("Field Name | 变量名");
const int  time        = pClass->GetValue<int>(obj Instance | 对象地址, "time");
                      // pClass->GetValue(obj Instance*, name);
                       = pClass->SetValue<int>(obj Instance | 对象地址, "time", 114514);
                      // pClass->SetValue(obj Instance*, name, value);
const auto method      = pClass->Get<UnityResolve::Method>("Method Name | 函数名");
                      // pClass->Get<UnityResolve::Method>("Method Name | 函数名", { "System.String" });
                      // pClass->Get<UnityResolve::Method>("Method Name | 函数名", { "*", "System.String" });
                      // pClass->Get<UnityResolve::Method>("Method Name | 函数名", { "*", "", "System.String" });
                      // pClass->Get<UnityResolve::Method>("Method Name | 函数名", { "*", "System.Int32", "System.String" });
                      // pClass->Get<UnityResolve::Method>("Method Name | 函数名", { "*", "System.Int32", "System.String", "*" });
                      // "*" == ""

const auto functionPtr = method->function;

const auto method1 = pClass->Get<UnityResolve::Method>("method name1 | 函数名称1");
const auto method2 = pClass->Get<UnityResolve::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("./output/");

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

创建C#对象 (Create C# instance)

const auto assembly = UnityResolve::Get("assembly.dll | 程序集名称.dll");
const auto pClass   = assembly->Get("className | 类名称");
const auto pGame    = pClass->New<Game*>();

获取对象 (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/ScreenToWorldPoint)

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

获取继承子类的名称 (Get the name of the inherited subclass)

const auto assembly = UnityResolve::Get("UnityEngine.CoreModule.dll");
const auto pClass   = assembly->Get("MonoBehaviour");
Parent* pParent     = pClass->FindObjectsByType<Parent*>()[0];
std::string child   = pParent->GetType()->GetFullName();

获取Gameobject组件 (Get GameObject component)

std::vector<T*> objs = gameobj->GetComponents<T*>(UnityResolve::Get("assembly.dll")->Get("class")));
                    // gameobj->GetComponents<return type>(Class* component)
std::vector<T*> objs = gameobj->GetComponentsInChildren<T*>(UnityResolve::Get("assembly.dll")->Get("class")));
                    // gameobj->GetComponentsInChildren<return type>(Class* component)
std::vector<T*> objs = gameobj->GetComponentsInParent<T*>(UnityResolve::Get("assembly.dll")->Get("class")));
                    // gameobj->GetComponentsInParent<return type>(Class* component)

unityresolve.hpp's People

Contributors

issuimo avatar axhlzy avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.