动画播放
学习本节后你将学会控制XEAnimationMeshActor播放动画.
XEAnimationMeshActor是可以播放骨骼动画的3D模型Actor,我们可以用XEAnimationMeshActor来加载一个带动画的模型文件(*.mdl),并加载该模型文件夹下的动画文件(*.seq)来播放动画。
骨骼动画的播放效果:
- 播放前:
- 播放后:
下边为XEAnimationMeshActor播放动画的方法.
// pAminMeshActor -XEAnimationMeshActor
// 获取根组件
local pComponent = pAnimMeshActor:GetRootComponent();
// 加载动画资源
XEAnimController:LoadAnimation(FileUtils:FilePath("res/Asset/test/test.seq"), pComponent);
// 设置动画循环
pComponent:GetAnimController():SetLoop(false);
// 播放动画
pComponent:GetAnimController():Play();
// 设置动画播放速率
pComponent:GetAnimController():SetPlayRate(1);
注:只有XEAnimationMeshActor可以加载动画资源并播放动画文件。
如上述代码所示,当我们已经拥有了一个有播放动画能力的Actor时,可以调用一个全局静态方法XEAnimController:LoadAnimation为该Actor的动画组件加载动画文件。并通过动画组件提供的GetAnimController()方法获取刚加载动画的动画控制器,你可以想象,此刻你的手中正拿着遥控器,可以播放、暂停、快进这个动画。
在有些时候我们需要在动画播放完以后做一些事情或者连续播放多个动画, 这里我们将用到动画播放监听器, 具体使用方法如下:
// 接上边的代码:
// 创建监听器
local pListener = xe.AnimationPlayListener:Create();
pListener:RegisterHandler(function()
//这里写播放结束回调函数逻辑.
pComponent:GetAnimController():RemoveListener(pListener);
end, xe.Handler.XEANIMATIONPLAY_ONETIMEFINISHED_CALLNACK)
pComponent:GetAnimController():AddListener(pListener);
注意,在3D世界中,我们提供了各种Listener来监听这个世界中发生的任何事情。动画结束监听只是其中一种。