C#重定向方法从其他项目调用自己的方法 - 如何?

时间:2016-08-19 10:06:38

标签: c# unity3d dll

我正在使用Unity,希望用户能够创建自己的程序,这些程序将在正在运行的项目中执行。

我想创建某种在项目中完成工作的API(比如产生一个实体)

exec("whoami");

用户应该能够使用一个将要执行的方法将自己的代码作为.dll文件提交

class Foo
{
 void SpawnEntity()
 {
  //Code to spawn entity
 }
}

我想过像

这样的东西
class Userclass
{
 void MyCode()
 {
  //Their code would have to use some kind of API to do something in the game
  Foo.SpawnEntity();
 }
}

在用户提交的.dll文件中,这将导致

namespace APIS
{
 class Foo
 {
  void SpawnEntity()
  {
   //This method does not contain actual code
  }
 }
}

我的问题是,我是否可以使用已在游戏代码中编译的方法覆盖方法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()

到目前为止,我只找到了在外部.dll文件中调用方法并获取其返回值的示例,但没有在这些.dll文件中实际覆盖方法的示例来更改调用程序中的内容(在本例中为Unity游戏) 。

这对C#来说是否可行?

提前谢谢

编辑:使用脚本语言

在C#中可能不可能

1 个答案:

答案 0 :(得分:1)

标准方法:嵌入脚本语言。

有多个插件可用于统一,从Lua到JS的各种语言,甚至是C#(尽管C#很棘手,因为Apple在iOS上禁止使用这种脚本)。

外部脚本语言有几个主要好处:

  1. 您的受众可能不知道您正在使用的语言(C#);你可以给他们多个选择
  2. 他们只能访问您明确传递给Scripting Language子系统的类和方法;这大大降低了他们搞乱的可能性,并使他们更容易(他们有更少的API文档可供阅读等)
  3. 如果脚本系统崩溃,您可以保持游戏运行,甚至在游戏运行时自动重置脚本系统。
  4. 您可以通过逐帧测量脚本系统,为用户提供脚本的性能信息。