Topic was automatically imported from the old Question2Answer platform.
Asked By
genete
Old Version
Published before Godot 3 was released.
According to the documentation:
void set_trigger ( bool enable )
Set whether this shape is a trigger. A trigger shape detects
collisions, but is otherwise unaffected by physics (i.e. will not
block movement of colliding objects).
but it doesn’t detects collisions at all. A bug?
I want to stop the body when it hits first time the floor but it doesn’t collide at all because it is set as trigger.
Any help is welcome.
extends KinematicBody2D
const GRAVITY = 200.0
var velocity = Vector2()
var gravity
var first_time=true
func _ready():
set_fixed_process(true)
gravity=GRAVITY
get_node("shape").set_trigger(true)
func _fixed_process(delta):
var force = Vector2(0, gravity)
velocity += force*delta
var motion = velocity*delta
motion = move(motion)
if(is_colliding()):
print("colliding")
var n=get_collision_normal()
motion=n.slide(motion)
velocity=n.slide(velocity)
move(motion)
if first_time:
gravity=0
velocity=Vector2(0,0)
print("first_time")
first_time=false
Take a look at this piece of documentation: http://docs.godotengine.org/en/latest/tutorials/2d/physics_introduction.html#in-case-of-overlap-who-receives-collision-information
In case of KinematicBody vs StaticBody collision, no one receives the information about the collision.
If you are using body as a trigger, then I would suggest to use Area node instead, if you connect signal body_enter from Area node you will still receive the information about collision with StaticBody. You can put this Area as a child of your KinematicBody, or convert Kinematic to Area (it’s your call, both will work)
@kubecz3k
Every time I read that documentation you point in your link I get more confused.
Reading that table, how it is possible that two KinematicBody2D doesn’t report collision information to each other? What’s the use of KinematicBody2D.is_colliding() method then?
If I can detect collision information from both KinematicBody2D using the is_colliding() method, why I can’t detect it again when the shape is set to trigger?
Either the documentation is wrong or there is a bug.
genete | 2016-04-22 09:50
@genete, I’m unable to answer those question, When I started with Godot (v1.0) this table was accurate and everything was working like it said. Since now you are telling me that 2 KinematicBodies can get info about colliding each other it seems that docs are outdated. When it comes to trigger… I’m unsure as well, since from the time Area nodes have those handy signals I was not using trigger shapes…
From practical point of view I’m suggesting to try Area, when it comes to the questions itself - maybe someone else will have better answers (or suggestions). Sorry for that!