Unity API 學習筆記——03

四、協程

1、Coroutines執行
在這裏插入圖片描述
Coroutines
(1)返回值是IEnumerator
(2)返回參數的時候使用yield return null/0;
(3)協程方法的調用StartCoroutine(method())

測試代碼:

public GameObject cube;
	void Start () {
        print("hha");
        StartCoroutine(ChangeColor());//協程方法開啓後,會繼續運行下面的代碼,不會等協程方法運行結束才繼續執行
        print("hahaha");
	}
IEnumerator ChangeColor()
    {
        print("hahaColor");
		 yield return new WaitForSeconds(3);//等待三秒再繼續執行
        cube.GetComponent<MeshRenderer>().material.color = Color.blue;
        print("hahaColor");
        yield return null;
}

2、Coroutines實現顏色動畫漸變
測試代碼:


void Update() {
     if (Input.GetKeyDown(KeyCode.Space))
        {
		   StartCoroutine("Fade");
        }
     }
IEnumerator Fade()
    {
        for (; ; )
        {
            Color color = cube.GetComponent<MeshRenderer>().material.color;
            Color newColor = Color.Lerp(color, Color.red, 0.02f);
            cube.GetComponent<MeshRenderer>().material.color = newColor;
            yield return new WaitForSeconds(0.02f);
            if (Mathf.Abs(Color.red.g - newColor.g) <= 0.01f)
            {  break;   }
        }
}

3、Coroutines協程的開啓和關閉
(1)StartCouroutine:開啓協程
(2)StopCouroutine:關閉協程
(3)StopAllCouroutine:關閉所有協程

測試代碼:

private IEnumerator ie;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //ie = Fade();
            //StartCoroutine(ie);
            StartCoroutine("Fade");
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            //StopCoroutine(ie);
            StopCoroutine("Fade");
        }
}

五、鼠標相關事件函數OnMouseXXX

(1)OnMouseDown:鼠標按下時調用。
(2)OnMouseDrag:按下鼠標並且仍然按住鼠標不放。
(3)OnMouseEnter:鼠標移入時。
(4)OnMouseExit:鼠標移出時。
(5)OnMouseOver:鼠標在上面時。
(6)OnMouseUp:釋放鼠標按鈕時。
(7)OnMouseUpAsButton:鼠標被釋放到與它被按下相同時。

六、Mathf

1、Mathf的靜態變量
(1)Deg2Rad:角度-弧度轉換常數(只讀)。
(2)Rad2Deg:弧度-角度轉換常數(只讀)。
(3)Infinity:正無窮(只讀)的表示。
(4)NegativeInfinity:負無窮(只讀)的表示。
(5)PI: π 3.14159265358979…值(只讀)。
(6)Epsilon:一個很小的浮點值(只讀)。
2、Mathf的靜態方法
(1)Abs:絕對值。
(2)Ceil:向上取整。(返回大於或等於f的最小整數)返回float類型
(3)CeilToInt:向上取整。Int類型
(4)Clamp:把一個值限定在一個範圍之內。(在最小浮點數和最大浮點數之間夾住一個值。)

測試代碼:(血量)

private int hp = 100;
    void TakeDamage()
    {
        hp -= 10;
        hp = Mathf.Clamp(hp,0, 100);
    }

(5)Clamp01:將值夾在0和1之間並返回值。
(6)ClosestPowerOfTwo:返回兩個值的最近冪。
(7)DeltaAngle:計算以度爲單位的兩個給定角度之間的最短差值。
(8)Exp:返回e的指定次方。
(9)Floor:向上取整。(返回小於或等於f的最大整數)返回float類型
(10)FloorToInt:向上取整。返回int類型
(11)Pow(f,p):返回f的p次方。
(12)Sqrt:返回參數的平方根。
(13)Max:最大值。
(14)Min:最小值。
(15)MoveTowards:將一個值移動到目標,移動控制。
(16)Lerp:用t在a和b之間做線性插值。
(17)LerpAngle:與Lerp相同,但是確保當它們環繞360度時內插正確。

測試代碼:(差值移動)

public class API10Mathf : MonoBehaviour {
public Transform cube;
public float speed = 3;
      void Start()
    {
        cube.position = new Vector3(0, 0, 0);
	 }
    void Update()
    {
       float x = cube.position.x;
       //float newX = Mathf.Lerp(x, 10, Time.deltaTime*speed);//減速運動
       float newX = Mathf.MoveTowards(x, 10, Time.deltaTime*speed);//勻速運動
       cube.position = new Vector3(newX, 0, 0);
}

(18)PingPong(float t, float length):ping ping值t,這樣它就不會大於長度,也不會小於0。

測試代碼:(往返運動,勻速)

cube.position = new Vector3(5+Mathf.PingPong(Time.time*speed, 5), 0, 0);

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