Unity - 延时操作方案

来源:互联网 发布:java爬动态网页 编辑:程序博客网 时间:2024/05/29 20:03
背景:做游戏的很多时候我们需要延时操作:倒计时是一个最简单也是最基本的问题
目标:用 Invoke  和 StartCoroutine 延时做倒计时。

因为此文是实现功能文,具体理论不在此解释。如果需要了解协程和线程调用的具体请转:

unity3d–MonoBehaviour类Invoke,Coroutine :http://www.himigame.com/wp-admin/post-new.php
Unity3D协程介绍 以及 使用 : http://blog.csdn.net/huang9012/article/details/38492937
Unity3D游戏开发中的 yield协程与消息传递 :http://blog.csdn.net/huang9012/article/details/38492937

方案一:Invoke

Invoke(methodName: string, time: float): void;methodName:方法名time:多少秒后执行InvokeRepeating(methodName: string, time: float, repeatRate: float): void;methodName:方法名time:多少秒后执行repeatRate:重复执行间隔
还有两个重要的方法:
IsInvoking:用来判断某方法是否被延时,即将执行CancelInvoke:取消该脚本上的所有延时方法
实现倒计时:
void Start ()//注:并不是项目源码,只是展示效果代码{int count = 3;for (int i = 0; i < count; i++) {Invoke ("CountDown", 1.0f);}}public void CountDown(){print ("wait");}

方案二:StartCoroutine

public Coroutine StartCoroutine(IEnumerator routine);public Coroutine StartCoroutine(string methodName, object value = null);

上面两种方法的调用实例:

using UnityEngine;using System.Collections;public class ExampleClass : MonoBehaviour {    void Start() {        print("Starting " + Time.time);        StartCoroutine(WaitAndPrint(2.0F));        print("Before WaitAndPrint Finishes " + Time.time);    }    IEnumerator WaitAndPrint(float waitTime) {        yield return new WaitForSeconds(waitTime);        print("WaitAndPrint " + Time.time);    }}

using UnityEngine;using System.Collections;public class ExampleClass : MonoBehaviour {    IEnumerator Start() {        StartCoroutine("DoSomething", 2.0F);        yield return new WaitForSeconds(1);        StopCoroutine("DoSomething");    }    IEnumerator DoSomething(float someParameter) {        while (true) {            print("DoSomething Loop");            yield return null;        }    }}

两种方法都比较好理解,如果想要继续学习请看文首链接或自行查询。下面贴出倒计时代码。

void Start(){        for (int i = 0; i < 3; i++) {            StartCoroutine (CountDown());        }    }    IEnumerator CountDown(){        yield return new WaitForSeconds (1.0f);        print ("wait");    }



0 0
原创粉丝点击