Unity3D UI Text得分數字增加的實例代碼
Unity3D UGUI Text得分數字增加 代碼
一、首先在Hierarchy中創建Text,並綁定腳本。
using UnityEngine; using System.Collections; using UnityEngine.UI; **//導入資源庫** public class Score : MonoBehaviour { public static Text txt; **//定義靜態變量名以用於其他腳本內的引用** public static float x = 0; void Start () { txt = GameObject.Find ("Text").GetComponent<Text> (); } }
二、在確定變量名指定的組建後,對得分時情況進行判斷。
這裡進入判斷綁定剛體是否碰撞的腳本。
using UnityEngine; using System.Collections; public class collision2 : MonoBehaviour { public GameObject bullet; void OnCollisionEnter(Collision col) **//當剛體碰撞開始時** { if (col.gameObject.name.Equals ("Bullet(Clone)")) { Instantiate (bullet,col.transform.position,Quaternion.identity); Destroy(col.gameObject); Score.x += 1; **//剛體碰撞結束後得分加1** Score.txt.text = "Score : " + Score.x; //在text文本中顯示Score : x } }
總結:
這裡的代碼示例是以制定剛體碰撞的開始時,進行得分判斷。當Bullet(Clone)與腳本綁定的剛體碰撞,便得分數 X+1 ,並在Score腳本中的txt中加上轉換成文本類型後的X。
補充:Unity3D 數字逐漸增加,一個數字動態變化到另一個數字(使用協程)
首先實現上述功能,需要使用“協程”這個功能。
協程
協程:控制代碼等到特定的時機後再執行後續步驟.
先看Unity3D的函數執行順序圖
官網鏈接:https://docs.unity3d.com/Manual/ExecutionOrder.html
以上協程函數定義:(yield 開頭的便是)
yield null:協程將在下一幀所有腳本的Update執行之後,再繼續執行.
yield WaitForSeconds:協程在延遲指定時間,且當前幀所有腳本的 Update全都執行結束後才繼續執行.
yield WaitForFixedUpdate:協程在所有腳本的FixedUpdate執行之後,再繼續執行.
yield WWW:協程在WWW下載資源完成後,再繼續執行.
yield StartCoroutine:協程在指定協程執行結束後,再繼續執行.
WaitForSecondsRealtime:與WaitForSeconds類似,但不受時間縮放影響.
WaitWhile:當返回條件為假時才執行後續步驟.
使用方法:
void Start () { StartCoroutine(A()); } IEnumerator A() //加粗的必須要寫,函數名自己定義 { //yield return new WaitForSeconds(0.1f); //這裡可以用上述的函數 StopCoroutine(A()); }
PS:註意如果需要停停止其中某個協程,可使用StopCoroutine。但在使用時,你需要註意一點,停止協程的方式要與開啟協程的方式一致。StopCoroutine(“A”)必須與StartCoroutine(“A”)成對使用,與StartCoroutine(A())一起使用則完全無效。
逐漸增加的實現
首先需要在unity世界裡增加一個text,然後text加如下腳本
代碼如下:
int max; //最終值 int min; //初始值 int result = 0; public int change_speed = 5; //加的次數 // Use this for initialization void Start () { StartCoroutine(Change()); } IEnumerator Change() { int delta = (max - min) / change_speed; //delta為速度,每次加的數大小 result = min; for(int i = 0;i<change_speed;i++) { result += delta; this.GetComponent<Text>().text = result.ToString(); yield return new WaitForSeconds(0.1f); //每 0.1s 加一次 } this.GetComponent<Text>().text = max.ToString(); StopCoroutine(Change()); }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- None Found