我正在统一制作一个小游戏,现在我正在尝试构建任务系统。 该游戏将是模拟游戏,因此任务将不得不与大量不同的数据类/系统进行交互。 我可以仅仅创建一堆实用程序类...甚至创建一个假的“数据库”来处理数据调用...但这太不雅观了。
肯定有一种方法可以让我只从字符串中表示实际代码吗?
示例:
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,据我了解,它可以执行类似的操作,但是我始终无法完全解决。
那么如何将元素从字符串转换为可运行的代码?
如果可能的话,这会导致性能不确定的对象数量不确定,可能遇到需要转换的脚本吗?
是否有其他替代方法可以实现类似的目标? (这只是一种好奇)
答案 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;
}