c#如何将其他项目的方法调用重定向到自己的方法
本文关键字:方法 调用 重定向 自己的 项目 其他 | 更新日期: 2023-09-27 18:03:17
我正在使用Unity,并希望用户能够创建自己的程序,将在运行项目中执行。
我想创建一些API来完成项目内的工作(比如生成一个实体)
class Foo
{
void SpawnEntity()
{
//Code to spawn entity
}
}
用户应该能够提交他们自己的代码作为.dll文件与一个方法,将被执行
class Userclass
{
void MyCode()
{
//Their code would have to use some kind of API to do something in the game
Foo.SpawnEntity();
}
}
我想有一个像
namespace APIS
{
class Foo
{
void SpawnEntity()
{
//This method does not contain actual code
}
}
}
在用户提交的.dll文件中,这将导致
class Userclass
{
void MyCode()
{
//Their code would have to use some kind of API to do something in the game
APIS.Foo.SpawnEntity();
}
}
我的问题是,如果我可以用一个已经在游戏代码中编译的方法覆盖APIS.Foo.SpawnEntity()
,如
namespace UnityEngine
{
class Foo
{
void SpawnEntity()
{
//The actual code that does something in the game
}
}
}
到目前为止,我只发现了在外部。dll文件中调用方法并获得其返回值的示例,但没有实际覆盖这些。dll文件中的方法以改变调用程序中的内容的示例(在这种情况下是Unity游戏)。这在c#中是可能的吗?
提前谢谢你
编辑:在c#中可能不可能,使用脚本语言
标准方法:嵌入脚本语言。
已经有很多插件可以为unity提供这种功能,从Lua到JS,甚至c#(尽管c#很棘手,因为苹果已经禁止在iOS上使用这种脚本)。
外部脚本语言有几个主要的好处:
- 你的观众可能不知道你正在使用的语言(c#);你可以给他们多个选项
- 他们只能访问你显式传递给脚本语言子系统的类和方法;这大大减少了他们搞砸的机会,并使他们更容易(他们有更少的API文档要阅读,等等)
- 如果脚本系统崩溃,你可以保持游戏运行,甚至在游戏运行时自动重置脚本系统。
- 你可以给用户提供他们脚本的性能信息,通过测量每帧的脚本系统。