【发布时间】:2019-08-06 00:05:26
【问题描述】:
我正在统一制作一个小游戏,现在我正在尝试构建任务系统。 该游戏将是一个模拟游戏,因此任务将不得不与之交互的大量不同的数据类/系统。 我可以只制作一堆实用程序类......甚至制作一个假的“数据库”来处理数据调用......但这很不雅。
肯定有一种方法可以让我只用字符串表示实际代码?
例子:
String questText = Hello player.getFullName();, how are you?
questResults<String>[1] = player.inventory.add(GameObjectBuilder.Create(new WhateverObject()));
我正在使用 Unity 的 ScriptableObject 进行任务,这样我就可以通过编辑器填写文本数据,而不是在 IDE 端进行(尤其是据我所知,unity 不支持插值和复合字符串) .
我知道 Java 有一个名为“Reflection”的 API,据我了解,它会做类似的事情,但我一直无法完全理解它。
那么如何将字符串中的元素转换为可运行的代码呢?
如果可能的话,这是否会导致性能问题以及可能遇到需要转换的脚本的对象数量不定?
还有其他替代方法可以实现类似目标吗? (这只是一种好奇心)
【问题讨论】:
-
你试过CSharpCodeProvider,它的开发速度比反射快。
-
@LeiYang 我什至不能完全确定反射是否是我在这种情况下需要的技术,我可能不应该提到它。 CSharpCodeProvider 是否允许我将在字符串中检测到的 C# 转换为实际的运行时进程?如果是这样,它是否具有统一功能?
-
它在 C# 中工作。请先阅读文档并做一些实验。
-
好吧,所以只是为了确保我了解 CSharpCodeProvider 的工作原理......这个过程将如何进行:GameEngine [检测代码] -> GameParsingEngine [将代码写入源文件] - > CSharpCodeProvider [编译并运行游戏内的代码] ?
-
我认为您甚至不需要将字符串写入源文件。它在运行时在内存中编译并且可以运行 IL。
标签: c# unity3d scripting compilation