动画组件
像其他组件一样为结点添加动画组件:
动画组件管理了一组动画剪辑。
动画组件开始运作前,它为每一个动画剪辑都创建了相应的 动画状态 对象。 动画状态控制某个动画剪辑在结点的播放过程,一个动画剪辑可以同时为多个动画状态所用。
在动画组件中,动画状态是通过名称来标识的。 每个动画状态的默认名称就是其动画剪辑的名称。
使得动画组件开始播放指定的动画:
在播放时,旧的动画将立即被停止,这种切换是非常突兀的。 在某些情况下,我们希望这种切换是“淡入淡出”的, 此时应当使用 crossFade()
方法。 crossFade()
会在指定的周期内平滑地完成切换:
即便如此,动画组件仍提供了 pause()
、resume()
、stop()
方法, 它们暂停、继续以及停止正在播放的所有动画状态的同时, 也暂停、继续以及停止动画的切换。
有时候你可能需要对动画状态进行其他操作,例如,设置其速度。
可以通过 getState()
获取动画状态:
const animationComponent = node.getComponent(Animation);
animationComponent.clips = [ idleClip, runClip ];
你可以设置动画播放的速度:
动画状态也提供了 play()
、pause()
、resume()
、stop()
这些播放控制功能。
当动画组件本身的播放控制功能不能满足你的要求时, 你也可以按照自己的方式操纵动画状态的播放。
你可以为动画的每一时间点添加事件。
AnimationClip
的 events
包含了此动画所有的事件描述,每个事件描述都具有以下属性:
{
func: string;
params: any[];
其中 frame
表示事件触发的时间点,单位为秒, 例如 0.618
就表示当动画到达第 0.618 秒时将触发事件。
func
表示事件触发时回调的方法名称,事件触发时, 会在当前结点的所有组件上搜索名为 func
的方法,一旦找到,将 params
传递给它并调用。
以下代码演示了这一过程。
以上代码表示,MyScript
组件所在结点的动画组件的默认动画剪辑 在进行到第 0.5 秒将调用 MyScript
组件的 test()
方法并传递参数 。