Skip to main content

Udon Graph :基础操作与信息

欢迎来到Udon Graph

UdonGraph是Vrchat制作的,Udon Behaviour可以加载的两种编程格式的一种,全名Udon Node Graph(Udon节点图),正如名称所说。UdonGraph是通过节点图来实现编程的,就像是下面这样……

Hallo World.png

如图,这段代码的意思是:当玩家交互时(Event Interact事件)向控制台输出Message(Hallo World)

很简单,对吧,UdonGraph就是这样的东西,让我们一起走入UdonGraph的世界,探寻他的一切……


接口

您可以在菜单栏点击 VRChatSDK > Udon Graph 或直接点击 UdonBehaviour 组件上的 Open Udon Graph 按钮来打开 Udon 节点图窗口。

如果您是通过直接点击UdonBehaviour来打开窗口的,那么您会直接跳到节点图并且可以立即开始编程工作,当然,您也可以直接在Assets里面打开Udon Graph程序——这两个本质上是一样的。

如果您是通过菜单栏打开的 Udon 窗口,您会看到欢迎页面,其会显示一些更新日志和其他设置。

您可以同时打开多个节点图,并且通过在节点图窗口顶部的标签页来在不同的节点图之间切换。

您也可以通过点击标签一角的 X 来关闭标签页。请注意,节点图标签页并不是“真正的”的标签页,当您点击不同的标签页时,它只会重新加载节点图。

创建一个新UdonGraph脚本

您可以通过两种方式新建一个UdonGraph脚本

  • 1:在Assets的任意位置右键选择“创建”-“VRchat”-“UdonGraph”-“Udon Graph program Asset”即可在您的文件夹中新建一个UdonGraph脚本
  • 2:通过UdonBehaviour-NewProgram来创建新的UdonGraph脚本(不建议)

流(Flow)

下面让我们来学习一下UDONGraph决定执行顺序的重要组件——流(Flow)

index-f9c508c-simple-branching.rADTzpNs.png

上图中间的三角形就是  的接口,其按从左到右连接的“粗白线”(官方喜欢称为面条)的顺序来触发节点。 要了解 Udon 节点图中做了什么事或者制作自己的节点图请 跟着流走

顶栏上有一个“高亮显示流(Highlight flow)”开关,启用后将高亮显示通过流边缘连接的节点,让您可以快速查看程序是如何到达特定节点的。

index-2139dee-simple-flow-highlight.4Xnb66sE.png

如果一个节点没有连接任何流,那么什么事都不会发生。(就连汇编生成器都会无视这个节点的存在——无论这个“节点链接了多少东西”)

在上面节点图中:

  1. Start 事件会在世界加载的时候触发
  2. 在下一步触发的 “分支(Branch)” 节点中。 会通过复选框的值决定是触发 True 还是 False 路径。
  3. 如果“分支(Branch)”节点中的值为 True,则会触发上面的节点发送一个名为“Hello”的自定义事件。
  4. 如果不是,则会发送一个名为 “Goodbye” 的自定义事件。

如果您不知道 发送自定义事件(Sending a Custom Event) 是什么意思也是正常的。 先学习节点图中的流是您理解节点图的工作方式的第一步。跟紧脚步——您会在不久之后理解所有东西。


创建节点

在 Udon 节点图中,每一个节点都是一个包含了特定功能的方块。 您可以将多个节点以一定的方式互相连接,构成一个“节点图”,而它就是您所制作出来的程序。

有以下几种办法可以创建节点:

  • 快捷键
  • 拖放操作
  • 搜索菜单

快捷键

按住以下任意一个快捷键再在节点图内点击您想创建节点的地方来创建对应的节点。

  • 1:浮
  • 2: 矢量 2
  • 3: 矢量 3
  • 4: 矢量 4
  • +: float 加法(加法)
  • -: float 减法(subtraction)
  • =- float 比较是否相等(相等比较)
  • b: 分支(Branch)
  • shift+b : 分组(Block)

其他快捷键

  • 按住 然后点击一个常量来把它转换成变量。C
  • Shift+A 居中选择的节点。
  • 按住 快速创建分组。Ctrl+G
  • L+鼠标左键 记录所选节点的值。
  • 按住 然后点击输出数组类型的节点来自动生成一个 foreach 循环。Shift+F

index-87b33a4-for-loop.K-6pkrFS.gif


拖放游戏对象(GameObject)和组件

如果要向游戏对象(GameObject)或组件添加逻辑,可以将它们从层级(Hierarchy)窗口中拖放到节点图中。 例如,您可以通过将“Light”标题拖动到节点图上来使用 Light 组件。

index-6238d1e-light-component.D15lZZ_Z.jpg

通过拖放操作创建的节点会创建一个绑定到游戏对象或组件的变量,因此您会看到一个新变量和一个节点出现在变量(Variables)窗口中,该节点是一个“Get Variable”节点,其会自动设置为获取刚刚新添加的组件。

拖放变量

您可以通过点击 Graph Sidebar 下 Variables 面板中的 + 按钮来创建任何类型的变量。之后您可以将相应变量名称拖放到面板上以创建“Get Variable”节点,在拖动时按住 Ctrl 键以创建“Set Variable”节点,或按住 Alt 键以创建“On Variable Changed”节点。

搜索节点

按下空格打开快捷搜索,输入您想要搜索的类的前几个词。

index-08df7d3-gameobject-search.CqVC4jBU.png

除了这个搜索方式以外,您还可以通过按住Shift+Tap来打开全局搜索,他会在全局搜索您输入的组件——比较卡,但是有效

searching-for-nodes-0f8fb2b-fullsearch.3sJVGO34.png

其他的搜索方法,可以通过访问https://docs.vrczh.org/creators.vrchat.com/worlds/udon/graph/searching-for-nodes来查看,不过平时使用上述的两种就已经足够了。


编译节点图

节点图会在后台定时自动编译。编译时您会看到节点图右上角在闪动,当编译完成时会显示绿色或在编译失败时显示红色。您点击状态盒(Status Box)查看生成的“汇编”代码或者编译失败时出现的错误。

index-fc0a2c0-assembly.Dg_J-dwY.png

(该编译并没有想象中的靠谱,实际上UdonGraph一直有着一些不易复现的BUG,这种问题在编辑大型脚本的时候尤为严重——您可以能需要花大量的时间来修复这些错误。所以我不建议您使用节点图来制作大型项目。)

在您点击OK,并且没有报错时,您就已经完成了一个脚本的构建了,剩下的事情就是将这个脚本挂载到UdonBehaviour上,然后播放,测试一下效果。