关于Unity引擎开发使用BepInEx的游戏mod制作

个人建议看这篇专栏,讲得更好

https://blog.csdn.net/Terry13143/article/details/153626365

0 准备

准备好下载以下软件:

  • Unity引擎
  • BepInEx 教程 https://blog.csdn.net/qq_25775935/article/details/152817208
  • Visual Studio(选择.NET桌面开发和使用Unity的游戏开发) P.S. 在选择使用Unity的游戏开发时不要勾选Unity Hub,因为VS自带的Hub版本太低
  • 反编译工具,如dnSpy,ILSpy等等
  • 解包游戏资源工具,如AssetRipper.GUI.Free.exe 等等

1 游戏对象信息

1.1Unity版本

打开游戏目录,找到其中的UnityPlayer.dll,将光标停留在上面就会显示版本号。

1.2 Mod框架

Unity打包的时候会有两种选择,分别为Mono和IL2CPP。其中Mono反编译可直接看到代码,而IL2CPP不行。如果在游戏目录中看到GameAssembly.dll就是IL2CPP。

1.3 .NET框架

打开游戏文件目录,打开<Game Name>_data/Managed,如果发现有netstand.dll就为net472

如果mscorlib.dll的版本大于4就选择net46,其他所有情况都选择net35.

2 创建一个hello world mod

首先打开VS,创建一个C#的.NET Framework类库。框架使用1.3中得到的框架。创建好项目后先在解决方案资源管理器中右键引用,选择添加引用。

其中游戏data:

"Assembly-CSharp.dll","UnityEngine.dll"
// 可选复制文件
"UnityEngine.CoreModule.dll","UnityEngine.UI.dll"

BepInEx:

"0Harmony.dll","BepInEx.dll","BepInEx.Harmony.dll"

输入:

void Update()
{
    if(Input.GetKeyDown(keyCode.f12))//检测输入
        {
            
        }
}
//引用使用UnityEngineLegacyModule.dll

这里讲一下awake(),start()与update():

awake():

Awake() 是 Unity 游戏引擎中的一个特殊方法,属于 MonoBehaviour 类。它在脚本实例被加载时自动调用,无论脚本是否启用。Awake() 通常用于初始化变量、设置引用或执行其他需要在游戏开始前完成的准备工作。

使用 Awake() 的场景

Awake() 适合用于初始化不依赖于其他对象的变量或组件。例如,设置本地变量、获取附加到同一游戏对象的组件引用,或执行不需要等待其他脚本初始化的操作。由于 Awake() 在脚本禁用时也会调用,它适合执行那些即使脚本被禁用也需要完成的工作。

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    private Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
        Debug.Log("Awake called");
    }

    void Start()
    {
        Debug.Log("Start called");
    }
}
 

start():

Start() 方法在脚本实例初始化后仅调用一次,通常用于初始化变量、设置初始状态或执行只需运行一次的代码。它的调用时机是在所有 Awake() 方法执行完毕之后,但在第一次 Update() 之前。

Awake() 和 Start() 都是 Unity 的初始化方法,但它们在调用时机上有区别。Awake() 在脚本加载时立即调用,而 Start() 在脚本启用后、第一帧更新之前调用。

void Start() {
    // 初始化游戏对象或变量
    Debug.Log("Start 方法被调用");
}
 

update():

Update() 方法在每一帧渲染前都会被调用,通常用于处理实时逻辑,如玩家输入、物理模拟或游戏状态更新。它的调用频率取决于游戏的帧率(FPS)。

void Update() {
    // 每帧执行的逻辑
    Debug.Log("Update 方法被调用");
}
 

因为Update() 每帧执行一次,所以Update() 中的代码应尽量高效,避免复杂计算,否则可能影响游戏性能。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值