位置: 编程技术 - 正文

Unity 动画(UITweener)、协程(Coroutine)和委托(Delegate)队列管理(unity 动画播放)

编辑:rootadmin

推荐整理分享Unity 动画(UITweener)、协程(Coroutine)和委托(Delegate)队列管理(unity 动画播放),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity 动画器,unity 动画播放,unity 动画融合,unity 动画播放,unity 动画播放,unity 动画过度,unity 动画插件,unity 动画插件,内容如对您有帮助,希望把文章链接给更多的朋友!

问题

前段时间,项目中要做奖励界面UI缓动动画要一个接着一个播放,如:先播放达成星星动画,在播放经验数字增加动画,最后播放奖励物品动画。

当然最笨最直接的方法可以类&#;成语接龙那样,把下个动画的开始播放都写在上一个动画播放完毕委托中。一般直接的方法是实现起来非常之简单,但这里却不是,会看见代码中有一系列播放完毕回调函数(除了最后一个),显然维护起来是否费劲。

把上面的方法进行简化,把回调函数变为一个:维护一个动画的 List 和当前播放动画的索引 index ,然后再回调函数中只需要让 index 递增 播放动画就可以了。这个方法比上面成语接龙方法改进的地方在于只需要维护List中动画的顺序,不用还要做首尾结合的工作了。

上面的问题之所以会觉得有点棘手是因为动画是在一个时间片段上“连续”执行的,这里的“时间片段”不是计算机概念上的 time slot 。在使用协程和延时委托也会遇到同样的问题,本来就是介绍使用队列对动画,协程和委托的管理,只需要关心彼此在队列的次序。

IPlay定义

先定义了一个借口 IPlay 有两个方法:

Begin() ,动画,协程 开始执行方法

Unity 动画(UITweener)、协程(Coroutine)和委托(Delegate)队列管理(unity 动画播放)

OnEnd ,动画,协程 执行完毕的回调函数(委托队列)

这里的 EventDelegate 类型是 NGUI 定义的, 可以查看参考①。 IPay 只是定义了 开始 和 结束 两个状态,其实是在 上一个 OnEnd 中执行了下一个 的 Begin 方法。

C#代码 using System; using System.Collections.Generic; public interface IPlay { List<EventDelegate> OnEnd { get; } void Begin(); }

实现IPlay

在项目中,主要是使 UITweener 实现了 IPlay ,UITweener 本来就支持IPlay的这两个方法,只是封装下就可以了:

C#代码 public abstract class UITweener : MonoBehaviour,IPlay { [HideInInspector] public List<EventDelegate> onFinished = new List<EventDelegate>(); //implement for IPlay infterface public List<EventDelegate> OnEnd { get{ return onFinished; } } public void Begin() { ResetToBeginning(); if(amountPerDelta>0) PlayForward(); else if(amountPerDelta<0) PlayReverse(); } //省略其他代码 }

协程实现IPlay

协程是通过前面介绍的 TaskManager (点击查看)来实现 IPlay的方法的:

C#代码 public class Task :IPlay { public List<EventDelegate> onFinish = new List<EventDelegate>(); public List<EventDelegate> OnEnd { get{ return onFinish; } } public void Begin() { task.Start(); } //省略其他代码 }

PlayList——实现队列管理

PlayList就是维护了 IPlay 的 List ,先往 playList 中添加 IPlay ,然后通过调用 ContactPlay 把 IPlay 安装先后次序连接起来,直接贴出源码:

C#代码 using UnityEngine; using System.Collections; using System.Collections.Generic; public class PlaytList { public List<IPlay> playList = new List<IPlay>(); private int index = 0; public void AddPlay(IPlay play,int index = -1) { if(play == null) return; if(index == -1) playList.Add(play); else if(index < 0 || index > playList.Count) return; else playList.Insert(index,play); } //添加 时间间隔 public void AddTimeInterval(float seconds,int index = -1) { AddPlay(WaitForSeconds(seconds),index); } //添加 协程 public void AddCoroutine(IEnumerator coroutine,int index = -1) { AddPlay(new Task(coroutine,false),index); } private void ContatPlay() { for(int i =0,length = playList.Count-1;i<length;i&#;&#;) { EventDelegate.Add (playList[i].OnEnd,PlayNext); } } public void ClearPlay() { playList.Clear(); } public void Start() { ContatPlay(); index = 0; if(playList.Count>0) playList[0].Begin(); } private void PlayNext() { index &#;&#;; if(index >= playList.Count) return; else playList[index].Begin(); } public Task WaitForSeconds(float seconds) { return new Task(WaitForSecondsHandle(seconds),false); } IEnumerator WaitForSecondsHandle(float seconds) { yield return new WaitForSeconds(seconds); } }

