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