【问题标题】:How does a Unity3d visual scripting framework work behind the scene?Unity3d 可视化脚本框架如何在幕后工作?
【发布时间】:2019-04-13 02:56:14
【问题描述】:

我想知道当我在 unity3d 中使用可视化脚本工具时会发生什么。

假设我想制作一个 FSM:

第一种方法是当我不使用这样的工具时。在这种情况下,我应该在源代码 (C#) 中完成所有工作,这意味着创建所有必要的类并手动连接整个状态机。

第二种方法是当我使用BoltNodeCanvas 之类的工具时。我仍然需要编写 State 类,但这次,将它们连接起来是通过基于节点的图形编辑器直观地完成的。

问题是,这些工具如何将该图表转换为 Unity 可以使用的东西?他们是否使用 T4 Templating Engine 之类的模板引擎基于图形生成 C# 代码?还是他们做其他事情?

【问题讨论】:

    标签: c# unity3d code-generation unity3d-editor


    【解决方案1】:

    他们可以生成一些 C# 代码或将图形定义保存到文件中,为您的游戏添加运行时执行引擎并在游戏运行时解释这些引擎。他们也可能采用混合方法或进行一些性能优化。因此,任何一种方式都是可能的,您应该查阅工具的设计文档以确保。

    至于Boltthis 在开发者官方博客上的帖子暗示当前稳定版本不会生成任何 C# 代码。但显然,该团队正在积极开发支持代码生成的新版本。

    我们目前正在积极开发 Bolt 2,这是一个重要的新版本, 包括大修和新功能,例如 C# 生成, 类、垂直流、补间、泛型、全新的外观和 更多。

    至于 NodeCanvas,我不确定它是否会生成任何 C# 代码,但从资产商店中的包内容来看,它的工作方式似乎与 Bolt 类似。

    【讨论】:

    • 你是什么意思,或者我在哪里可以阅读更多关于“在游戏中添加运行时执行引擎并在游戏运行时解释这些引擎”的信息?谷歌没有给出明确的答案。
    • @BehnamRasooli - Wiki Interpreter (computing)。该技术是生成表示可视图形的自定义数据。然后编写一个解释器来读取该自定义数据格式,并执行指定的操作。 “运行时执行引擎”是这样一个自定义解释器的术语。
    【解决方案2】:

    Unity 有编辑器/播放模式/运行时模式。 在编辑器模式绘图中,您的设计保存在文件中。一些工具使用自定义格式二进制文件、json 或其他。以LogicForge为例,使用Scriptable对象完全兼容Unity依赖和序列化管理。 图形可以在编辑器和/或播放模式中设计。 Logic forge 支持这两者,因为在playmode 中,您可以立即看到您的设计在做什么。 节点可以表示原子功能或复杂组件。如果可视化工具让您有机会设计自己的节点,也可以直观地为设计中丢弃的任何 MonoBehaviour 脚本自动创建节点,那就太好了。 节点可以是动态的或静态的,已经编码。动态节点使用反射来创建函数播放模式/运行时。它们使用缓存和 IL 创建的委托进行了优化。 修改graph时可以生成代码,但是需要等待很长的Unity重新编译,也可以按要求生成。工具可以选择compact 设计创建代码和设计中更复杂的节点。
    图形资源可以附加到 GameObject 并与场景一起加载,也可以作为资源运行时加载,然后 implement 设计。它们读取序列化数据并在游戏对象上创建组件。

    某些工具包含 FSM,因此您可以根据条件在不同的图形设计/逻辑之间切换。 Logic Forge 具有基于通用事件的 FSM 和可播放动画混合器(您不需要使用 Mecanim)

    【讨论】:

      【解决方案3】:

      你必须了解lexer and parser才能完全理解它。

      当您以非图形方式编写内容时,计算机会将这段代码转换为机器可读格式,因为计算机甚至无法区分 ab。它将其转换为binaryhexa(后来甚至变成了binary)。

      现在问题仍然存在可视化脚本是如何工作的?

      好的,开发人员有自己的词法分析器和解析器,他们遍历这些可视化组件并从中创建代码,然后根据语言对这些组件进行解释或编译。

      如你所想了解的Unity,它基于C#,将被编译。

      【讨论】:

      • (not downvoter) 你的回答听起来太笼统了,我不太确定你的开场白。考虑扩展您的帖子
      • 可视化脚本通常不会转换成其运行平台的代码。 (例如,Unity 的 Bolt 变成了 C#?可能,但可能不是。)更常见的方法是生成自定义可解释数据,然后由专门编写的“运行时引擎”执行解释该数据格式。另外,我无法想象他们会输出 C#。如果他们产生“代码”(我对此表示怀疑),它更有可能是“CLR IL 字节码”,因为这就是 .NET 的“运行”(通常是 JIT-ed 到机器代码)。 C# 为人类代码编写者提供便利,而不是自动化代码编写者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 2011-02-17
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多