视觉脚本教程(逻辑方块)
创建一个按钮激活的平台
Lesson 8 of 10 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
在本节课中,我们将探索一种在游戏中激活事件的新方法。
我们将创建一个基于按钮的系统,玩家需要激活这些按钮才能释放平台或执行其他操作,而不是使用可收集物品。
这个例子稍微复杂一点,它将帮助我们练习到目前为止学习到的多个概念,比如实体之间的通信、属性的使用、标签以及视觉逻辑的组织。
在本部分中,我们将创建平台逻辑,并学习如何使用直接存储在场景中的属性。
当需要在游戏中的不同实体之间共享信息时,这非常有用。场景可以作为一个集中存储的数据位置,多个系统可以在这里读取和修改相同的信息,而不是仅在一个实体内部存储数据。
在本例中,按钮将增加存储在场景中的一个值,而平台将读取该值以了解所有按钮何时被激活。
1. 创建平台
首先,正如我们在之前的课程中所学的,让我们为我们的平台创建一个新的实体模板。
根据你的项目的风格和需求,配置将用作平台可视化表现的网格。
然后添加和配置碰撞,以便玩家可以在场景中正确地与平台互动。
在这个例子中,平台不需要任何特定的标签或属性,因为激活逻辑将由我们将在后面的步骤中创建的系统的其他元素来控制。

2. 创建平台逻辑
现在让我们创建一个新的逻辑砖块并将其链接到我们平台实体。
在这个逻辑砖块内部,我们将开发负责控制平台行为及其与系统其他部分交互的逻辑。
你可以直接将这个逻辑砖块添加到实体,或者通过平台模板配置它,就像我们在之前的课程中所做的那样。
由于这个平台可能是你想要重用的东西,所以通过模板配置通常是一个不错的选择。

首先,让我们创建两个属性。
第一个属性将在平台逻辑砖块中添加。它应该是一个名为按钮的整型属性。
这个属性将来会存储地图中可用按钮的总数。
有了这个值,平台将能够了解有多少按钮存在,并将该数字与玩家已经激活的按钮数量进行比较。

第二个属性将直接创建在场景中,以便我们可以轻松地从游戏逻辑的不同部分访问它。
为此,在3D视图中,点击场景的天空/背景以选择场景本身。
然后,在属性面板中,你应该看到所选对象类型是场景,以及当前场景的名称。
这个属性将稍后用于存储和共享全局信息。

点击场景的属性标签,创建一个名为按钮计数的新属性。
当我们创建按钮时,这个属性会更有意义,因为按钮将负责在被玩家激活时更改其值。
即便如此,我们现在也可以创建它,因为它将很快被平台逻辑使用。
简而言之:
- 按钮属于平台并存储按钮的数量。
- 按钮计数属于场景并存储已经激活的按钮数量。

现在我们创建了两个属性,一个在场景中,一个在平台逻辑砖块中,让我们开始开发平台逻辑。
返回到图形。
我们需要的第一条信息是地图中存在的按钮总数。
因为这个值只需要在游戏开始时计算一次,所以我们将通过启动时执行这段逻辑。
首先,获取场景并使用节点查找具有按钮标签的所有实体。
我们尚未创建按钮,但我们已经可以准备这段逻辑,因为我们将在稍后为它们添加这个标签。
然后使用大小节点获取在该列表中找到的实体数量。
这个值代表场景中存在的按钮总数。
最后,使用设置按钮将此结果存储在平台的按钮属性中。

现在让我们创建控制平台动作的逻辑,以便在所有按钮被按下后进行激活。
在这个例子中,我们将从场景中移除平台,但你可以根据需要调整这段逻辑,以执行其他任何操作,例如移动平台、播放动画、打开通道、启用另一个对象或触发过场动画。
对于这个检查,我们将使用更新时,确保条件在游戏运行时持续被验证。
首先,获取场景并访问其属性。
由于我们之前在场景中创建了按钮计数属性,我们可以通过获取属性节点访问它,该节点返回一个包含场景所有属性的字典。
然后将此字典连接到获取属性节点,并告知名称按钮计数以精确检索我们在场景中创建的属性。
默认情况下,获取属性的输出类型为任意。
因为我们需要将这个值与平台的按钮属性(整数)进行比较,所以将获取属性的输出类型更改为整型。
然后将这个值与平台的按钮属性进行比较,后者存储地图中可用按钮的总数。
如果两个值相等,表示所有按钮都已被玩家激活。
此时,我们可以执行所需的动作。
在此示例中,我们将从场景中删除平台实体。

很好。我们的平台逻辑现在已经准备好了。
平台现已能够在游戏开始时自动识别地图中存在多少按钮。
这样我们就可以在场景中添加或删除按钮,而不必手动更改任何值,因为逻辑将会在每次游戏开始时重新计算数量。
因此,平台可以动态判断所有按钮何时被激活,通过将按钮的总数与存储在按钮计数场景属性中的值进行比较。
我们还为下一步的操作做好了准备,包括使用按钮标签,这将在稍后添加到按钮上。
这意味着元素之间的通信已经计划好:
- 平台计算存在多少按钮
- 每个按钮在被激活时更新场景属性
- 平台检查场景属性
- 当计数与总数匹配时,平台执行其动作
现在我们准备好进入下一步:创建按钮并开发将它们与平台连接的逻辑,完成这两个系统之间的交互。