微型游戏的敌人先做「来回走」,再做追人。追人会引出导航网格,来回走只要方向和墙。
巡逻体
根:CharacterBody2D 子:贴图、碰撞、RayCast2D(朝下偏前方,探有没有地)
gdscript
extends CharacterBody2D
@export var speed := 70.0
var dir := 1.0
var gravity: float = ProjectSettings.get_setting("physics/2d/default_gravity")
func _physics_process(delta: float) -> void:
if not is_on_floor():
velocity.y += gravity * delta
if is_on_wall() or not $FloorCheck.is_colliding():
dir *= -1
$FloorCheck.position.x = absf($FloorCheck.position.x) * dir
velocity.x = dir * speed
move_and_slide()FloorCheck 是 RayCast2D,碰撞遮罩勾地面层。走到平台边缘射线落空,转身。
伤玩家
子节点再加 Area2D 当 hitbox,body_entered 里 body.hurt()。把 hitbox 碰撞层设成 hurtbox,不要和身体层混在一起,否则敌人会把自己挤飞。
先让它在平地上来回,再放到有坑的图上。坑会测出射线长度够不够。
