当前位置: 首页 > news >正文

服务网站云龙主机 wordpress

服务网站,云龙主机 wordpress,doooor国外设计网站,做钓鱼网站盗游戏号会被判刑吗用一个异步方法来播放一个动画#xff0c;正常情况是#xff1a;动画播放结束时#xff0c;异步方法宣告结束。那如果我提前取消这个异步任务#xff0c;那在这个异步方法里面#xff0c;我要怎么停止播放呢#xff1f;#xff01; 一、播放animation动画的异步实现 1…用一个异步方法来播放一个动画正常情况是动画播放结束时异步方法宣告结束。那如果我提前取消这个异步任务那在这个异步方法里面我要怎么停止播放呢 一、播放animation动画的异步实现 1、用play播放动画片段2、await一段时间等动画播放结束3、用stop停止动画播放 二、两种实现方式 1 、纯多任务模式的实现 实现原理 定义了两个结束的事件或者Task 1第一个是播放时长到点了 2第二个是用户取消了异步任务 3用whenAny等待 /// summary/// 等待一个动画播放完毕/// 中间如果任务被取消则停止播放动画/// /summary/// param nameAnim/param/// param namestartTime/param/// param nameendTime/param/// param namespeed/param/// param namectk任务取消标志/param/// returns/returnspublic static async UniTaskbool PlayAnim(Animation Anim, float startTime, float endTime, float speed, CancellationToken ctk){Debug.Log($当前Time.timeScale {Time.timeScale});float t (endTime - startTime) * Time.timeScale; //考虑到动画时间倍率Debug.Log($动画的时长为{t}秒);Anim[Anim.clip.name].time startTime;//跳过第几帧Anim[Anim.clip.name].speed speed;Anim.Play(Anim.clip.name); //Play()//如果时间到点结束并停止动画FuncUniTask timeFn async () { await UniTask.Delay(TimeSpan.FromSeconds(t), cancellationToken: ctk);Anim.Stop();};//用户取消任务结束并停止动画FuncUniTask cancelFn async () {Debug.Log(开始执行cancelFn的循环);while (true){Debug.Log($ctk.IsCancellationRequested {ctk.IsCancellationRequested});if (ctk.IsCancellationRequested){Debug.Log($任务取消:{ctk.IsCancellationRequested});Anim.Stop();break;};await UniTask.Yield(); //注意这里不能随意加ctk不然不能停直接跳出了//await UniTask.Yield(ctk); }Debug.Log(结束cancelFn的循环);};//等待结束var idx await UniTask.WhenAny(timeFn(), cancelFn()).AttachExternalCancellation(ctk);Debug.Log($任务结束结束方式为{idx} 备注0 动画播放结束1 用户取消任务);return true;}2 、手工启动一个循环每帧检查结束条件 /// summary/// 等待一个动画播放完毕/// 中间如果任务被取消则停止播放动画/// 改进了结束的判断方式/// /summary/// param nameAnim/param/// param namestartTime/param/// param nameendTime/param/// param namespeed/param/// param namectk任务取消标志/param/// returns/returnspublic static async UniTaskbool PlayAnim2(Animation Anim, float startTime, float endTime, float speed, CancellationToken ctk){Debug.Log($当前Time.timeScale {Time.timeScale});float t (endTime - startTime) * Time.timeScale; //考虑到动画时间倍率float elapse 0f;Debug.Log($动画的时长为{t}秒);Anim[Anim.clip.name].time startTime;//跳过第几帧Anim[Anim.clip.name].speed speed;Anim.Play(Anim.clip.name); //Play()//每帧进行结束判断while (true){elapse Time.deltaTime; //任务被取消Debug.Log($ctk.IsCancellationRequested {ctk.IsCancellationRequested});if (ctk.IsCancellationRequested){Debug.Log($任务取消:{ctk.IsCancellationRequested});//Anim.Stop();break;};//动画播放完毕if (elapse t){break;}await UniTask.Yield(); //注意这里不能随意加ctk不然不能停直接return了//await UniTask.Yield(ctk); }Anim.Stop();return true;}三、测试流程 1、启动一个“线程异步任务”——播放动画2、等待2秒后停止任务3、停止【播放动画】的“线程” //获取animation组件 if (anim null) anim this.GetComponentAnimation(); var cti TaskSignal.CreatCts();//启动一个“线程”——播放动画 PlayAnim2(anim, 0f, 5f, 1, cti.cts.Token).Forget();//等待2秒后停止任务 await UniTask.Delay(1500);Debug.Log(停止任务......); //停止【播放动画】的“线程” TaskSignal.CancelTask(cti.id);四、效果 1、等待全部播放完毕 2、播放2秒后取消任务同时停止播放 五、附录测试用的代码 为了样例完整性我把三个脚本并在一个脚本里请忽略杂乱的代码组织 using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; using UnityEngine; using System; using System.Linq;public class TestPlayAnimation : MonoBehaviour {public Animation anim;private async UniTask TestPlay(){//获取animation组件if(anim null) anim this.GetComponentAnimation();var cti TaskSignal.CreatCts();//启动一个“线程”——播放动画PlayAnim(anim, 0f, 5f, 1,cti.cts.Token).Forget();//等待2秒后停止任务await UniTask.Delay(1500);Debug.Log(停止任务......);//停止【播放动画】的“线程”TaskSignal.CancelTask(cti.id);}private async UniTask TestPlay2(){//获取animation组件if (anim null) anim this.GetComponentAnimation();var cti TaskSignal.CreatCts();//启动一个“线程”——播放动画PlayAnim2(anim, 0f, 5f, 1, cti.cts.Token).Forget();//等待2秒后停止任务await UniTask.Delay(1500);Debug.Log(停止任务......);//停止【播放动画】的“线程”TaskSignal.CancelTask(cti.id);}#if UNITY_EDITOR[ContextMenu(播放整个动画)] #endifvoid test1(){PlayAnim2(anim, 0f, 5f, 1,this.GetCancellationTokenOnDestroy()).Forget();}#if UNITY_EDITOR[ContextMenu(停止测试)] #endifvoid test2(){TestPlay().Forget();}#if UNITY_EDITOR[ContextMenu(停止测试2)] #endifvoid test3(){TestPlay2().Forget();}#region 用到的异步方法 /// summary/// 等待一个动画播放完毕/// 中间如果任务被取消则停止播放动画/// /summary/// param nameAnim/param/// param namestartTime/param/// param nameendTime/param/// param namespeed/param/// param namectk任务取消标志/param/// returns/returnspublic static async UniTaskbool PlayAnim(Animation Anim, float startTime, float endTime, float speed, CancellationToken ctk){Debug.Log($当前Time.timeScale {Time.timeScale});float t (endTime - startTime) * Time.timeScale; //考虑到动画时间倍率Debug.Log($动画的时长为{t}秒);Anim[Anim.clip.name].time startTime;//跳过第几帧Anim[Anim.clip.name].speed speed;Anim.Play(Anim.clip.name); //Play()//如果时间到点结束并停止动画FuncUniTask timeFn async () {await UniTask.Delay(TimeSpan.FromSeconds(t), cancellationToken: ctk);Anim.Stop();};//用户取消任务结束并停止动画FuncUniTask cancelFn async () {Debug.Log(开始执行cancelFn的循环);while (true){//Debug.Log($ctk.IsCancellationRequested {ctk.IsCancellationRequested});if (ctk.IsCancellationRequested){Debug.Log($任务取消:{ctk.IsCancellationRequested});Anim.Stop();break;};await UniTask.Yield(); //注意这里不能随意加ctk不然不能停直接跳出了//await UniTask.Yield(ctk); }Debug.Log(结束cancelFn的循环);};//等待结束var idx await UniTask.WhenAny(timeFn(), cancelFn()).AttachExternalCancellation(ctk);Debug.Log($任务结束结束方式为{idx} 备注0 动画播放结束1 用户取消任务);return true;}/// summary/// 等待一个动画播放完毕/// 中间如果任务被取消则停止播放动画/// 改进了结束的判断方式/// /summary/// param nameAnim/param/// param namestartTime/param/// param nameendTime/param/// param namespeed/param/// param namectk任务取消标志/param/// returns/returnspublic static async UniTaskbool PlayAnim2(Animation Anim, float startTime, float endTime, float speed, CancellationToken ctk){Debug.Log($当前Time.timeScale {Time.timeScale});float t (endTime - startTime) * Time.timeScale; //考虑到动画时间倍率float elapse 0f;Debug.Log($动画的时长为{t}秒);Anim[Anim.clip.name].time startTime;//跳过第几帧Anim[Anim.clip.name].speed speed;Anim.Play(Anim.clip.name); //Play()//每帧进行结束判断while (true){elapse Time.deltaTime;//任务被取消//Debug.Log($ctk.IsCancellationRequested {ctk.IsCancellationRequested});if (ctk.IsCancellationRequested){Debug.Log($任务取消:{ctk.IsCancellationRequested});break;};//动画播放完毕if (elapse t){break;}await UniTask.Yield(); //注意这里不能随意加ctk不然不能停直接return了//await UniTask.Yield(ctk); }Anim.Stop();return true;}#endregion#region 异步任务管理脚本/// summary/// 任务管理/// /summarypublic static class TaskSignal{/// 任务信息/// summary/// /summary[Serializable]public class CtsInfo{/// summary/// 任务id/// /summary[SerializeField] public int id;/// summary/// cst实例/// /summary[SerializeField] public CancellationTokenSource cts;}/// summary/// 任务池子/// /summarypublic static ListCtsInfo ctsInfos new ListCtsInfo();/// summary/// 任务编号【自增】/// /summaryprivate static int id 0;/// summary/// 创建一个任务/// /summary/// returns/returnspublic static CtsInfo CreatCts(){var cts new CancellationTokenSource();var ci new CtsInfo { cts cts, id id };id;ctsInfos.Add(ci);return ci;}/// summary/// 取消所有的任务/// /summarypublic static void CancelAllTask(){Debug.Log($开始执行取消所有的任务CancelAllTask);ctsInfos.ForEach(ci {Debug.Log($CancelAllTask() : cts总数量为{ctsInfos.Count});try{Debug.Log($ci.id {ci.id},取消前 ci.cts {ci.cts.IsCancellationRequested});if (ci.cts.IsCancellationRequested false){Debug.Log(开始执行ci.cts.Cancel());ci.cts.Cancel();Debug.Log(执行完毕ci.cts.Cancel());}else{//Debug.Log(ci.cts已经取消了);}Debug.Log($ci.id {ci.id},取消后 ci.cts {ci.cts.IsCancellationRequested});}catch (Exception e){Debug.Log($TaskSingol.CancelAllTask()取消任务时报错{e.Message});}});Debug.Log($结束执行取消所有的任务CancelAllTask);}/// summary/// 取消所有的任务/// /summarypublic static void CancelAllTask10(){ctsInfos.ForEach(ci {if (ci.cts.Token.IsCancellationRequested false) // if (ci.cts.IsCancellationRequested false){ci.cts.Cancel();Debug.Log($取消了任务index {ci.id});}else{//Debug.Log(ci.cts已经取消了);}});}/// summary/// 取消指定的任务/// /summarypublic static void CancelTask(int id){ctsInfos.Where(ci ci.id id).ToList().ForEach(ci ci.cts.Cancel());}}#endregion }
http://www.pierceye.com/news/950425/

