您的位置:首页 > 移动开发 > Unity3D

Unity定时器

2016-02-27 21:51 288 查看


需求是在项目中,会遇到很多倒计时功能,比如在线时间奖励,pve活动间隔5分钟


总结常见解决方法有三种


1.Update()每帧检查,适合用于界面上显示具体的数值,这是了准确性。在用户体验倒计时是最好的选择。


2.this.Invoke( string methodName,float time);


Invoke()的作用是:在应用程序的主线程上执行指定的委托。一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke();


public bool Invoke(string methodName);


void Invoke(string methodName);


void InvokeRepeating(string methodName, float time, float repeatRate); 第二个参数是延迟多少秒执行,第三个参数是要执行间隔秒数。


this.CanacelInvoke();还有this.CancelInvoke(string methodName);取消方法


3.IEnumerator () 利用协程中返回需要等待的时间。


WaitForSeconds(float time);

协程的启用方法,StartCoroutine(string name); stopCoroutine(strinf name);

1.在线时间奖励和pve活动时间的间隔是用第2种方法。因为在UILabel上会显示数值到计时

2.聊天的时间间隔是使用第一种方法的。原因我接手之前就是这样写的,从时间间隔上,update是比较准确的。

3.在系统的弹幕的定时发送使用了第三种方法,原因是玩家不需要看到倒计时的显示。比如每三分发一次。只要能在大概时间上执行一次。在实现系统弹幕功能的是,系统指令删除的时候,忘了停用携程。


共同点是这三个方法都是继承MonoBehaviour。

协程的作用一共有两点:1)延时(等待)一段时间执行代码;2)等某个操作完成之后再执行后面的代码。总结起来就是一句话:控制代码在特定的时机执行。

协程不是线程,也不是异步执行的。协程和 MonoBehaviour 的 Update函数一样也是在MainThread中执行的。使用协程你不用考虑同步和锁的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: