事件
关键事件
Milease 允许你在动画之中插入 Action
,使动画更加灵活。
它的描述方法如下:
[offset] + Action.AsMileaseKeyEvent()
让我们回到先前举的例子,并稍加修改:
- 球从透明逐渐变为白色
- 球变色的同时,音乐音量逐渐从0过渡到1
- 上述操作都完成后,使球移动
- 输出日志”小球开始移动了!“ —— (插入内容)
- 在球移动中途,使其变大
- 上述操作都完成后,依次做这样的动作:相机的
fov
减小、相机旋转
那么我们的代码可以修改为:
MAni.Make(
1f / ballSpriteRender.MQuad(x => x.color, Color.clear, Color.white),
1f / music.MQuad(x => x.volume, 0f, 1f)
).Then(
new Action(() => {
Debug.Log("小球开始移动了!")
}).AsMileaseKeyEvent(),
2f / ballTransform.MQuad(x => x.position, Vector3.zero, Vector3.one * 3f),
1f + 0.5f / ballTransform.MQuad(x => x.localScale, Vector3.one, Vector3.one * 2f)
).ThenOneByOne(
1f / camera.MQuad(x => x.fieldOfView, 6f, 4.5f),
1f / camera.MQuad(x => x.localEulerAngles, Vector3.zero, new Vector3(0, 0, 20f))
).Play();
这样,它便会在球开始移动时,输出一条”小球开始移动了!“。当然,你也可以指定它延后的时间,就像这样:
MAni.Make(
1f / ballSpriteRender.MQuad(x => x.color, Color.clear, Color.white),
1f / music.MQuad(x => x.volume, 0f, 1f)
).Then(
0.5f + new Action(() => {
Debug.Log("小球开始移动了!")
}).AsMileaseKeyEvent(),
2f / ballTransform.MQuad(x => x.position, Vector3.zero, Vector3.one * 3f),
1f + 0.5f / ballTransform.MQuad(x => x.localScale, Vector3.one, Vector3.one * 2f)
).ThenOneByOne(
1f / camera.MQuad(x => x.fieldOfView, 6f, 4.5f),
1f / camera.MQuad(x => x.localEulerAngles, Vector3.zero, new Vector3(0, 0, 20f))
).Play();
信息
如果关键事件延长的时间 超过了 当前这组动画的最晚播放完成时间,这依然是有效的,相应的,正在等待的下一组动画会等待这个关键事件被调用后,才会开始播放。
动画播放完毕事件
此外,也可以在调用 Play
函数时,传入一个委托,它将在动画播放完毕时被调用。
MAni.Make(
...
).Play(() => {
Debug.Log("动画播放完毕!");
});
信息
- 如果这个动画机被设定为循环播放,则这个委托将被调用多次,每轮循环结束时将被调用一次。
- 如果相同的动画机在未播放完毕的情况下,再次调用播放,动画机的进度会归零,同时,会使用新传入的委托覆盖未播放完毕时的委托,这意味着原来传入的委托不会有机会被调用。