更多unity3d技术,请访问 【狗刨学习网】 声明:此篇文档时来自于【狗刨学习网】社区,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。

Unity3D游戏开发之设置动画(Animations)属性 Unity3D游戏开发之设置动画(Animations)属性通过创建角色动画Avatar,在新的动画系统Mecanim中,Unity就设置了角色动画的骨架和蒙皮信息,从而就可以在Uni

unity3D游戏之昆仑游戏获[愤怒的小鸟]IP开发授权 狗刨学习网报道/昆仑上市之后连续十个交易日的涨停让国内股民喜大普奔,而前天晚上北京举行的昆仑上市答谢会上,周老板一掷千金抽股的土豪抽

unity学习笔记 monoDevelop乱码问题这个问题坑了爹很久...unity自带的monodevelop的项目视图在我电脑(win7)上一直乱码,项目名称,项目结构树,以及文件名称全部显示成

标签: unity 动画播放

本文链接地址:https://www.jiuchutong.com/biancheng/372867.html 转载请保留说明!

上一篇:unity游戏开发之如何通过用户研究帮助手游产品成功?(unity开发的小游戏)

下一篇:Unity3D游戏开发之设置动画(Animations)属性(unity3D游戏开发)

  • 个所税包括什么
  • 交通运输印花税怎么申报
  • 金蝶能够反年结账吗
  • 业务招待费报销要求
  • 建筑劳务公司做账分录
  • 个人代开普票需要交个人所得税吗
  • 其他应收款的对方科目有哪些
  • 机票行程单丢了可以重新打吗
  • 一般纳税企业可以变更小微企业吗
  • 音乐茶座取什么名字好呢
  • 物资采购账务处理方法
  • 收回应收账款的方法
  • 收到捐赠物资会计处理
  • 消费税在流通环节征税吗
  • 资金周转率计算公式期初占用资金
  • 外贸企业人民币结算
  • 转让部分股份流程
  • 自产产品销售增值税
  • 单位自有车辆
  • 企业所得税的减按征收如何计算
  • 企业会计准则财务报表本期金额和上期金额
  • 小微企业发放工资做账
  • 试生产期间的账务处理
  • 建筑业进项税额转出
  • 固定资产报废怎么开票
  • 低值易耗品与固定资产有相同的特征,表现在哪里?
  • wifi上传速度为0的解决方法
  • u盘文件全都变成快捷方式怎么办
  • 取得进账发票没发票
  • win10字体有些模糊
  • 高新技术企业所得税优惠政策最新2022
  • remind32.exe - remind32是什么进程 有什么用
  • 收取个人挂靠的管理费用要交税吗?
  • 过路费进项税抵扣填在纳税申报的哪行
  • 债务重组利得计入投资收益还是营业外收入
  • PHP:imagesetstyle()的用法_GD库图像处理函数
  • 股东已转让股权还可以追究出资吗
  • 哪种审计证据可以查出来
  • 房屋无偿赠与合同协议书范本
  • 正在加工的在产品是什么科目
  • 销售金额环比
  • html常用标签有哪些
  • c语言的空指针
  • 服务费开票税收分类
  • 存货盘盈盘亏处理会计分录
  • 技术服务合同的税率
  • sql server 2008数据库密码忘记
  • 在MysQL数据库中,数据库文件的扩展包括
  • 兼职会计人员的职责
  • 合并抵消分录影响母公司总分类账吗
  • 合并报表时抵消内部交易包含的未实现损益的影响包括
  • 房地产结转收入的条件
  • 一般纳税人支付的哪些增值税进项税额不能抵扣
  • 固定资产一次性扣除账务处理
  • 应收账款周转天数越大说明什么
  • win7 mysql5.7.21安装
  • sql server 操作
  • win10如何利用镜像安装系统
  • macbook如何使用word
  • 装双win7系统怎么设置
  • centos查找目录命令
  • windows media player在播放文件时遇到问题怎么解决
  • 苹果macmimi
  • win7打开游戏显示已停止工作
  • wim10飞行模式
  • linux系统的配置
  • linux tar -czvf
  • 怎么关闭win10系统
  • 升级win10系统卡住不动了
  • Unity Spine Skeleton Animation 2D骨骼动画 For Game 介绍
  • unity游戏之羊刀与Pendragon复盘:DotA做对了什么
  • Node.js中的事件循环是什么意思
  • bat批处理命令大全
  • android studio快捷键补全
  • 浅谈关于混合模式教学的看法
  • js原生dialog
  • python cookie session
  • JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
  • 发票在国家税务总局网站查不到能用吗
  • 江苏国税电子税务局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设