Unity3D游戲開發(fā)之傷害數(shù)值顯示

using UnityEngine;

using System.Collections;

public class DamagePopup : MonoBehaviour {

//目標位置

private Vector3 mTarget;

//屏幕坐標

private Vector3 mScreen;

//傷害數(shù)值

public int Value;

//文本寬度

public float ContentWidth=100;

//文本高度

public float ContentHeight=50;

//GUI坐標

private Vector2 mPoint;

//銷毀時間

public float FreeTime=1.5F;

void Start ()

{

//獲取目標位置

mTarget=transform.position;

//獲取屏幕坐標

mScreen= Camera.main.WorldToScreenPoint(mTarget);

//將屏幕坐標轉化為GUI坐標

mPoint=new Vector2(mScreen.x,Screen.height-mScreen.y);

//開啟自動銷毀線程

StartCoroutine("Free");

}

void Update()

{

//使文本在垂直方向山產(chǎn)生一個偏移

transform.Translate(Vector3.up * 0.5F * Time.deltaTime);

//重新計算坐標

mTarget=transform.position;

//獲取屏幕坐標

mScreen= Camera.main.WorldToScreenPoint(mTarget);

//將屏幕坐標轉化為GUI坐標

mPoint=new Vector2(mScreen.x,Screen.height-mScreen.y);

}

void OnGUI()

{

//保證目標在攝像機前方

if(mScreen.z>0)

{

//內(nèi)部使用GUI坐標進行繪制

GUI.Label(new Rect(mPoint.x,mPoint.y,ContentWidth,ContentHeight),Value.ToString());

}

}

IEnumerator Free()

{

yield return new WaitForSeconds(FreeTime);

Destroy(this.gameObject);

}

}

在上面的代碼中我們需要把握下面幾點:

1野芒、根據(jù)Transform組件獲取位置坐標胆建,將此坐標轉化為屏幕坐標及GUI坐標。

2、常見的四種坐標系:

a、世界坐標:場景中物體的坐標,使用 transform.position獲得。

b、屏幕坐標:以像素來定義的咬像,以屏幕的左下角為(0,0)點生宛,右上角為(Screen.width县昂,Screen.height),Z的位置是以相機的世界單位來衡量的陷舅。如Input.mousePosition即為屏幕坐標倒彰。

c、視口坐標:視口坐標是標準的和相對于相機的莱睁。相機的左下角為(0,0)點待讳,右上角為(1,1)點,Z的位置是以相機的世界單位來衡量的仰剿。

d创淡、GUI坐標:該坐標系以屏幕的左上角為(0,0)點南吮,右下角為(Screen.width琳彩,Screen.height)。

3部凑、在代碼中我們將世界坐標先轉化為屏幕坐標露乏,再轉化為GUI坐標

好了,下面我們將這個腳本綁定在一個空的游戲體上涂邀,并制作成預設施无,在下面的示例中,我們將使用這個預設必孤。

如圖,我們希望實現(xiàn)當角色攻擊紅色的膠囊體時,在游戲場景中顯示玩家對膠囊體造成的傷害值敷搪。具體怎么做呢兴想?我們可以先給模型和膠囊體加上碰撞器,并勾選IsTrigger使其成為一個觸發(fā)器赡勘。我們分別將他們的tag設為Player和Enemy嫂便。接下來,為Enemy編寫一個腳本:[csharp] view plaincopyprint?using UnityEngine;? using System.Collections;? ? public class Enemy : MonoBehaviour {? ? ? ? public GameObject PopupDamage;? ? ? ? void OnTriggerEnter(Collider mCollider)? ? ? {? ? ? ? ? if(mCollider.gameObject.tag=="Player")? ? ? ? ? {? ? ? ? ? ? ? //克隆傷害彈出組件? ? ? ? ? ? ? GameObject mObject=(GameObject)Instantiate(PopupDamage,transform.position,Quaternion.identity);? ? ? ? ? ? ? mObject.GetComponent().Value=Random.Range(20,40);

}

}

}

這里我們設定玩家對敵人造成的傷害值為20到40闸与,運行程序毙替,我們會得到下面的結果:

由于這里使用的是非精確碰撞,所以導致程序一開始角色就和膠囊體發(fā)生了碰撞践樱,而OnTrigger()方法由于只能在碰撞開始的時候捕捉碰撞厂画,所以這里只顯示了一次傷害值。理論上只有當玩家攻擊膠囊體拷邢,才會觸發(fā)傷害值的顯示袱院,不過這個問題再這里我們可以先不追究,因為我們關注的是傷害數(shù)值的顯示瞭稼。到目前為止忽洛,這個問題已經(jīng)圓滿的解決了。

有朋友可能會問:為什么人家的游戲里顯示的傷害效果看起來那么眩目环肘,而你的程序卻只能顯示普普通通的文字呢欲虚?對于這個問題,我們這里給出兩種思路悔雹,留給大家自己去探究啊复哆。第一種方法是在項目中創(chuàng)建一個GUISkin,然后在DamagePopup腳本中添加一個GUIStyle類型的成員變量mStyle荠商,通過該變量我們可以引用到在項目中創(chuàng)建的GUISkin寂恬。這樣,我們就可以定義整體的GUI樣式莱没。此時初肉,我們將OnGUI中的方法修改為:


GUI.Label(new Rect(mPoint.x,mPoint.y,ContentWidth,ContentHeight),Value.ToString(),mStyle);

這樣我們就可以實現(xiàn)自定義的文字效果了。第二種方法是使用貼圖饰躲,即首先準備0-9的數(shù)字圖片牙咏,然后我們將Value各個數(shù)位上的數(shù)字分別截取出來,根據(jù)截取的結果來繪制貼圖嘹裂,這樣同樣可以實現(xiàn)自定義的效果妄壶。好了,今天的內(nèi)容就是這樣了.

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寄狼,一起剝皮案震驚了整個濱河市丁寄,隨后出現(xiàn)的幾起案子氨淌,更是在濱河造成了極大的恐慌,老刑警劉巖伊磺,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盛正,死亡現(xiàn)場離奇詭異,居然都是意外死亡屑埋,警方通過查閱死者的電腦和手機豪筝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摘能,“玉大人续崖,你說我怎么就攤上這事⊥鸥悖” “怎么了严望?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長莺丑。 經(jīng)常有香客問我著蟹,道長,這世上最難降的妖魔是什么梢莽? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任萧豆,我火速辦了婚禮,結果婚禮上昏名,老公的妹妹穿的比我還像新娘涮雷。我一直安慰自己,他們只是感情好轻局,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布洪鸭。 她就那樣靜靜地躺著,像睡著了一般仑扑。 火紅的嫁衣襯著肌膚如雪览爵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天镇饮,我揣著相機與錄音蜓竹,去河邊找鬼。 笑死储藐,一個胖子當著我的面吹牛俱济,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钙勃,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蛛碌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辖源?” 一聲冷哼從身側響起蔚携,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤希太,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浮梢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跛十,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年秕硝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洲尊。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡远豺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坞嘀,到底是詐尸還是另有隱情躯护,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布丽涩,位于F島的核電站棺滞,受9級特大地震影響,放射性物質發(fā)生泄漏矢渊。R本人自食惡果不足惜继准,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矮男。 院中可真熱鬧移必,春花似錦、人聲如沸毡鉴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猪瞬。三九已至憎瘸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陈瘦,已是汗流浹背幌甘。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甘晤,地道東北人含潘。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像线婚,于是被迫代替她去往敵國和親遏弱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容