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()); }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。