Unity开发笔记

BepInEX框架

BepInEX项目配置

BepInEX使用外部资源

在Editor内使用unity官方的Assetbundle Browser生成ab包,loadfromfile导入游戏即可

可用Paths类获取插件所在路径

BepInEX与Unity Editor协作

在Editor内使用bepinex插件内的MonoBehaviour

直接在Editor里写空操作(只包含变量和方法的定义)MonoBehaviour组件在实际载入游戏时只有原版游戏的MonoBehaviour会被target,插件的则会因为找不到而不挂载

将插件dll添加到unity中并在inspector关闭自动引用和可用性检测即可

或者extren代码

对于游戏原版的Assembly-CSharp,同,可用dsSpy修改dll名

HarmonyX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var harmony = new Harmony("patch");

Class {}

//创建补丁1
[HarmonyPatch]
class Class_Patch {}

//2
class Class_Patch2
{
[HarmonyPatch()]
[HarmonyPatch()]
[HarmonyPrefix]
public static bool Methob () {}

}

//为所有Patch创建补丁实例,包括非本插件的
harmony.PatchAll();

//仅本dll
harmony.PatchAll( Assembly.GetAssembly( typeof(Class_Patch) ) );

//指定单独Patch
CreateAndPatchAll( typeof(Class_Patch) );

//unpatch一个类的prefix,但似乎不可用,目前只能unpatchself一个harmony实例
harmony.Unpatch( typeof(Class).GetMethob("methob"), HarmonyPatch.Perfix );

//真可用方法
harmony.UnpatchSelf();

BepInEX

Unity

1
2
3
4
5
6
7
8
9
10
11
12
//创建一个dontdestoryobj
DontDestoryObject( gameObject );

//创建一个static的class (下面成员必须static)
public static class Class{}

//`Awake()` 在 `Start()` 执行之前

//简单异步,,这里用了lamuda表达式
Task.Run( () => {
//方法...
});