Topic was automatically imported from the old Question2Answer platform.
Asked By
Arielrandal
Sorry if i didnt explain myself good in the title, but i have an area called bullet with a mesh instance and collision shape, and i can shoot those, i made an little kinematic body called enemy with a collision shape and mesh instance with a var called health that when it reaches 0 or lower it queue_free(), the question is: ¿how can i make the “enemy” detect the bullet and then substract an amount of health? Thanks for any answer.
There are many ways to do this but this is the easiest way I can think of.
Add an area node to your bullet and then add the collision shapes of the bullet to that area node. The area node has a the body_entered signal, so once connected when the bullet collides with your player it calls a function with the kinematic body as parameter inside the bullet which you can use to decrease the players health.
Another way would be to fire a signal in Area2D that the enemy Kinebody listens to:
Something like this:
in kinematic gd add this
onready var bullet: Area2D=$"../Area2D"
func _ready():
var _err=bullet.connect("gotcha",self,"_gotcha")
if _err:
print("Error:",_err)
func _gotcha(howbad):
print(howbad)
In Area2d.gd under the body_entered signal add this
signal gotcha
func _on_Area2D_body_entered(body: Node) -> void:
emit_signal("gotcha","deadcenter")
pass # Replace with function body.