我想知道当我在unity3d中使用可视脚本工具时会发生什么。
假设我想制作一个FSM:
第一种方法是当我不使用这种工具时。在这种情况下,我应该在源代码(C#)中进行所有操作,这意味着创建所有必需的类并手动连接整个状态机。
第二种方法是当我使用Bolt或NodeCanvas之类的工具时。我仍然需要编写State类,但这一次,通过基于节点的图形编辑器以可视方式完成它们的连接。
问题是,这些工具如何将图形转换为Unity可以使用的图形?他们是否使用诸如T4 Templating Engine之类的模板引擎基于图形生成C#代码?还是他们做其他事情?
答案 0 :(得分:1)
他们可以生成一些C#代码,也可以将图形定义保存到文件中,向游戏添加运行时执行引擎,并在游戏运行时解释它们。他们可能还会采用 hybrid (混合)方法或进行一些性能优化。因此,任何一种方式都是可能的,您应该查阅工具的设计文档以确保确定。
关于 Bolt ,this在开发人员的官方博客上的帖子暗示,当前的稳定版本不会不会生成任何C#代码。但是显然,该团队正在积极开发支持代码生成的新版本。
我们目前正在积极研究Bolt 2,这是一个主要的新版本, 包括大修和C#生成等新功能, 类,垂直流,补间,泛型,全新外观和 还有很多。
对于 NodeCanvas ,我不确定它是否正在生成任何C#代码,但是从资产存储中的包内容来看,看起来它的工作方式与Bolt类似。
>答案 1 :(得分:1)
Unity具有编辑器/播放模式/运行时模式。
在编辑器模式下,您的设计将保存在文件中。一些工具使用自定义格式binaries,json或其他格式。例如,LogicForge使用Scriptable对象与Unity依赖关系和序列化管理完全兼容。
可以在编辑器和/或播放模式下设计图形。 Logic forge两者都支持,因为在playmode中您可以立即看到您的设计在做什么。
节点可以表示原子功能或复杂组件。如果可视化工具让您有机会设计自己的节点,也可以可视化并自动创建设计中丢弃的任何MonoBehaviour脚本,则可以很好地创建节点。
节点可以是动态的或静态的,已经编码。动态节点使用反射创建功能播放模式/运行时。它们使用缓存的和IL创建的代理进行了优化。
更改图形时可以生成代码,但是需要等待很长时间才能重新编译,也可以根据要求生成代码。工具可以选择compact设计创建代码以及来自设计的更复杂的节点。
图形资产可以附加到GameObject并随场景一起加载,也可以作为资源运行时加载,然后implement设计。它们读取序列化的数据并在游戏对象上创建组件。
某些工具集成了FSM,因此您可以根据条件在不同的图形设计/逻辑之间进行切换。 Logic Forge具有基于事件的通用FSM和动画可玩混合器(您无需使用Mecanim)
答案 2 :(得分:-1)
您必须了解lexer and parser
才能完全理解它。
当您以非图形方式编写某些内容时,由于计算机甚至无法区分a
和b
,因此计算机会将这些代码转换为机器可读格式。它将其转换为binary
或hexa
(后来甚至转换为binary
)。
现在问题仍然存在视觉脚本如何工作?
好吧,开发人员有自己的词法分析器和解析器,他们遍历这些可视化组件并从中创建代码,然后根据语言对其进行解释或编译。
您想了解 Unity ,它是基于C#
的,它将被编译。