Search code examples
2dcollision-detectioncollisiongodotgodot4

Godot4. How to detect collisions ONLY by the first iteration


I have the following problem in Godot Engine: How to detect collisions only the first iteration when Node2D enters the tree?

I'm using Area2D which is 💥 "Explosion" in my game and it has to detect collisions one time only when it appears in the screen. Next comes the animation of the explosion lasting 0.3 seconds and its disappearance and during this it should not detect the collisions.

The first thing that came to mind was to start a timer and after it expires, change the monitoring parameter to false. But with a timer of 0.05s, this does not work perfectly, and with a timer of less than 0.05s, it does not work correctly.That's why it doesn't suit me.

Is there any solution to this problem in Godot so that collisions are searched for exactly 1 iteration when an object appears in the tree?


Solution

  • I am not exactly sure what you mean with only 1 time when it enters the tree, so I will give three possible solutions.

    1. Instead of the timer, have you tried using the physics_process function? You can set the monitoring to false after the first call of the process function. Then you can guarantee that it gets called exactly 1 time within the physics process.
    2. If you want for it to get called only on 1 collision, you could set the monitoring function to off on the on_body_entered function.
    3. In the ready function you can use the get_overlapping_areas (or get_overlapping_bodies) functions and then disable contact monitoring.