【发布时间】:2022-11-19 10:58:37
【问题描述】:
我一直在努力做到当一个 KinematicBody2D 进入一个 Area2d 时,Area2D 消失了,我该怎么办?
我完全不知道如何做到这一点
【问题讨论】:
标签: c# collision-detection collision game-development godot
我一直在努力做到当一个 KinematicBody2D 进入一个 Area2d 时,Area2D 消失了,我该怎么办?
我完全不知道如何做到这一点
【问题讨论】:
标签: c# collision-detection collision game-development godot
当Area2D检测到KinematicBody2D时,它会发出"body_entered"信号。因此,如果您希望在那一刻发生某些事情,您需要处理信号。为此,将信号连接到脚本方法……
首先,有一个脚本,您将在其中连接到信号的方法。我建议将脚本附加到 Area2D 本身。这是有道理的,因为:
Area2D检测到KinematicBody2D时,游戏中存在Area2D。KinematicBody2D的Area2D做出反应的对象是Area2D(我们希望它消失)。
所以将脚本附加到Area2D。由于您使用的是 C#,因此需要一个 C# 脚本。
接下来,选择 Area2D 转到节点面板(默认情况下在右侧停靠栏)并选择信号选项卡。在那里您会找到可从Area2D 连接的信号列表。双击(或选择并单击连接)列表中的 "body_entered" 信号,然后 Godot 将打开一个对话框,您可以在其中选择将信号连接到的位置……选择 Area2D 本身。
因此,Godot 将在脚本上创建一个新方法,该方法将在信号发生时处理该信号。我们说信号连接到方法。换句话说,当一个主体进入 Area2D 时,您在该方法上放置的任何代码都会执行。
如果您不确定该方法是否在正确的时间执行,您可以随时使用 Print 或断点来确认。
我在another answer 中更详细地介绍了物理设置。
自从我将 C# 与 Godot 一起使用以来已经有一段时间了,但是,我记得一个错误,它将方法放置在脚本的类之外。确保该方法在类内部(剪切和粘贴应该可以)。
顺便说一句,鉴于您可以在同一个项目中结合使用 GDScript 和 C#,另一种选择是将 GDScript 用于“胶水代码”,例如,您可以将信号连接到 GDScirpt,并让 GDScript 调用 C#。
最后,消失是什么意思? Area2D 不是视觉元素。但是,您始终可以将 visible 设置为 false,这也会影响它可能拥有的任何子节点。顺便说一句,如果你想删除Area2D,你想调用queue_free(C#上的QueueFree)。
【讨论】: