如何在GDScript中实现敌人生成后变速、暂停再移动
实现敌人生成后定时变速/停止再恢复的逻辑
要实现敌人生成后延迟改变速度、停止再恢复的效果,核心是把固定的速度常量改成可动态修改的变量,配合Godot的延迟机制来控制状态切换,以下是修改后的实现:
核心思路
- 将原有的
const speed替换为可变变量,方便随时调整速度值 - 使用
async/await实现无节点的延迟逻辑,或者添加Timer节点来控制时序(前者更轻量化) - 按需求设置多个阶段的等待时间和对应速度
修改后的代码
extends CharacterBody3D var current_speed = -1 # 动态控制的当前速度 const BASE_SPEED = -1 # 保存基础速度,用于后续恢复 func _ready(): # 启动状态切换的异步流程,不阻塞物理帧更新 await speed_control_cycle() func _physics_process(delta): position += transform.basis * Vector3(current_speed, 0, 0) * delta * 0.01 async func speed_control_cycle(): # 阶段1:生成后以基础速度移动3秒 await get_tree().create_timer(3.0).timeout # 阶段2:停止移动(也可改为其他速度,比如current_speed = -0.5) current_speed = 0 # 阶段3:停止2秒后恢复基础速度 await get_tree().create_timer(2.0).timeout current_speed = BASE_SPEED # 如果需要循环重复这个变速流程,取消下面的注释即可 # await speed_control_cycle()
额外说明
async/await是Godot 3.1及以上版本支持的特性,无需额外添加Timer节点,代码更简洁- 如果需要更复杂的时序控制(比如支持中途打断、多段变速),可以添加Timer节点,通过连接
timeout信号来处理速度变化 - 调整
create_timer()中的数值可修改各阶段的等待时长,修改current_speed的赋值可设置任意目标速度
内容的提问来源于stack exchange,提问作者happy ghast
相关产品推荐
相关产品推荐

