Col*_*shi 2 collision gdscript godot
我正在尝试制作一个传送部件,因此我需要检测身体何时与区域碰撞。我尝试使用body_enter/body_entered和body_exit/ body_exited,但我不知道如何它们到底是如何工作的以及我需要在哪里插入它们。我可以有使用它的示例代码吗?\n我的节点路径:
RigidBody\n\xe2\x94\x9c CollisionShape\n\xe2\x94\x9c MeshInstance\n\xe2\x94\x9c Area\n\xe2\x94\x9c \xe2\x94\x9c CollisionShape\nRun Code Online (Sandbox Code Playgroud)\n
场景树结构
\n首先,如果您希望两个事物发生碰撞,您可能希望它们成为兄弟姐妹。没有一个Node是另一个的孩子。这是因为Spatials 是相对于其父级放置的。换句话说:当Spatial移动时,它的子对象也会随之移动。
启用监控
\n其次,您要确保Node检测碰撞的系统能够做到这一点。RigidBody在 a和 an的情况下Area,Area将会检测到RigidBody,因此它必须monitoring是true 这是默认值。因此,除非你一直在搞乱它,否则你不需要做任何事情。
图层和蒙版
\n第三,您希望图层和蒙版重叠。特别是,您希望 的collision_mask与 的Area具有共同的collision_layer位RigidBody。默认情况下,它们带有第一位设置,因此默认情况下也满足这一点,除非您弄乱了它。
信号
\n第四,需要连接"body_entered"的信号Area。您有两种方法可以做到这一点:
使用编辑器:
\nArea在“场景”面板(默认在左侧)中进行选择,然后转到“节点”面板(默认在右侧),然后转到“信号”选项卡。
在那里你应该找到“body_entered(body:Node)”。双击它。或者选择它,然后单击底部的“Connect\xe2\x80\xa6”按钮,或者按 Enter 键。
\nGodot 会要求您选择Node要连接的对象。您可以将其连接到Node同一场景中预先附加脚本的任何场景。我建议将其连接到Area自身。
Godot 还允许您指定处理它的方法的名称(默认名称为_on_Area_body_entered)。
在“高级”下,您还可以添加要传递给该方法的额外参数,无论信号是否可以/将等待下一帧(“延迟”),以及一旦触发它是否会自行断开连接(“一次性”)。
\n通过按下“连接”按钮,Godot 将相应地连接信号,如果目标节点的脚本不存在,则使用提供的名称创建一个方法。
\n从代码:
\n要从代码连接信号,请使用connect方法。另请参见断开连接和is_connected。
\n所以你可以,使用该connect方法来连接"body_entered"信号,如下所示:
func _ready() -> void:\n connect("body_entered", self, "_on_Area_body_entered")\n\nfunc _on_Area_body_entered(body:Node) -> void:\n pass\nRun Code Online (Sandbox Code Playgroud)\n该代码旨在在附加到其Area自身的脚本中工作。也可以connect从一个呼叫Node另一个。请注意,我们将要连接的方法的名称作为参数传递给connect方法,因此它可以是您想要的任何名称。
这connect方法具有可选参数来指定额外参数,或者如果您希望连接延迟或一次性连接。
重申一下:仅仅添加一个方法是行不通的,您需要将信号连接到它。并且该方法没有特殊的名称,可以使用您选择的任何名称。
\n完成后,该方法应该在RigidBody重叠时执行Area。
| 归档时间: |
|
| 查看次数: |
10239 次 |
| 最近记录: |