C# Unity3d可视化脚本框架在幕后是如何工作的?

C# Unity3d可视化脚本框架在幕后是如何工作的?,c#,unity3d,code-generation,unity3d-editor,C#,Unity3d,Code Generation,Unity3d Editor,我想知道在unity3d中使用可视化脚本工具时会发生什么 假设我想做一个FSM: 第一种方法是当我不使用这样的工具时。在这种情况下,我应该在源代码(C#)中完成所有工作,这意味着创建所有必要的类并手动连接整个状态机 第二种方法是当我使用像or这样的工具时。我仍然需要编写状态类,但这一次,通过基于节点的图形编辑器可视化地连接它们 问题是,这些工具如何将图形转换为Unity可以使用的东西?他们是否会使用模板引擎(例如,基于图形)生成C#代码?或者他们会做其他事情吗?他们可以生成一些C代码,或者将图形

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

假设我想做一个FSM:

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

第二种方法是当我使用像or这样的工具时。我仍然需要编写状态类,但这一次,通过基于节点的图形编辑器可视化地连接它们


问题是,这些工具如何将图形转换为Unity可以使用的东西?他们是否会使用模板引擎(例如,基于图形)生成C#代码?或者他们会做其他事情吗?

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

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

我们目前正在积极开发Bolt 2,这是一个主要的新版本 包括大规模大修和新功能,如C#generation, 类、垂直流、tweening、泛型、全新外观和 还有很多


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

要完全理解它,您必须理解
lexer和parser

当你们以非图形的方式写东西时,计算机会将那个段代码转换成机器可读的格式,因为计算机甚至无法区分
a
b
。它将其转换为
二进制
六进制
(后来甚至转换为
二进制

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

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


正如您想了解Unity一样,它是基于
C#
,它将被编译。

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


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

您的意思是什么?我在哪里可以阅读更多关于“向游戏添加运行时执行引擎并在游戏运行时解释这些引擎”的内容?谷歌没有给出一个明确的答案。(不是downvoter)你的答案听起来太笼统了,我也不太确定你的开场白。考虑扩展你的职位