解析字符串作为Unity3D中的代码(C#)

时间:2017-01-21 13:10:52

标签: c# string parsing unity3d

所以我想在Unity中构建这个小代码沙箱,这样我就可以向学生讲授算法和编码的基础知识。

他们的想法是让他们在文本框或类似的东西中输入(非常基本的)代码,并观察他们的代码对Unity场景中存在的对象的影响。我很确定这已经完成了一百万次,但我很想尝试这一点。问题是,我不知道从哪里开始...

我想这个想法是将字符串编译成代码&只需按一下按钮,就可以在运行时执行。

我已经阅读了关于SO的许多其他问题,并提出了非常多样化的解决方案,例如使用C#解析器,反射,表达式树,CodeDom等。

从我对所有这些(即不多)的理解,CodeDom似乎更合适,但后来我读到它只在Visual Studio中运行并在公共构建中生成错误。那么这是否意味着这将成为Unity3D中的问题(因为它基于Mono?)

感谢您的帮助,

1 个答案:

答案 0 :(得分:1)

在下面的例子中,您在同一个脚本上查找给定名称的现有方法(您可以轻松地将其转换为另一个脚本或程序集中的任何脚本(但不推荐)):

string actionStr = inputField.text;
Type t = this.GetType();
MethodInfo mi = t.GetMethod(actionStr);
if(mi == null)
{
     ErrorMethod(actionStr + " method could not be found");
}else
{
    mi.Invoke(this);
}

另一种方法是将所有方法存储在字典中(更快):

Dictionary<string, Action>dict = null;
void Start()
{
      this.dict = new Dictionary<string, Action>();
      this.dict.Add("dosomething", DoSomething);
}
void DoSomething(){}

public void OnActionCall(string inputFieldStr)
{
    string str = inputFieldStr.ToLower();
    if(this.dict.Contains(str) == false)
    { 
         ErrorMethod(actionStr + " method could not be found");
         return; 
    }
    this.dict[str]();
}