相关文章:

  • wordpress的vps建站流程ui是什么意思
  • 广州专业的网站建设公司哪家好wordpress博客优秀
  • 没有服务器建网站免费开发软件制作平台
  • 高端品牌网站建设明细报价报青岛市公共资源交易网
  • 余姚 网站建设济南网站开发薪酬
  • 一流高职院校建设工作网站野花香社区在线观看播放
  • 大连建设科技网站绿色主题 wordpress
  • 外网访问不了内网建设的网站做网站电销
  • 桂平市住房和城乡建设局网站杭州app定制公司
  • 免费做金融网站自己做网站想更换网址
  • 浙江省网站建设公司成都五月花网页设计培训
  • 江苏外贸网站建设网站开发工作流审批流
  • 自媒体论坛交流推荐网站外部优化
  • 南宁网络建站直接用源码做网站盗版吗
  • 哪些网站可以做驾考试题旅游网站排名排行榜
  • 网站宣传专利被罚账户竞价托管费用
  • 芙蓉区网站建设qq建设网站首页
  • 做音乐网站怎么放音乐常州网红打卡景点
  • 网站做的题不小心关闭了如何成为室内设计师
  • 营销型网站建设公司地址外贸网站seo优化
  • 建设网站是什么科目wordpress对接易支付宝
  • wordpress英文意思能做SEO优化的网站建设
  • 海沧建设网站多少一站式服务英文
  • wordpress网站需要多大空间建设营销型网站
  • id97网站怎么做的项目营销策划方案
  • 站群网站怎么做缓存
  • 网站(网店)建设方案范文北京网站搭建服务
  • 建设银行网站怎么设置转账额度百度竞价培训班
  • 八大员继续教育入口做优化网站注意什么
  • 网络空间服务商宁波seo网络推广推荐公众号