使用Unity在UnityScript或C#中替换Eval()

时间:2013-12-08 14:00:13

标签: c# windows-phone-8 unity3d unityscript

据我所知,我的问题以前没有得到解答。我正在使用Unity为Windows Phone 8创建一个应用程序,我想获取用户的输入并将其作为代码执行。现在通常使用JavaScript,可以使用eval(“这里是代码”),但Unity不喜欢这样,并且说我的目标(WP8)不允许使用eval()。

所以我的问题是 - 如何在不使用eval()的情况下在EITHER C#或UnityScript中执行字符串代码,而不依赖于窗口或将脚本附加到文档 - 基本上它可以与Unity一起使用。

例如,如果我可以使用eval,我会这样做:eval(“createCuboid(0,1,2)”);

感谢您的帮助。

编辑: 所以我正在创建一个允许用户在GUI.TextField中输入一行代码的应用程序。当用户单击按钮时,它将获取其代码并运行它。在我的示例createCuboid(0,1,2)中,我有自己的函数,可以根据用户的规范创建一个长方体(如参数中所示)。

我想要这个的原因是因为我希望用户能够自由地操纵3D环境而不必做一些更加紧缩的事情 - 例如,必须点击带有createCuboid的按钮,然后输入参数多个领域。我有多个用户可以调用的函数来操作环境。

这有帮助吗?

1 个答案:

答案 0 :(得分:1)

为什么需要让用户编写代码? 那是非常危险的。如果你想允许用户在运行时创建对象(比如立方体),让用户选择他们想要创建的内容,使用字段来获取函数参数(在这里检查是否正确。)并创建对象。

可能是这样的:

List<Cubes> cubes = new List<Cubes>();
int create = /* read */;
switch (create)
{
    case 0: {
        int x = /* ask for x */
        int y = /* ask for y */

        cubes.Add(createCuboid(x, y, 0));
        break;
    }

    /* etc */
}

如果您想让用户删除多维数据集,请从列表中获取并删除它。 而且......是的,这段代码只是为了澄清我想说的话。