Unity - 延时操作方案

背景:做游戏的很多时候我们需要延时操作:倒计时是一个最简单也是最基本的问题
目标:用 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");
    }



你可能感兴趣的:(C#)