Home > Back-end >  How to detect a collision in godot (c#)
How to detect a collision in godot (c#)

Time:11-19

I've been trying to make it so when a KinematicBody2D enters an Area2d, the Area2D disappears, what should I do?

I have absolutely zero clue how to do this

CodePudding user response:

When the Area2D detect the KinematicBody2D, it will emit a "body_entered" signal. So if you want something to happen in that moment, you want to handle the signal. In order to do so, connect the signal to an script method…

First, have an script where the method that you will connect to signal will be. I recommend to have the script attached to the Area2D itself. This makes sense because:

  1. We know that when the Area2D detect the KinematicBody2D, the Area2D exists in the game.
  2. The object we want to react to the Area2D detecting the KinematicBody2D is the Area2D (we want it to dissapear).

So attach a script to the Area2D. Since you are working with C#, you want a C# script.

Next, with the Area2D selected go to the Node panel (on the right dock by default) and select the Signal tab. There you will find the list of signals that are available to connect from the Area2D. Double click (or select and click connect) the "body_entered" signal from the list, then Godot will open a dialog where you can select where to connect the signal to… Select the Area2D itself.

As a result Godot will create a new method on the script which will handle the signal when it happens. We say that the signal is connected to the methods. In other words, whatever code you put on that method will be executed when a body enters the Area2D.

If you are unsure if the method is being executed at the correct time, you can always resource to a Print or a breakpoint to confirm.

I have gone into setting physics in much more detail in another answer.

It have been a while since I used C# with Godot, yet, I recall a bug where it placed the method outside the class of the script. Make sure the method is inside the class (cut and paste should do).

By the way, given the fact that you can combine GDScript and C# in the same project, another alternative is to use GDScript for "glue code", for example you can connect the signal to GDScirpt, and have GDScript call into C#.

Finally, what do you mean by disappear? Area2D is not a visual element. However, you can always use set visible to false which also affects any children Nodes it might have. By the way, if you want to delete the Area2D you want to call queue_free (QueueFree on C#).

  • Related