接口
可视化编程的主窗口是一个图形窗口。
图形窗口有五个主要元素:
- 图形编辑器,您可以在其中创建、排列和连接节点。
- 模糊查找器,您可以使用它来查找节点并将它们添加到您的图形中。
- 图形工具栏,您可以在其中更改图形编辑器中特定于您的视图的设置并执行一些常见的布局操作。
- 图形检查器,您可以在其中查看有关节点的详细信息并为图形配置其他设置。
- 黑板,您可以在其中定义和编辑要在图形中使用的变量。
图形编辑器
图形编辑器是图形窗口的中心编辑区域。
您可以使用图形编辑器来创建您的可视化编程图形。您可以创建节点并将它们与边连接。您可以通过控制方案更改图形编辑器中的一些默认快捷方式和行为。
有关可视化编程中可用控制方案的更多信息,请参阅选择控制方案。
模糊查找器
模糊查找器是一个可搜索的菜单,列出了可视化编程中可用的每个节点。右键单击图形编辑器中的任意位置以打开模糊查找器。
使用搜索栏按名称搜索节点,或从列表中打开一个类别以查看相关节点。例如,与变量的创建或操作相关的节点位于变量类别中。
您可以通过自己的代码、其他包或其他 Unity 功能将新节点添加到可视化编程中。
有关如何将节点添加到模糊查找器的详细信息,请参阅配置项目设置。
图形工具栏
图形工具栏允许您显示或隐藏图形检查器和黑板。 图形工具栏还包括一个面包屑路径,用于在显示您当前位置的嵌套图表中导航。从跟踪中选择一个图形以返回到该图形文件。
您还可以配置一些附加设置来控制节点在图形编辑器中的显示方式。
属性 |
描述 |
||
Lock |
将当前脚本图形或状态图形锁定到图形窗口。即使您Hierarchy窗口中选择另一个带有图形文件的GameObject,可视化编程也会使当前图形保持打开状态。 |
||
Graph Inspector |
显示或者隐藏Graph Inspector |
||
Blackboard |
显示或者隐藏Blackboard |
||
Breadcrumb Location |
显示当前图形的名称。如果您打开子图或状态单元,或状态图中的状态节点,请使用面包屑导航回父图。 |
||
Zoom |
为图形编辑器的视图设置缩放级别。 |
||
Relations |
启用Relations以显示脚本图形节点的内部流连接。例如,在标准Multiply节点上,Relations设置从每个输入端口绘制一条线,该线在输出端口上合并为一条线。 线条显示节点内的数据流。 禁用Relations以隐藏这些内部连接。 |
||
Values |
当Unity Editor处于播放模式时,启用Values以显示节点之间发送的输入和输出值。这可以使调试脚本变得更容易。 禁用Values以在播放模式下隐藏输入和输出值。 有关播放模式的更多信息,请参阅Unity用户手册中的游戏视图。
|
||
Dim |
启用Dim以使图形编辑器中尚未连接到图形中控制流的任何节点变暗。 Dim设置为您提供了一个视觉提示,表明您的图形的当前配置中没有使用节点。 禁用Dim以将所有节点显示为活动,无论其连接状态如何。
|
||
Carry |
移动父节点时,启用Carry以移动所有连接的子节点。禁用Carry仅移动当前选定的节点。
|
||
Align |
选择对齐选项以对齐当前选择中的任何节点。 |
||
Align Left Edges |
根据左边缘对齐选择中的所有节点。 |
||
Align Centers |
根据垂直中心对齐选择中的所有节点。 |
||
Align Right Edges |
根据右边缘对齐选择中的所有节点。 |
||
Align Top Edges |
根据顶部边缘对齐选择中的所有节点。 |
||
Align Middles |
根据水平中间对齐选择中的所有节点。 |
||
Align Bottom Edges |
根据底部边缘对齐选择中的所有节点。 |
||
Distribute |
选择一个分布选项以在当前选择的任何节点之间均匀分布空间。 |
||
Distribute Left Edges |
分布选择中的所有节点,使每个节点的左边缘之间的距离相等。 |
||
Distribute Centers |
分布选择中的所有节点,使每个节点的垂直中心之间的距离相等。 |
||
Distribute Right Edges |
分布选择中的所有节点,使每个节点的右边缘之间的距离相等。 |
||
Distribute Horizontal Gaps |
分布选择中的所有节点,以在每个节点之间留下相等大小的水平间隙。这种分布会影响节点左右边缘之间的空间。 |
||
Distribute Top Edges |
分布选择中的所有节点,使每个节点的顶部边缘之间的距离相等。 |
||
Distribute Middles |
分布选择中的所有节点,使每个节点的水平中间距离相等。 |
||
Distribute Bottom Edges |
分布选择中的所有节点,使每个节点的底边之间的距离相等。 |
||
Distribute Vertical Gaps |
分布选择中的所有节点,以在每个节点之间留下相等大小的垂直间隙。 这种分布会影响节点顶部和底部边缘之间的空间。 |
||
Overview |
选择Overview以自动平移和缩放以适应图形编辑器中当前图形的所有元素。 |
||
Full Screen |
当图形窗口停靠在Unity编辑器中时,选择全屏以将图形窗口最大化到编辑器窗口的完整大小。 |
您的可视化编程首选项可以更改图形工具栏中的某些设置或更改这些设置的行为方式。 例如,当您设置缩放级别时,您可以控制图形编辑器放大和缩小的速度。
有关详细信息,请参阅配置您的首选项。
图形检查器
图形检查器提供有关打开图形或您在图形编辑器中选择的任何节点的附加信息。
如果节点需要额外配置,您可以使用图形检查器设置这些值。
要显示或隐藏图形检查器,请从工具栏中选择图形检查器()。
要将图形检查器移动到图形窗口的另一侧,请选择Dock Right()或Dock Left(
)。
黑板
黑板提供了用于在图形中配置和管理变量的选项。黑板将变量分为五个不同的范围,跨越五个选项卡:图形、对象、场景、应用程序和已保存。
有关可视化脚本中可用变量范围的更多信息,请参阅变量。
要显示或隐藏黑板,请从工具栏中选择黑板()。
要将黑板移动到图形窗口的另一侧,请选择Dock Right()或Dock Left(
)。
节点
节点是可视化编程中最基本的脚本部分。节点可以侦听事件、获取变量的值、修改 GameObject上的组件等等。
节点在图形编辑器中显示为块。
您可以排列这些块并将其与边缘连接,以创建应用程序的逻辑。使用模糊查找器添加节点。单击并拖动一个节点以在图形编辑器中移动它。
节点解析
可视化编程突出显示当前选择中的节点。所有节点都有一个标题,显示节点的名称。某些节点标头可能包含其他信息或控件。
在图形中选择一个节点,可视化编程的Graph Inspector将显示以下信息:
- 节点的名称和类型图标
- 节点功能的简要说明(如果可用)
- 节点的当前警告消息或错误
- 节点的附加设置(如果可用)
- 每个输入端口所需的类型和简要说明(如果有)
- 每个输出端口的类型和简要说明(如果有)
连接与端口
将一个节点的端口连接到另一个节点上的兼容端口以创建边缘。边形成可视化编程图中的逻辑流。单击任何端口以创建新边缘。
边是用颜色编码的:控制图中逻辑流的边是白色的。数据边缘根据其类型着色。
有关类型的更多信息,请参阅对象类型。
创建新边时,可视化编程会突出显示图形中任何其他节点上的端口,您可以在其中建立有效连接。如果您启用Dim Incompatible Nodes,可视化编程还会使没有有效连接的任何节点或端口变暗。
节点左侧的端口是输入端口。节点右侧的端口是输出端口。
输入端口或输出端口可以是控制端口或数据端口:
- 控制端口控制图形中的逻辑流。它们告诉可视化编程执行图中节点的顺序,从左到右。控制端口的图标始终是一个箭头。这些箭头显示图形中逻辑流的方向
- 数据端口在节点之间发送和接收数据,例如数值或游戏对象。它们具有与期望作为输入接收或作为输出发送的特定类型相对应的颜色。他们的图标会根据他们的类型而变化
您可以与同一端口建立多个连接或从同一端口建立多个连接,但有一些限制:
- 您可以将单个数据输出端口连接到多个数据输入端口
- 您不能将多个数据输出端口连接到单个数据输入端口。可视化编程无法选择使用哪个值
- 您可以将多个控制输出端口连接到一个控制输入端口
- 您不能将单个控制输出端口连接到多个控制输入端口。可视化编程无法选择首先运行哪个节点
有关如何连接节点的更多信息,请参阅在脚本图中连接节点。
在此处描述的端口之外,更复杂的节点可以具有更复杂或专用的端口。
节点控件和内联值
节点可能具有显示在其标题或图形检查器中的其他控件。控件可以更改节点的可用端口或行为。一些端口也可能使用内联值。
元素 |
例子 |
描述 |
控件 |
|
控件显示为节点标题上的下拉选项。例如,容器类型控件可能会告诉节点期望接收 GameObject而不是Script Machine。 |
内联值 |
|
内联值显示为端口旁边的对象选取器字段。您可以使用内联值而不是节点连接来指定节点的值。 并非所有可视化编程类型都支持内联值。 |
节点重载
可视化编程节点的变体称为重载。重载会改变节点可以接受的输入和输出数据,并且可以改变节点上输入或输出数据端口的数量。
例如,Add节点有四个重载,如下图所示,搜索Add后的模糊查找器。
您可以通过模糊查找器中的子类别区分每个过载。Add节点是Math类别的一部分,但每个重载都是不同子类别的一部分:Generic、Scalar、Vector 2、Vector 3 或 Vector 4。
特定的节点过载会改变Add节点可以接受的输入和输出数据。 虽然Generic Add节点可以输入和输出可视化编程中的任何对象类型,但Vector 3 Add节点只能将3D向量作为输入,并且只能输出单个3D向量:
Add节点上的默认端口类型和数量在其重载期间保持一致。对于Rotate节点,端口的类型和数量会有所不同。
根据您选择的Rotate节点,您可以将旋转角度指定为矢量、单独的浮点值或相对于每个轴的角度。您还可以选择节点是相对于自身还是相对于场景世界空间的中心旋转 GameObject。
图形
图形是一种可视化编程资产,它包含应用程序中逻辑的可视化表示。
可视化编程有两种不同类型的图:脚本图和状态图。您可以在特定情况下使用任一图形类型来定义和更改应用程序中游戏对象的行为方式。脚本图和状态图必须附加到脚本机或状态机才能在项目中使用。
有关脚本机和状态机的更多信息,请参阅脚本机和状态机。
脚本图
脚本图控制和连接特定的动作和值。脚本图中的操作以特定顺序发生。动作可以在每一帧发生,也可以在特定事件发生时发生。
可视化编程通过节点表示脚本图中的操作。将节点与边连接在一起,以告诉您的应用程序要做什么以及按什么顺序。
脚本图可以访问大量节点,这些节点对应于 Unity 编辑器中的不同特性和功能。通过模糊查找器访问这些节点。
脚本图定义了游戏对象在您的应用程序运行时所做的细节。
状态图
状态图具有状态并提供应用程序何时通过称为转换的连接在状态之间移动的逻辑。使用状态图设计 AI 行为或定义场景和关卡结构。
状态是您希望游戏对象执行的任何一组行为,表示为脚本图。可视化编程通过状态节点表示状态图中的状态。状态节点可以链接到带有逻辑的脚本图,以供您的应用程序遵循,或者为另一个状态图提供额外的转换和状态节点。
状态图中的状态和转换告诉您的应用程序何时根据事件或在满足条件后更改其行为。
例如,您可能有一个具有巡逻和追逐状态的敌方角色。敌方角色的动作可以在检测到玩家角色后,从脚本图表中巡逻状态的动作变为追逐状态的动作。敌方角色的检测事件触发两种状态之间的转换。
状态图不使用模糊查找器。它们使用一组特定的状态节点,这些节点位于可视化编程上下文菜单中:
- 脚本状态包含一个脚本图。当应用程序触发脚本状态时,可视化编程在脚本状态的附加脚本图中运行逻辑。脚本状态使用On Enter State Event、On Update Event和 On Exit State Event节点来控制基于当前状态的逻辑。
- 超级状态包含另一个嵌套状态图。超级状态可以帮助您更好地组织状态图,并在多个图中重用状态和转换。
- 任何状态都充当状态图中任何其他状态的占位符。您可以使用Any State节点并创建到新状态的单个转换,而不是从其他状态创建多个转换。
- 转换连接脚本状态、任何状态和超级状态。转换包含脚本图,告诉您的应用程序何时从一种状态切换到下一种状态。有关详细信息,请参阅过渡。
您可以将任何脚本状态节点或超级状态节点设置为开始状态。当可视化编程运行状态图时,任何标记为开始状态的状态都会自动激活。您还可以在单个图表中具有多个开始状态。以下示例中的Super State、Start和Script State节点都是Start States。
子图形和状态单元
在脚本图形中,您可以添加直接链接到另一个脚本图形或状态图形的节点。
- 嵌套的脚本图是一个子图形
- 嵌套状态图是一个状态单元
嵌套的脚本图或状态图可帮助您跨应用程序组织和重用逻辑。子图形或状态单元可以作为将其添加到图的节点存在,也可以链接到外部图文件。
子图形
子图形将脚本图嵌套在另一个脚本图中。使用子图形节点在应用程序中跨脚本图重用一组逻辑。
子图形节点可以接受输入或将输出发送回其父图。添加端口以配置子图形及其父图相互发送的数据。
子图形的输入和输出
使用图形检查器,您可以选择和定义在将脚本图形用作子图形时出现的端口。当您在图表中没有选择其他项目时,脚本图表的端口定义会出现在图表检查器中。
定义的端口出现在使用该脚本图的任何子图节点上。在下图中,子图Rotate the Cube 具有:
- 一个触发输入端口
- 一个数据输入端口
- 一个触发输出端口
- 一个数据输出端口
端口定义还会更改子图形的输入和输出节点。这些节点控制子图形与其父图形之间的执行和流动。在下图中,输入和输出节点与上一个示例中的旋转立方体子图形节点具有相同的端口。
i备注 您只能在脚本图形中使用单个输入节点和单个输出节点。如果您添加更多输入或输出节点,可视化编程仅使用您添加到图形中的第一个输入和输出节点。 |
有关如何将端口添加到脚本图形的更多信息,请参阅将触发器或数据端口添加到脚本图形。有关不同类型端口的更多信息,请参阅子图节点。有关如何使用子图形的更多信息,请参阅将子图形添加到脚本图。
状态单元
状态单元从脚本图启动状态图。您无法更改状态单元节点上显示的端口或在状态图与其父脚本图之间发送数据。
状态单元节点在脚本图中启动不同的逻辑,在代码执行的不同时间:
- 当嵌套状态图开始运行时
- 在嵌套状态图运行时
- 当嵌套状态图停止时
- 嵌套状态图停止后
当您在父图形中启动状态单元节点的Start和Started端口时,可视化编程会将节点状态图中的所有Start状态标记为活动状态。当您启动Stop和Stopped端口时,可视化编程将所有Start状态标记为非活动状态。
有关状态图和开始状态的更多信息,请参阅状态图。有关状态单元节点的更多信息,请参阅状态单元节点和将状态单元添加到脚本图形。
转换
转换是状态图中状态节点之间的连接。转换有一个脚本图,它告诉可视化编程何时在状态图中切换状态。一种特殊的转换类型,称为自转换,可以对自身进行状态转换。
您可以在转换节点本身中嵌入转换的脚本图,或链接到外部图形资产文件。
在附加到过渡的脚本图中使用事件节点和触发器过渡节点。这些节点指定必须发生哪些事件才能触发父状态图中的状态更改。
例如,以下转换脚本图在带有Player标签的 GameObject 进入触发器Collider后切换状态。
任何带有转换脚本图的转换节点都会在图形中显示触发状态更改的事件名称。例如,以下父状态图将上一个示例中的图显示为On Trigger Enter转换节点。
如果您已为转换脚本图分配了名称,则分配的名称会出现在转换节点上。
i提示 为了减少状态图中转换节点占用的空间,您可以隐藏它们的名称标签。 有关详细信息,请参阅配置您的首选项。 |
您可以在状态图中的状态之间创建任意数量的转换。
有关如何创建转换的详细信息,请参阅创建状态之间的转换。
脚本机和状态机
脚本机是一个GameObject组件,可让您在应用程序中使用脚本图形。除非附加到脚本机,否则您不能使用脚本图。
有关组件的更多信息,请参阅 Unity 用户手册中的组件简介。
脚本机可以链接到图形资产,也可以包含嵌入式脚本图形资产。
状态机与脚本机相同,只是它包含状态图。
有关脚本图和状态图之间差异的更多信息,请参阅图。
将脚本机或状态机组件添加到GameObject,可视化编程会自动添加Variables组件。 变量组件包含您在附加到游戏对象的脚本图或状态图中定义的任何对象变量。
有关变量的更多信息,请参阅变量。有关如何将脚本机或状态机添加到游戏对象并附加图形文件的更多信息,请参阅将图形文件附加到脚本机或状态机。
资源类型
脚本机和状态机的资源有两个选项:图形文件 (Graph) 或嵌入式资产 (Embed)。
随时为脚本机或状态机设置资源。如果将资源从Graph切换到Embed,则图形文件仍作为独立文件存在于项目内部的状态机或脚本中。
⚠注意 如果您将资源从Embed切换到Graph,您将丢失嵌入的图资源。 您可以将节点从嵌入式图形复制到图形资产以避免数据丢失。 |
可视化编程的其他功能,例如转换、超级状态和子图形,也具有这些源类型选项。
图形源类型
使用图形源类型可以使您的图形更快地加载并且更易于维护。对图形文件所做的任何更改都适用于链接到该图形文件的每个脚本机或状态机,即使这些游戏对象不使用相同的 Prefab。
要在多个GameObjects中使用相同的图形,请使用图形源类型。您可能会遇到一些嵌入图效果最好的情况。
嵌入源类型
嵌入图仅存在于创建它的场景中,如果它没有附加到Prefab。这可能会导致源代码控制系统出现问题。
如果您删除带有嵌入图形资产的游戏对象,您将丢失图形。编辑器处于播放模式时,不会保存对嵌入式图形所做的更改。
在以下情况下使用嵌入源类型:
- 您需要从图形中的当前场景引用GameObjects,并且图形不在Prefab上
- 该图位于您计划在运行时在应用程序中实例化的Prefab上
- 您只需在应用程序中使用一次图形中的逻辑
除非图形位于Prefab上,否则您不能跨多个GameObjects重用嵌入式图形。 嵌入图仅存在于您创建它的脚本机或状态机上。这意味着您可以在Prefab的实例之间共享图形,但不能在多个GameObject上共享。
有关Prefab的更多信息,请参阅用户手册中的Prefabs。
对象类型
Unity中的所有脚本都基于C#编程语言。C#是一种“强类型”语言。这意味着可视化编程中的所有数据和对象都具有特定的类型。例如,变量可以是integer类型的数字,或者节点的输出端口提供的对象可以是GameObject。
类型帮助计算机运行可视化编程代码。可视化编程的行为可能不取决于您将节点作为输入提供的对象类型,但有时,对象的类型很重要。
例如,要在黑板中添加一个新变量,您必须指定变量的类型来为其赋值。在图形编辑器中创建新边时,某些节点可能具有仅在数据输入为正确类型时才允许连接的端口。
使用“类型”菜单选择对象的类型。例如,您可以使用图形检查器中的Type菜单为脚本图形上的Data Input端口选择类型。
在“类型”菜单中输入搜索词以查找特定对象类型。您还可以浏览类型菜单中列出的命名空间来查找类型。
可视化编程用箭头 (>) 标识类型菜单中的命名空间。选择任何命名空间以查看该命名空间中的其他命名空间或可用类型。
常用对象类型
Unity 有数百种类型。您还可以添加自己的自定义类型。
有关自定义类型的更多信息,请参阅自定义类型。
下表包括可视化脚本中的一些常用类型。
类型 |
描述 |
|
Float |
浮点数是一个数值,有或没有小数位。 例如, |
|
Integer |
整数是没有小数位的数值。 例如, |
|
Boolean |
布尔值是true或false。使用布尔值在脚本图表和切换中创建逻辑。 例如,脚本图表只有在条件为true时才能触发事件。 |
|
String |
字符串是一系列字符或一段文本。 例如,string、string123和s。 |
|
Char |
char是字符串中的单个字母数字字符。 例如, |
|
Enum |
枚举是选项的有限枚举。枚举通常表示为下拉列表。 例如,Force Mode枚举的值可以是Force、Impulse、Acceleration或 Velocity Change。 |
|
Vector |
一个向量表示一组浮点坐标。Unity使用向量表示位置或方向。 |
|
Vector 2 |
Vector2具有X和Y值。 您可以将Vector 2用于2D空间中的坐标。 |
|
Vector 3 |
Vector 3具有X、Y和Z值。您可以将Vector 3用于 3D 空间中的坐标。 |
|
Vector 4 |
Vector 4具有X、Y、Z和W值。您可以将Vector 4用于 4D 空间中的坐标,例如着色器的参数。 |
|
GameObject |
GameObject是Unity场景中使用的基本实体。所有游戏对象都有一个名称、它们在场景中的位置和旋转的变换以及组件列表。 |
|
List |
列表是元素的有序集合。列表中的元素可以各自有自己的类型,也可以都具有相同的类型。 可视化编程索引列表中第一个位置为0的项目。这意味着列表的第一个元素位于列表的 |
|
Dictionary |
字典是元素的集合。每个元素都有一个唯一的键和一个值。使用键来访问和分配字典中元素的值。 例如,您可以使用字典来组织一组人的姓名和年龄。人的名字是其年龄价值的关键。字典中的单个元素可以是 |
|
Object |
对象是 Unity 中的一种特殊类型。如果节点上的数据输入端口的类型设置为Object,则该节点不需要特定类型作为输入。 |
支持的类型转换
可视化编程可以自动转换节点之间传递的一些数据类型。例如,下图从当前 GameObject的子GameObject获取Transform,并触发Animator Controller播放动画。 可视化编程将Transform Get Child节点发送的Transform组件转换为同一GameObject上的 Animator Controller组件。
可视化编程可以自动执行以下类型转换:
- Number to Number(例如,您可以将整数转换为浮点数,例如5到5.0,或 5.0到5)
- 基类到子类
- 子类到基类
- 自定义运算符(例如,您可以将Vector 2转换为Vector 3)
- GameObject到一个组件(例如,一个GameObject到它的Rigidbody组件)
- 组件到游戏对象(例如,刚体组件到其游戏对象)
- 同一游戏对象上的组件到组件(例如,刚体组件到变换组件)
- 枚举到数组
- 枚举列表
用户定义类型
使用C#脚本文件在Unity中创建您自己的对象类型。这些类型称为类。
类是代码中对象的蓝图。他们决定一个对象持有什么样的数据,以及你的代码可以用那个对象做什么。一个类可以在一个对象中保存多个具有不同数据类型的变量。
创建一个自定义类以将其用作可视编程脚本图中变量和其他对象的类型。
有关如何在可视化脚本中添加和使用您自己的自定义类型的更多信息,请参阅使用自定义类型。
您包含在C#脚本中的代码还可以创建新节点来操作类中的数据。
例如,您可以编写代码来跟踪应用程序中不同玩家角色的特征。您可以创建一个类 Player,并在该类中为名称、角色类型、喜欢的颜色或玩家级别设置不同的变量:
using System;
using UnityEngine;
using Unity.VisualScripting;[Serializable, Inspectable]
public class PlayerCharacter
{[Inspectable]public string name; [Inspectable]public string type;[Inspectable]public string color;[Inspectable]
public int level;
}
i提示 上面示例脚本中的变量使用[Inspectable]属性,因此它们可以显示在Unity的 Inspector窗口和可视化编程图形检查器中。如果没有该属性,则无法为脚本图中使用 有关[Inspectable]属性的详细信息,请参阅使用自定义类型。 |
这些值在代码中Player
对象的不同实例中可能不同。Player1
可以是一个5级的吟游诗人艾琳,并且喜欢绿色,Player2可以是一个15级的法师山姆,并且喜欢黑色。
如果你试图用基本变量来表示相同的数据,你必须创建很多节点,如下例所示。 使用自定义类,您可以创建一个节点来表示玩家角色的信息,而不是四个单独的节点。
变量
变量充当了一条信息的容器,这些信息可能会随着应用程序的运行而改变。要定义变量,您需要提供:
- 变量的名称,例如MyVariable。
- 变量保存的数据类型,例如
int
或string
。 - 变量的值,例如
1
或cat。
在可视化编程中,您可以为节点指定变量的名称,而不是固定值或文本。您的脚本图形使用变量的名称来访问其值。例如,您可以使用名为Count的变量,其类型为int
,值为1。您可以使用可视化编程中的 Add 节点将Count的值加 1,并将新值保存在Count中以再次使用脚本图形的另一部分,或不同的脚本图形。
变量也有作用域。变量的范围决定了脚本图形的哪些部分可以访问哪些变量来读取或修改它们的值。范围还可以决定另一个脚本图形是否可以访问变量。
您可以从黑板的图形中创建和管理变量。
有关黑板的更多信息,请参阅黑板。有关如何使用变量的更多信息,请参阅创建变量并将其添加到脚本图表。
变量范围
每个变量范围在黑板上都有自己的选项卡,流变量除外。可视化编程有六个变量范围。
范围 |
属性 |
Flow Variables |
流变量就像脚本语言中的局部变量:它们的作用域最小。在以下情况下,您不能使用流变量:
您无法从黑板创建流变量 - 您可以使用Set Variable节点创建一个并将 Scope设置为Flow。 |
Graph Variables |
图形变量属于特定的脚本图形。您不能在定义它们的特定脚本图形之外访问或修改图形变量。 除非您在图形窗口中打开了脚本图形,否则您也无法创建新的图形变量。 |
Object Variables |
对象变量属于特定的GameObject。您可以从Unity Editor的Inspector中为 GameObject编辑对象变量,并且可以在附加到GameObject的所有图形中访问对象变量。 除非您已从GameObject上的脚本机组件打开脚本图形,否则您无法创建新的对象变量。 |
Scene Variables |
场景变量属于当前场景。可视化编程在您的场景中创建一个新的游戏对象来保存对您的场景变量的引用。您可以从附加到单个场景中不同游戏对象的任何脚本图形访问场景变量,但无法访问项目中另一个场景中的场景变量。 |
App or Application Variables |
应用程序变量属于您的整个应用程序。您可以在应用程序运行时跨多个场景访问应用程序变量,应用程序变量将保存您的更改。 在应用程序退出后,应用程序变量中保存的任何值都会重置为其默认值。 |
Saved Variables |
保存的变量类似于应用程序变量,但即使在您的应用程序退出后它们仍然存在。您可以将保存的变量用作简单但功能强大的保存系统。Unity将保存的变量存储在其PlayerPrefs中,它们不引用 Unity 对象,如GameObjects 和组件。 有关PlayerPrefs的更多信息,请参阅Unity用户手册脚本参考中的PlayerPrefs。 |
i备注 您仍然可以访问黑板并使用在图形窗口中打开的状态图创建新变量,但您不能添加变量节点并在状态图中使用它。 |
对于已保存的变量,黑板上有两个附加选项卡:初始化和已保存:
- 在初始化选项卡中定义的值作为默认值应用于应用程序的所有新实例
- 已保存选项卡中定义的值是这些变量的最后修改值,基于您上次运行应用程序的时间。您可以手动编辑它们,或删除这些值以将它们重置为“初始化”选项卡中定义的值