【问题标题】:How to detect a collision in godot (c#)如何检测 godot 中的碰撞 (c#)
【发布时间】:2022-11-19 10:58:37
【问题描述】:

我一直在努力做到当一个 KinematicBody2D 进入一个 Area2d 时,Area2D 消失了,我该怎么办?

我完全不知道如何做到这一点

【问题讨论】:

    标签: c# collision-detection collision game-development godot


    【解决方案1】:

    Area2D检测到KinematicBody2D时,它会发出"body_entered"信号。因此,如果您希望在那一刻发生某些事情,您需要处理信号。为此,将信号连接到脚本方法……

    首先,有一个脚本,您将在其中连接到信号的方法。我建议将脚本附加到 Area2D 本身。这是有道理的,因为:

    1. 我们知道当Area2D检测到KinematicBody2D时,游戏中存在Area2D
    2. 我们想要对检测到KinematicBody2DArea2D做出反应的对象是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)。

    【讨论】:

      猜你喜欢
      • 2021-06-28
      • 1970-01-01
      • 2018-02-15
      • 2017-07-25
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多