恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Godot Engine动画速度控制:5个实战场景速查
首页
资讯中心
/
Godot Engine动画速度控制:5个实战场景速查
Godot Engine动画速度控制:5个实战场景速查
发布时间:2026/8/28 8:51:37
Godot Engine动画速度控制5个实战场景速查【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot本文讲清 Godot EngineAnimationPlayer控制动画播放速度的全部 4 种方式读完能在全局变速、单次调速、倒放、动态变速场景里直接挑对方法。方法选型速查先建立选型框架4 种速度控制方式分别在不同层级生效。方式适用场景关键参数一句话结论speed_scale全局变速float默认 1.0设一次影响所有播放custom_speed单次播放调速float默认 1.0只影响当前这次播放play_backwards反向播放custom_blend等价负速度加 from_endEngine.time_scale整体慢动作/暂停float0 为冻结连物理、输入一起影响选择规则很简单影响所有东西选speed_scale或time_scale只影响某一次选custom_speed。用speed_scale做全局变速设一次所有动画都按这个速度走。speed_scale是播放器节点属性0.5 是半速2.0 是双倍默认 1.0。检查器里 Speed scale 一栏也能直接改实时生效。设置 1.5 倍速并播放行走动画。$AnimationPlayer.speed_scale 1.5 $AnimationPlayer.play(walk)最终速度是speed_scale与单次速度相乘的结果见 scene/animation/animation_player.cppdouble speed speed_scale * cd.speed_scale; bool backwards std::signbit(speed); // 符号决定方向 double next_pos cd.pos p_delta * speed;⚠️ 全局设置用完记得改回 1.0。custom_speed只影响单次播放只调当前这一次不污染全局设置。play的第三个参数就是custom_speed第二个参数传 -1 表示用默认混合时间。以 0.8 倍速播放攻击动画。$AnimationPlayer.play(attack, -1, 0.8)适合攻击慢动作这类临时效果播完不需要清理。⚠️ 负值加 from_end 才是倒放减速请传正值。用play_backwards反向播放倒放最直接的方式不用自己算负值。它内部只是play的简写等价于custom_speed -1且from_end true。$AnimationPlayer.play_backwards(jump)源码就一行等价关系一目了然void AnimationPlayer::play_backwards(const StringName p_name, double p_custom_blend) { play(p_name, p_custom_blend, -1, true); }适合角色转身、物体回落、慢放回放这类效果。只想倒放某一段用play_section_backwards限定区间。⚠️ 倒放从动画末尾开始不是当前位置。状态驱动动态变速事件发生时更新speed_scale即可一行搞定。例如角色低血量时动作放慢监听血量变化动态调整动画速度。func _on_health_changed(percent: float): $AnimationPlayer.speed_scale 0.5 percent * 0.5要平滑过渡就用 Tween 插值同一个属性。var tw create_tween() tw.tween_property($AnimationPlayer, speed_scale, 0.5, 0.3)⚠️ 直接赋值有突变想要丝滑用 Tween。Engine.time_scale与物理联动变速要整个游戏一起慢下来用time_scale。它是全局时钟0.3 是全场景 3 折速0 是完全冻结适合暂停和子弹时间。Engine.time_scale 0.3⚠️ 物理和输入也会一起变慢。做子弹时间的经典组合拳全局放慢再把主角动画倍速拉回来主角就显得格外从容。Engine.time_scale 0.2 $PlayerAnim.speed_scale 5.0变速后可用get_playing_speed()验证实际生效速度它返回speed_scale与单次速度的乘积未播放时返回 0。避坑这些写法会让你怀疑人生❌$AnimationPlayer.speed_scale 0想停住动画 → ✅stop()或pause()→ 速度 0 时is_playing()仍为 true位置不会重置。❌ 改speed_scale给某一个动画调速 → ✅play传custom_speed→speed_scale是节点属性一改影响所有动画。❌play(walk, -1, -1.0)期望从末尾倒放 → ✅play_backwards(walk)→ 倒放依赖from_endplay_backwards替你补了。❌stop()后查get_playing_speed()期望拿到旧速度 → ✅play之后再查 → 未播放时它返回 0。小结选型口诀全局用speed_scale单次用custom_speed倒放用play_backwards全局慢动用time_scale犹豫时先问一句要不要影响所有东西。API 细节见 doc/classes/AnimationPlayer.xml实现见 scene/animation/animation_player.cpp。【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考