This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
3D 模型的骨骼动画使用模型的骨骼对模型中的顶点应用变形。
关于如何将 3D 数据导入到模型中以进行动画的详细信息,请参阅模型文档。
模型使用model.play_anim()
函数进行动画处理:
function init(self)
-- 在 #model 上来回播放 "wiggle" 动画
model.play_anim("#model", "wiggle", go.PLAYBACK_LOOP_PINGPONG)
end
Defold 目前仅支持烘焙动画。动画需要为每个动画骨骼的每个关键帧设置矩阵,而不是将位置、旋转和缩放作为单独的键。
动画也是线性插值的。如果您进行更高级的曲线插值,动画需要从导出器进行预烘焙。
不支持 Collada 中的动画剪辑。要对每个模型使用多个动画,请将它们导出到单独的 .dae 文件中,然后在 Defold 中将这些文件收集到一个 .animationset 文件中。
模型骨架中的骨骼在内部表示为游戏对象。
您可以在运行时检索骨骼游戏对象的实例 id。函数model.get_go()
返回指定骨骼的游戏对象的 id。
-- 获取我们 wiggler 模型的中间骨骼游戏对象
local bone_go = model.get_go("#wiggler", "Bone_002")
-- 现在可以对游戏对象做一些有用的操作...
除了使用model.play_anim()
来推进模型动画外,Model组件还公开了一个”游标”属性,可以使用go.animate()
进行操作(有关属性动画的更多信息):
-- 在 #model 上设置动画但不启动它
model.play_anim("#model", "wiggle", go.PLAYBACK_NONE)
-- 将游标设置为动画的开头
go.set("#model", "cursor", 0)
-- 使用 in-out quad 缓动在 0 和 1 之间对游标进行 pingpong 补间。
go.animate("#model", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_INOUTQUAD, 3)
模型动画model.play_anim()
支持一个可选的 Lua 回调函数作为最后一个参数。当动画播放到结束时将调用此函数。对于循环动画,或者当动画通过go.cancel_animations()
手动取消时,永远不会调用该函数。回调可用于在动画完成时触发事件或将多个动画链接在一起。
local function wiggle_done(self, message_id, message, sender)
-- 动画完成
end
function init(self)
model.play_anim("#model", "wiggle", go.PLAYBACK_ONCE_FORWARD, nil, wiggle_done)
end
动画可以播放一次或循环播放。动画的播放方式由播放模式决定:
go.PLAYBACK_NONE
go.PLAYBACK_ONCE_FORWARD
go.PLAYBACK_ONCE_BACKWARD
go.PLAYBACK_ONCE_PINGPONG
go.PLAYBACK_LOOP_FORWARD
go.PLAYBACK_LOOP_BACKWARD
go.PLAYBACK_LOOP_PINGPONG
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB