我在Unity制作游戏并且我希望最大化可配置性 - 用户可以使用自己的关卡,纹理,声音效果,AI行为等加载自己的包。对于我知道的AI部分没有脚本,它可能不太可能,所以我一直在寻找动态加载和放大的方法。从已经构建的Unity游戏运行脚本。我设法通过IronPython做到了这一点,但我担心有人可能会使用此功能来创建假包,这些包在玩家的计算机上运行恶意代码。我想我应该对可运行的代码类型(使用哪些函数?导入哪些模块?)施加一些限制,但我甚至不知道从哪里开始。我之前从未做过类似的事情。所有我可以google就像清理HTML或GET / POST查询一样使用 Python ...不是我想要的,因为我想清理 Python本身。
以下是我如何启动Python的测试样本:
public class PythonLauncher : MonoBehaviour
{
ScriptEngine engine;
ScriptScope scope;
void Start()
{
engine = Python.CreateEngine();
scope = engine.CreateScope();
scope.SetVariable("foo", new Foo { someExampleData = "World" });
string example = "output = 'Hello ' + foo.someExampleData + '!'";
var source = engine.CreateScriptSourceFromString(example);
source.Execute(scope);
var output = scope.GetVariable<string>("output");
Debug.Log(output);
}
}
public class Foo
{
public string someExampleData;
}
总而言之,我正在寻找至少一些提示。从哪里开始?
修改
好的,我搜索了一些,因为我注意到,在python中使用eval()
有多相似...清理eval()
会显示更多的视图。现在我有一些想法需要注意,但是:
我发现的是例如: