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

如何仅调整单个节点速度?实现KinematicBody2D敌人移动与动画减速

单独减慢KinematicBody2D敌人的移动与动画速度方案

核心思路

不用全局时间缩放,而是给敌人节点添加自定义的速度乘数,分别控制移动和动画的播放速率,完全独立于其他游戏对象。

具体实现步骤

  • 控制移动速度
    在敌人的脚本中定义一个自定义变量(比如var speed_multiplier = 1.0),将原本的基础移动速度乘以这个乘数来计算最终速度。示例代码:

    # 基础移动速度
    var base_speed = 200.0
    # 速度乘数,1.0为正常速度,小于1则减速
    var speed_multiplier = 1.0
    
    func _physics_process(delta):
        var move_direction = get_input_direction() # 替换为你实际的方向获取逻辑
        var velocity = move_direction * base_speed * speed_multiplier
        velocity = move_and_slide(velocity, Vector2.UP)
    

    当需要减速时,直接修改speed_multiplier的值(比如speed_multiplier = 0.5),恢复时改回1.0即可。

  • 控制动画播放速度
    通过敌人节点下的AnimationPlayer组件单独设置动画速率。同样可以用一个自定义变量(比如var anim_speed_multiplier = 1.0)来统一控制:

    # 动画速度乘数
    var anim_speed_multiplier = 1.0
    
    func _ready():
        # 初始化动画速度
        $AnimationPlayer.speed_scale = anim_speed_multiplier
    
    # 需要调整动画速度时调用
    func set_anim_speed(factor):
        anim_speed_multiplier = factor
        $AnimationPlayer.speed_scale = anim_speed_multiplier
    

    如果需要单独控制某个特定动画的速度,可以针对单个动画设置:

    $AnimationPlayer.get_animation("run").speed_scale = 0.5
    

简化统一控制

如果希望移动和动画的减速比例保持一致,可以合并成一个变量统一管理:

var slowdown_factor = 1.0

func _physics_process(delta):
    var move_direction = get_input_direction()
    var velocity = move_direction * base_speed * slowdown_factor
    velocity = move_and_slide(velocity, Vector2.UP)

func _ready():
    $AnimationPlayer.speed_scale = slowdown_factor

# 调用此函数切换减速状态
func toggle_slowdown(is_slow):
    slowdown_factor = 0.3 if is_slow else 1.0
    $AnimationPlayer.speed_scale = slowdown_factor

这种方式完全不会影响游戏内其他节点的运行状态,所有调整仅作用于当前敌人对象。

内容的提问来源于stack exchange,提问作者cak3_lover

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:55:18