In this part I will show you how to set up attack on enemies and in the next part I will show you how to damage/kill enemies, player.
Join the channel Telegram of the AnonyViet 👉 Link 👈 |
Attack setting
In the previous section, I showed you how to set up the enemy and in it the above code is used to determine when it meets the wall and it will turn around.
But here when it meets the Player, it also turns around so we have to determine that when it hits the wall and it’s not the Player, it will turn around.
And vice versa, if I collide with a wall and it’s a Player, I’ll make the enemy’s child attack.
Add node
You add yourself a raycast node named XacDinhPlayer (this raycast node I use to determine if the Player is standing in front of the enemy, it will attack).
Done, you adjust to horizontal and the raycast arrow should not collide with CollisionShape2D.
You turn it on and adjust the Cast To.
var dangtancong = false func _physics_process(delta): if dangtancong == false: chuyendong.x = tocdo * huong_dichuyen chuyendong.y += trongluc chuyendong = move_and_slide(chuyendong,Vector2.UP) animation.play("dichuyen") if $RayCast2D.is_colliding() == false: huong_dichuyen = huong_dichuyen * -1 scale.x = scale.y * huong_dichuyen if is_on_wall() and $XacDinhPlayer.is_colliding() == false: huong_dichuyen = huong_dichuyen * -1 scale.x = scale.y * huong_dichuyen var coll = $XacDinhPlayer.get_collider() if coll != null and coll.name == "Player" and dangtancong == false: dangtancong = true animation.play("tancong")
I will have the same code as Player’s attack.
I omitted the moving part if dangtancong == false:
is to move if not in attack mode and vice versa.
Current if is_on_wall() and $XacDinhPlayer.is_colliding() == false:
then i add $XacDinhPlayer.is_colliding() == false
is to determine that when it encounters a wall, if it’s a Player, it doesn’t rotate and vice versa.
Current var coll = $XacDinhPlayer.get_collider()
I will create a variable and assign it as $XacDinhPlayer.get_collider() là
jaw get_collider() allow me to identify RayCast which node is colliding with, I will assign the colliding node to the coll variable.
Current if coll != null and coll.name == "Player" and dangtancong == false:
I check if col has been assigned with a node and the name is “Player” and not in attack state, it will perform the attack.
func _on_AnimatedSprite_animation_finished(): if animation.animation == "tancong": dangtancong = false
I thought it was similar to the Player side, I needed to add a function to determine when the animation ended dangtancong = false by connecting the signal.
And this is the final result.
Summary
So I’ve finished showing you how to do it, if you have any questions, please Join Godot Community Group VN or Anonyviet Community for answers,