功能实现:Unity中一个动画,只播放中间指定的一截,而且循环播放

您所在的位置:网站首页 3dmax怎么散布在特定面 功能实现:Unity中一个动画,只播放中间指定的一截,而且循环播放

功能实现:Unity中一个动画,只播放中间指定的一截,而且循环播放

2023-03-06 06:48| 来源: 网络整理| 查看: 265

一、要播放的动画(直播中间一截)

如图:总的动画为长度为2分钟零8秒 在这里插入图片描述

二、Button和对应事件

在这里插入图片描述

三、事件的代码

在Start()里面绑定

private void Awake() { myAnim = animGo.GetComponent(); //【循环播放自定义段落】事件侦听 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); //Play() await UniTask.DelayFrame(1); //帧延缓,等Play()启动 //方式一:播放到中间指定的进度点则停止 //await UniTask.WaitUntil(()=>myAnim[myAnim.clip.name].time > endTime); //播放进度到达某点的时候 //myAnim.Stop(); //停止播放 //方式二:播放到末尾(动画属性设置成once) await UniTask.WaitUntil(() => myAnim.isPlaying == false); //等待播放结束【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】凡是涉及时序控制的,都用丢到一个异步方法里面



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3