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

解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:15:31