求Godot 4.0基础敌人移动脚本及制作方法
Godot 4.0 基础敌人移动实现方法
下面给你两种最常用的敌人移动方案,都是基于CharacterBody2D节点(3D场景可换成CharacterBody3D,逻辑通用),新手友好,直接就能上手。
一、基础巡逻移动(来回往复)
适合固定路线巡逻的守卫类敌人
实现步骤:
- 搭建敌人节点:新建
CharacterBody2D作为根节点,添加Sprite2D(放置敌人 sprite)、CollisionShape2D(设置碰撞范围)。 - 挂载以下GDScript脚本:
extends CharacterBody2D # 巡逻移动速度 @export var move_speed: float = 150.0 # 巡逻点(编辑器里拖入两个Marker2D节点即可) @export var patrol_points: Array[Node2D] = [] # 当前目标巡逻点的索引 var current_point_index: int = 0 func _physics_process(delta: float) -> void: if patrol_points.size() < 2: return # 至少需要两个巡逻点才能形成路线 # 获取当前目标点的全局位置 var target_pos: Vector2 = patrol_points[current_point_index].global_position # 计算归一化的移动方向(避免斜向移动速度异常) var move_dir: Vector2 = global_position.direction_to(target_pos) # 设置移动速度向量 velocity = move_dir * move_speed # 执行移动(自带碰撞处理) move_and_slide() # 到达目标点后切换巡逻方向 if global_position.distance_to(target_pos) < 10.0: current_point_index = (current_point_index + 1) % patrol_points.size()
编辑器配置:
- 在场景中放置两个
Marker2D,调整位置作为巡逻的起点和终点 - 将这两个
Marker2D拖入脚本的patrol_points数组中
二、玩家追踪移动
适合发现玩家后主动追击的怪物类敌人
实现步骤:
- 同样用
CharacterBody2D作为敌人根节点,添加显示、碰撞节点。 - 挂载以下脚本:
extends CharacterBody2D # 追击移动速度 @export var move_speed: float = 200.0 # 触发追击的最大距离 @export var chase_range: float = 500.0 # 玩家节点(编辑器里直接拖入你的玩家节点) @export var player: CharacterBody2D func _physics_process(delta: float) -> void: if not player: return # 计算敌人与玩家的距离 var distance_to_player: float = global_position.distance_to(player.global_position) if distance_to_player <= chase_range: # 计算追击方向 var chase_dir: Vector2 = global_position.direction_to(player.global_position) velocity = chase_dir * move_speed move_and_slide() # 可选:让敌人始终面朝玩家 look_at(player.global_position) else: # 超出范围时停止移动 velocity = Vector2.ZERO
额外优化建议:
- 加入动画切换:通过判断
velocity.length() > 0,在移动时播放行走动画,静止时播放待机动画 - 3D场景适配:只需把
Vector2替换为Vector3,CharacterBody2D替换为CharacterBody3D,核心逻辑完全一致
内容的提问来源于stack exchange,提问作者Zach Hatch
相关产品推荐
相关产品推荐

