javascript - 是否可以使用 Lua/Javascript 脚本使用新变量扩展 C# 对象?

标签 javascript c# lua scripting

假设我有 C# 类:

class Player {
  string Name;
  int HitPoints
}

我想为我的游戏添加模组/脚本支持,用户可以使用他自己的变量来扩展它。 (比如说“bool StartedKill5RatsQuest”)然后对他来说访问他的参数或默认参数是一样的。

用户脚本:

player.HP = 10;
player.StartedKill5RatsQuest = true;

是否可以使用任何众所周知的脚本语言来实现?

最佳答案

您不能直接这样做。但是,通过引入一组内部“变量”可以获得类似的功能:

Dictionary<string, object> _scriptVariables = new Dictionary<string, object>();

有了这个,您可以为您的玩家提供一组创建/获取/设置他们的“变量”的方法,例如:

public void CreateVariable<T> ( string name, T defaultValue );
public void Set<T> (string name, T value );
public T Get<T> ( string name );
etc...

这些方法会访问您的字典并操纵其值,因此您的用户可能会这样写:

public void Initialize()
{
    player.CreateVariable<int>("HP");
    player.CreateVariable<bool>("StartedKill5RatsQuest");

    player.Set("HP", 10);
    player.Set("StartedKill5RatsQuest", true);
}

public void Update()
{
     ...
     if(player.Get<bool>("StartedKill5RatsQuest"))
     {
         ...
     }
}

这比直接成员操作更冗长,在类中实现支持方法时,您应该对类型有所了解,但它可以完成工作。

关于javascript - 是否可以使用 Lua/Javascript 脚本使用新变量扩展 C# 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49231900/

相关文章:

javascript - 创建一个将参数转换为数组的函数

javascript - 如何检索包含句点的 JavaScript 属性

c# - 枚举值 `Browsable(false)`

javascript - 如何使用 php 将动态输入字段的值输入到 mysql 数据库中

javascript - 等到所有 jQuery Ajax 请求完成?

c# - 如何在 ASP.NET MVC 中使用选择列表返回多个值?

c# - 消息解析器 C#

lua - 如何在修改后重新加载/usr/lib/lua/luci/dispatcher.lua而不重新启动板?

floating-point - 表索引中的 Lua 浮点错误

math - 自定义对数Lua(答案有几乎可以在任何语言上使用的技巧)