【问题标题】:The mechanism behind Unity3D visual programming third party toolsUnity3D可视化编程第三方工具背后的机制
【发布时间】:2011-10-02 10:30:27
【问题描述】:

首先很抱歉在这里发布。我只是在“Unity Answers”上没有得到这个问题的答案我一直在研究像 uScriptStrumpy Shader 这样的工具,它们是基于节点的可视化编程工具,如 Unreal Kismet 或3DsMax粒子流系统。我一直在研究这些工具实际上是如何在 Unity 中生成源代码的。所以我假设在节点逻辑组装期间,代码应该动态生成并编译为 DLL(在 Unity 中,所有源代码都被编译为 DLL)。我开始研究诸如 Reflections、Microsoft.CSharp 和 System.CodeDom.Compiler 这样的 C# 程序集;我什至尝试通过编辑器在 Unity 中编写一个 C# 类作为文本,然后使用上述工具将其解析并编译成 DLL(没关系,但 DLL 仅在临时运行时存在。)因此我想知道这是那些工具可能使用的方法吗?或者有更好更清洁的方法吗?谢谢。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我实际上正在做同样的事情。我认为你在编译器类的正确道路上。我不认为您可以在移动设备上即时发出 IL 作为安全沙箱问题,但我正在动态创建 c# 代码并将其编译成像这样的持久 dll ..

    CompilerParameters compilerParameter = new CompilerParameters();
    compilerParameter.OutputAssembly = "/Your/Path/Here.dll";
    CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("CSharp");
    
    StringBuilder code = new StringBuilder();
    code.AppendLine("public static class Test {");
    //More code here...
    code.AppendLine("}");
    var compilerResult = codeDomProvider.CompileAssemblyFromSource(compilerParameter, code.ToString());
    

    希望这会有所帮助..

    【讨论】:

    • 退出应用后这个程序集是否继续存在?就我而言,它是暂时的。
    • 我正在使用此代码从 Unity 中的 EditorApplication 生成持久性 .dll。创建的 .dll 是永久性的,可以与最终应用程序一起发布。如果您为 OutputAssembly 使用相对路径,例如“Assets/MyDLL.dll”,您将在运行位于项目中的编译器后看到它。移到Assets/DLL中就可以使用了。
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-23
    相关资源
    最近更新 更多