我正在尝试制作一款游戏,玩家可以编写自己的脚本。
出于安全考虑,我不想使用CodeDOM之类的东西,并且我尽量避免使用第三方组件。
因此,我设法编写了自己的解析器来解析脚本。
它不漂亮,但它完成了任务。
但现在问题来了:因为用户制作的脚本数量很大,所以不可避免地会产生性能问题。
所以我想也许我应该把已经解析过的once脚本变成某种方法或委托之类的东西。
我对CreateDelegate
和Expression
做了一些研究,但似乎不是我想象的那样。
老实说,它非常复杂和先进,超出了我的理解能力。
我的意思是,我可能会变成";每条单独的线";使用这种解决方案的方法,但";整个脚本"?这肯定不是一种很好的做事方式,是吗!?
我还想过把每一行都分成一个小组;链";将所有这些类放在一起,以便对脚本进行平滑的概述。
但是,再一次,因为脚本的数量并不是那么少,它只占用了我处理这些类的大部分资源。
那么,有人能帮帮我吗?
非常感谢!
这里有雄心勃勃的东西。您正在尝试构建一种由c#解释的解释编程语言。
您可以尝试启用运行时c#脚本的roslyn,或者资产存储中的另一种脚本语言。
我没有尝试任何,但有一些资产可以在运行时运行脚本。这可能是在运行时运行c#代码的另一种选择,或者您可能对另一种提供由c#解释的简化运行时语言的选择感兴趣,这可能是非程序员用户所希望的。此外,简化的语言可能提供更准确的验证/解释更正功能,以便能够在运行时之前编写工作代码,这是一个有趣的功能。在该功能不可用的情况下,使用简化的语言,您自己构建代码验证系统的方法将比使用原始c#时更可行:(