首页 > 解决方案 > 如何将字符串转换为可运行代码?(在统一中)

问题描述

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

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

例子:

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

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

我正在使用 UnityScriptableObject进行任务,这样我就可以通过编辑器填写文本数据,而不是在 IDE 端进行(尤其是据我所知,Unity 不支持插值和复合字符串)。

我知道 Java 有一个名为“Reflection”的 API,据我所知,它会做这样的事情,但我从来没有完全理解它。

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

如果可能的话,这是否会导致性能问题与可能遇到需要转换的脚本的对象数量不定?

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

标签: c#unity3dscriptingcompilation

解决方案


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

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

例如..

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;
}

推荐阅读