一、要播放的动画(直播中间一截)
如图:总的动画为长度为2分钟零8秒
二、Button和对应事件
三、事件的代码
在Start()里面绑定
private void Awake()
{
myAnim = animGo.GetComponent<Animation>();
BtnPlayLoop.onClick.AddListener(async () =>
{
var skipFirstFrameTime = 1 / myAnim[myAnim.clip.name].clip.frameRate;
stopLoop = false;
while (!stopLoop)
{
myAnim[myAnim.clip.name].time = skipFirstFrameTime;
myAnim.Play(myAnim.clip.name);
await UniTask.DelayFrame(1);
await UniTask.WaitUntil(() => myAnim.isPlaying == false);
}
});
BtnStopLoop.onClick.AddListener(async() =>
{
stopLoop = true;
myAnim[myAnim.clip.name].time = myAnim[myAnim.clip.name].length;
await UniTask.DelayFrame(1);
myAnim.Stop();
});
}
四、总结
本文所涉及动画播放控制的异步用UniTask包(GitHub地址自行谷歌)实现。用异步实现,逻辑清晰,好控制,不容易被自己绕晕。 【1】凡是涉及渲染处理的那部分,都丢到Update里面 【2】凡是涉及时序控制的,都用丢到一个异步方法里面
|