You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Godot 4.0基础敌人移动脚本及制作方法

Godot 4.0 基础敌人移动实现方法

下面给你两种最常用的敌人移动方案,都是基于CharacterBody2D节点(3D场景可换成CharacterBody3D,逻辑通用),新手友好,直接就能上手。

一、基础巡逻移动(来回往复)

适合固定路线巡逻的守卫类敌人

实现步骤:

  1. 搭建敌人节点:新建CharacterBody2D作为根节点,添加Sprite2D(放置敌人 sprite)、CollisionShape2D(设置碰撞范围)。
  2. 挂载以下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数组中

二、玩家追踪移动

适合发现玩家后主动追击的怪物类敌人

实现步骤:

  1. 同样用CharacterBody2D作为敌人根节点,添加显示、碰撞节点。
  2. 挂载以下脚本:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:00:05