Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法
傷害數(shù)字顯示HUD
游戲中收到傷害掉血,會(huì)有飄動(dòng)的傷害數(shù)值;
可以使用OnGUI中GUI.Label來(lái)實(shí)現(xiàn);
可自定義字體,顏色,大小等;
如果需要更好看的數(shù)字特效,可以手動(dòng)添加;
普通字體不夠好看可以使用插件FontEditor自定義;
Demo展示

HUDPopup類
飄血數(shù)字類,創(chuàng)建一個(gè)空物體,將這個(gè)腳本掛上去,再將這個(gè)物體拖成預(yù)制體;
public class HUDPopup : MonoBehaviour
{
//目標(biāo)位置
private Vector3 mTarget;
//屏幕坐標(biāo)
private Vector3 mScreen;
//傷害數(shù)值
public int Value;
//文本寬度
public float ContentWidth;
//文本高度
public float ContentHeight;
//GUI坐標(biāo)
private Vector2 mPoint;
//銷毀時(shí)間
public float FreeTime = 1.5F;
public Font font;
public Color color;
public int fontSize;
public float speed;
void Start ()
{
//獲取目標(biāo)位置
mTarget = transform.position;
//獲取屏幕坐標(biāo)
mScreen = Camera.main.WorldToScreenPoint(mTarget);
//將屏幕坐標(biāo)轉(zhuǎn)化為GUI坐標(biāo)
mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);
//開(kāi)啟自動(dòng)銷毀線程
StartCoroutine("Free");
}
void Update()
{
//使文本在垂直方向山產(chǎn)生一個(gè)偏移
transform.Translate(Vector3.up * speed * Time.deltaTime);
//重新計(jì)算坐標(biāo)
mTarget = transform.position;
//獲取屏幕坐標(biāo)
mScreen = Camera.main.WorldToScreenPoint(mTarget);
//將屏幕坐標(biāo)轉(zhuǎn)化為GUI坐標(biāo)
mPoint = new Vector2(mScreen.x, Screen.height - mScreen.y);
}
void OnGUI()
{
//保證目標(biāo)在攝像機(jī)前方
if(mScreen.z>0)
{
//內(nèi)部使用GUI坐標(biāo)進(jìn)行繪制
GUIStyle style = new GUIStyle();
style.fontSize = fontSize;
style.font = font;
style.normal.textColor = color;
GUI.Label(new Rect(mPoint.x, mPoint.y, ContentWidth, ContentHeight), "-"+Value.ToString(),style);
}
}
IEnumerator Free()
{
yield return new WaitForSeconds(FreeTime);
Destroy(this.gameObject);
}
}
一些自定義屬性,默認(rèn)Color的透明度是0,如果出現(xiàn)不顯示,可以看看這里;

使用時(shí),在需要有掉血數(shù)字的物體上的腳本中實(shí)例化HUDPopup,創(chuàng)一個(gè)HUD預(yù)制體對(duì)象,放在該物體的子節(jié)點(diǎn)下某個(gè)位置(一般在怪物頭頂創(chuàng)建一個(gè)空節(jié)點(diǎn),用來(lái)當(dāng)HUD的父物體);

測(cè)試類代碼:
public class Test : MonoBehaviour
{
public GameObject popupDamage;
public Transform hudPos;
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
GameObject mObject = (GameObject)Instantiate(popupDamage, hudPos.position, Quaternion.identity);
mObject.GetComponent<HUDPopup>().Value = Random.Range(20, 40);
}
}
}
到此這篇關(guān)于Unity實(shí)現(xiàn)游戲傷害數(shù)字顯示HUD的方法的文章就介紹到這了,更多相關(guān)Unity 傷害數(shù)字顯示HUD內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Parallel.For循環(huán)與普通for循環(huán)的性能比較
這篇文章介紹了Parallel.For循環(huán)與普通for循環(huán)的性能比較,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
C#使用Socket實(shí)現(xiàn)本地多人聊天室
這篇文章主要為大家詳細(xì)介紹了C#使用Socket實(shí)現(xiàn)本地多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
C#實(shí)現(xiàn)DataList里面嵌套DataList的折疊菜單
這篇文章主要介紹了C#實(shí)現(xiàn)DataList里面嵌套DataList的折疊菜單,以實(shí)例形式詳細(xì)分析了DataList嵌套實(shí)現(xiàn)折疊菜單所涉及的JavaScript、HTML與C#相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
10個(gè)C#程序員經(jīng)常用到的實(shí)用代碼片段
如果你是一個(gè)C#程序員,那么本文介紹的10個(gè)C#常用代碼片段一定會(huì)給你帶來(lái)幫助,從底層的資源操作,到上層的UI應(yīng)用,這些代碼也許能給你的開(kāi)發(fā)節(jié)省不少時(shí)間。以下是原文:2015-09-09
DataGridView帶圖標(biāo)的單元格實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了DataGridView帶圖標(biāo)的單元格的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

