我见过许多 Unity 游戏被修改过,但通常使用 Thunderstore 之类的外部工具。这是我希望我的 mod 系统如何工作:
当我的游戏打开时,它会从 Appdata/locallow/myGame/Mods/myMod/ 读取代码文件,而不是像 json 这样的数据文件。该文件中的示例方法:
override void Start()
{
MyGame.RegisterItem("Example item name", "example_item_name")
}
然后,当我的 Unity 游戏检测到调用此方法时,它会运行一些 Unity 代码。如果可以的话,这可能吗?如果不可能,我能接近多远? 我听说过 CSC 和 Roselyn,但我无法让它们统一工作,尽管我安装了 nuget 包,但 Microsoft.CodeAnalysis.CSharp 无法解析。
提前致谢
您可以使用字典来保存针对字符串标签的函数:link
using System.Collections.Generic;
using System;
static int Add(int a, int b)
{
return a + b;
}
static int Sub(int a, int b)
{
return a - b;
}
Dictionary<String, Func<int,int, int>> methods = new Dictionary<String, Func<int, int, int>>();
int start()
{
Func < int, int, int> addFunc = Add;
Func < int, int, int> subFunc = Sub;
methods.Add("ItemOne", addFunc);
methods.Add("ItemTwo", subFunc);
if (methods.ContainsKey("ItemOne"))
{
int value = methods["ItemOne"](5,10);
Console.WriteLine(value);
}
if (methods.ContainsKey("ItemTwo"))
{
int value = methods["ItemTwo"](5, 10);
Console.WriteLine(value);
}
Console.ReadLine();
return 1;
}
start();
输出: