我正在统一制作一个小游戏,现在我正在尝试构建任务系统。 这个游戏将是一个模拟游戏,因此任务必须与大量不同的数据类/系统进行交互。 我可以只制作一堆实用程序类...或者甚至制作一个假的“数据库”来处理数据调用...但这并不优雅。
肯定有一种方法可以让我只表示字符串中的实际代码吗?
例子:
String questText = Hello player.getFullName();, how are you?
questResults<String>[1] = player.inventory.add(GameObjectBuilder.Create(new WhateverObject()));
我正在使用 Unity 的 ScriptableObject
进行任务,这样我就可以通过编辑器填写文本数据,而不是在 IDE 端完成(特别是因为 unity 不支持内插和复合字符串,因为据我所知)。
我知道 Java 有一个称为“反射”的 API,据我所知,它可以做类似这样的事情,但我一直无法完全理解它。
那么如何将字符串中的元素转换为可运行的代码呢?
如果可能的话,是否会导致不确定数量的对象遇到需要转换的脚本时出现性能问题?
是否有任何其他替代方法可以实现类似的目标? (这个只是好奇)
最佳答案
作为替代方法,您可以使用搜索和替换的关键字,而不是将实际代码直接写入字符串。我建议使用这种方法,因为它更易读且更易于维护。我在类似的系统中使用过这种方法。
如果您只需要解决少量的可能性(或者您不介意为所有关键字添加“处理程序”),它会很好地工作。您可以在文本中包含一种关键字,您可以在使用之前通过一个方法。
例如..
你好{PLAYER_NAME},你好吗?
- 这是原始字符串。
public string ParseQuestText(string input)
{
if(input.contains("{PLAYER_NAME}")
input.Replace("{PLAYER_NAME}",player.getFullName());
/Add other replacers here
return input;
}
关于c# - 如何将字符串转换为可运行代码? (在统一中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55173631/