(unity二次开发)hook替换unity内部函数,如SceneView.GetMainCamera

有时想要修改unityeditor的行为,例如修改unity内部函数,来达到自己想要的行为。

一个方法是重定向函数指针,让它指向我们自己的函数。可以参考下面大神的方法

Detours: redirecting C# methods at runtime | tryfinally

如果你的工程不想打开unsafe 选项,可以考虑把上面文章里的代码编译成dll,然后放到unity下也能用。

使用例子:

 private static void test()
 {
var GetMainCameraMethod = typeof(SceneView).GetMethod("GetMainCamera", BindingFlags.NonPublic | BindingFlags.Static);
DetourUtility.TryDetourFromTo(
      GetMainCameraMethod, 
      dst: DetourUtility.MethodInfoForMethodCall(() => ReplaceSceneViewGetMainCamera()));

}

static Camera myCamera;
private static void ReplaceSceneViewGetMainCamera()
{
    return myCamera;
}

hook 关键代码,64位函数地址指令

(unity二次开发)hook替换unity内部函数,如SceneView.GetMainCamera_第1张图片

 

你可能感兴趣的:(unity,c#,游戏引擎)