如何将字符串转换为可运行的代码? (在Unity中)

时间:2019-03-14 23:46:26

标签: c# unity3d scripting compilation

我正在统一制作一个小游戏,现在我正在尝试构建任务系统。 该游戏将是模拟游戏,因此任务将不得不与大量不同的数据类/系统进行交互。 我可以仅仅创建一堆实用程序类...甚至创建一个假的“数据库”来处理数据调用...但这太不雅观了。

肯定有一种方法可以让我只从字符串中表示实际代码吗?

示例:

String questText = Hello player.getFullName();, how are you?

questResults<String>[1] = player.inventory.add(GameObjectBuilder.Create(new WhateverObject()));

我正在使用Unity的ScriptableObject进行查询,因此我可以通过编辑器填写文本数据,而不是在IDE端进行填充(尤其是因为unity不支持插值和复合字符串)知道)。

我知道Java有一个称为“ Reflection”的API,据我了解,它可以执行类似的操作,但是我始终无法完全解决。

那么如何将元素从字符串转换为可运行的代码?

如果可能的话,这会导致性能不确定的对象数量不确定,可能遇到需要转换的脚本吗?

是否有其他替代方法可以实现类似的目标? (这只是一种好奇)

1 个答案:

答案 0 :(得分:3)

作为一种替代方法,您可以使用要搜索和替换的关键字,而不是将实际代码直接写入字符串中。我建议使用这种方法,因为它更易于阅读且易于维护。我在类似的系统中使用了这种方法。

如果您只需要解决少数可能性(或者您不介意为所有关键字添加“处理程序”),则效果很好。您可以在文本中包含某种关键字,可以在使用方法之前先通过它。

例如。

Hello {PLAYER_NAME}, how are you?-这是原始字符串。

public string ParseQuestText(string input)
{
    if(input.contains("{PLAYER_NAME}")
        input.Replace("{PLAYER_NAME}",player.getFullName());

    /Add other replacers here

    return input;
}