c# - 如何将字符串转换为可运行代码?(在统一中)
问题描述
我正在统一制作一个小游戏,现在我正在尝试构建任务系统。该游戏将是一个模拟游戏,因此任务将不得不与之交互的大量不同的数据类/系统。我可以制作一堆实用程序类......甚至制作一个假的“数据库”来处理数据调用......但这很不雅。
肯定有一种方法可以让我只用字符串表示实际代码吗?
例子:
String questText = Hello player.getFullName();, how are you?
questResults<String>[1] = player.inventory.add(GameObjectBuilder.Create(new WhateverObject()));
我正在使用 UnityScriptableObject
进行任务,这样我就可以通过编辑器填写文本数据,而不是在 IDE 端进行(尤其是据我所知,Unity 不支持插值和复合字符串)。
我知道 Java 有一个名为“Reflection”的 API,据我所知,它会做这样的事情,但我从来没有完全理解它。
那么如何将字符串中的元素转换为可运行的代码呢?
如果可能的话,这是否会导致性能问题与可能遇到需要转换的脚本的对象数量不定?
是否有其他替代方法可以实现类似目标?(这只是一个好奇)
解决方案
作为替代方法,您可以使用搜索和替换的关键字,而不是将实际代码直接写入字符串。我建议使用这种方法,因为它更易于阅读且更易于维护。我在类似的系统中使用过这种方法。
如果您只需要解决少量的可能性(或者您不介意为所有关键字添加“处理程序”。您可以在文本中包含一种关键字,您可以通过使用之前的方法。
例如..
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;
}
推荐阅读
- django - Django:在模型级别而不是列级别应用验证器
- cypress - 赛普拉斯测试通过了单个表单输入字段,但忽略了以下输入字段
- python - 从嵌入列中的列表中提取元素
- python - 我的 python 气泵代码有什么问题?
- ios - 如何在 Swift 中向自定义 DateComponent 添加分钟
- python - 将列表中的唯一元素附加到新列表
- wordpress - AMP 上的 Google 表单是否需要 HTTPS?
- extreact - Sencha extJs/exreact 6/7 Tree 获取选中记录
- python - 排序算法不会产生正确的输出
- c++ - 我试图让它从文件中打印一些东西,它正在打印这些奇怪的东西