解决direct.actor.Actor动画拉伸问题——Ursina与Panda3D调试求助
Ursina+Panda3D加载GLTF模型动画拉伸、不流畅的修复方案
问题描述
使用Ursina结合Panda3D开发时,加载GLTF格式的柯基模型并播放Idle动画,出现动画拉伸、运行不流畅的问题。
原代码:
from ursina import * from direct.actor.Actor import Actor app = Ursina() EditorCamera() sky = Sky() entity = Entity() # 动画存储在文件内 actor = Actor("corgi/scene.gltf") actor.reparent_to(entity) actor.setScale(0.009) # 缩小10倍 actor.setPos(0, -95, 0) # Y轴向下移动5单位 print(actor.getAnimNames()) actor.loop("Idle") app.run()
修复方案
方案1:调整Panda3D Actor的使用方式
- 调整缩放顺序:先给Actor设置缩放和位置,再挂载到Entity上,避免Entity的变换影响动画骨骼计算,导致拉伸。
- 指定动画播放速率:手动匹配模型原动画的帧率(可通过Blender等导出工具查看原帧率),调整
rate参数解决不流畅问题。
修改后的代码:
from ursina import * from direct.actor.Actor import Actor app = Ursina() EditorCamera() sky = Sky() # 先初始化Actor并设置缩放、位置 actor = Actor("corgi/scene.gltf") actor.setScale(0.009) actor.setPos(0, -95, 0) # 再挂载到Entity actor.reparent_to(Entity()) # 确认目标动画名称 print(actor.getAnimNames()) # 按原动画帧率调整播放速率,可根据实际情况微调数值 actor.loop("Idle", rate=1.0) app.run()
方案2:使用Ursina原生GLTF动画支持
Ursina对GLTF模型的动画做了原生适配,无需直接调用Panda3D的Actor,兼容性更好,能避免跨库导致的动画问题。
代码示例:
from ursina import * app = Ursina() EditorCamera() sky = Sky() # 直接用Entity加载GLTF模型,自动处理动画 corgi = Entity( model="corgi/scene.gltf", scale=0.009, y=-95 ) # 循环播放Idle动画 corgi.animate("Idle", loop=True) app.run()
说明
- 方案1适合需要保留Panda3D Actor高级功能的场景;
- 方案2更简洁,是Ursina推荐的GLTF动画使用方式,能减少多数兼容问题。
内容的提问来源于stack exchange,提问作者ranveer programing and game de
相关产品推荐
相关产品推荐

