幾種Invoke調用方式和unity協程

一,幾種Invoke調用方式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class API07Invoke : MonoBehaviour {

	// Use this for initialization
	void Start () {

        //Invoke("Attack", 2);
        //延時2s調用Attack

        //InvokeRepeating("Attack", 4, 2);
        //延時4s開始調用,每2s調用一次

        //CancelInvoke();
        //不指定參數,取消this腳本里的所有invoke,指定參數取消對應invoke

        //IsInvoking();
        //不指定參數,判斷this腳本里的是否有invoke在等待隊列中,指定參數判斷對應invoke

    }

    void Attack() {
        Debug.Log("Attack!!!");
    }
}

 

二,正常程序運行方式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class API08Coroutine : MonoBehaviour {

    public GameObject cube;

    // Use this for initialization
    void Start() {
        Debug.Log("123");
        ChangeColor();
        Debug.Log("321");
    }

    void ChangeColor() {
        Debug.Log("456");
        GameObject cube2 = GameObject.Instantiate(cube);//可忽略,下同
        cube2.name = "cubu2";
        cube2.transform.position += new Vector3(2, 0, 0);
        cube2.GetComponent<MeshRenderer>().material.color = Color.magenta;
        cube.GetComponent<MeshRenderer>().material.color = Color.gray;
        Debug.Log("654");
    }
}

 

三,協程運行方式:

協程,在主程序之外創建的程序,在協程開啓後協程與主程同時運行,不存在先後關係

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class API08Coroutine : MonoBehaviour {

    public GameObject cube;

    // Use this for initialization
    void Start() {
        Debug.Log("123");
        StartCoroutine(ChangeColor());
        //協程方法開啓後繼續執行下面的代碼Debug.Log("321"),不會停下來等待
        Debug.Log("321");
    }

    //協程方法定義
    //1.返回值 IEnumerator
    //2.返回參數是使用yield return 
    //3.協程方法的調用StartCoroutine(method())

    IEnumerator ChangeColor() {
        Debug.Log("456");
        GameObject cube2 = GameObject.Instantiate(cube);
        cube2.name = "cubu2";
        cube2.transform.position += new Vector3(2, 0, 0);
        cube2.GetComponent<MeshRenderer>().material.color = Color.magenta;
        cube.GetComponent<MeshRenderer>().material.color = Color.gray;
        Debug.Log("654");
        yield return null;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章