如何在Godot中让动画适配对象的本地旋转?
解决Godot中动画播放后重置对象旋转的问题
以下是几种实用的解决思路,适合刚接触Godot的开发者:
用AnimationTree实现旋转叠加
如果你还在使用AnimationPlayer,换成AnimationTree能更灵活地控制动画混合。找到对应旋转轨道的设置,将混合模式改为Additive——这样动画的旋转会叠加在对象当前的旋转角度上,而不是直接覆盖重置。操作步骤:- 给目标节点添加AnimationTree节点,关联你的AnimationPlayer资源。
- 打开AnimationTree的编辑界面,在动画库中找到旋转轨道的属性面板,修改混合模式为
Additive。
手动记录并恢复旋转状态
简单直接的方案:播放动画前先保存对象当前的旋转值,动画结束后再把旋转值设回去。示例代码(GDScript):# 播放前记录当前旋转(用rotation_degrees还是rotation看你习惯用角度还是弧度) var saved_rotation = $YourTargetNode.rotation_degrees # 播放动画 $AnimationPlayer.play("your_animation_name") # 等待动画结束 await $AnimationPlayer.animation_finished # 恢复旋转 $YourTargetNode.rotation_degrees = saved_rotation如果是循环动画,可以在动画的
animation_looped信号里处理,或者在_process中动态调整。关闭AnimationPlayer的重置设置
检查AnimationPlayer的属性面板,看看reset_on_stop选项是否开启。如果开启,动画播放停止时会自动重置所有轨道的初始值,把这个选项关掉就能避免旋转被重置。用翻转属性替代手动旋转(针对2D角色)
如果你是给2D角色做转身,别直接旋转节点180度,而是用节点的flip_h(水平翻转)或flip_v(垂直翻转)属性。比如Sprite2D或AnimatedSprite2D都有这个属性,设置后动画会自动适配翻转状态,不会出现播放时重置旋转的问题。
内容的提问来源于stack exchange,提问作者Homer Cowell
相关产品推荐
相关产品推荐

