首先學(xué)習(xí)本文的重點(diǎn)內(nèi)容,如何將游戲世界中任意3D坐標(biāo)轉(zhuǎn)換成屏幕中的2D坐標(biāo)。根據(jù)這個(gè)方法計(jì)算出的2D坐標(biāo)屏幕左下角的點(diǎn)為0.0 ,屏幕右上角的坐標(biāo)為1.1 所以真實(shí)的2D坐標(biāo)還得通過(guò)Screen.height 與Screen.width計(jì)算一下才行。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、渝北網(wǎng)絡(luò)推廣、小程序定制開發(fā)、渝北網(wǎng)絡(luò)營(yíng)銷、渝北企業(yè)策劃、渝北品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供渝北建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
[代碼]c#/cpp/oc代碼:
| 1 | Vector2 position = camera.WorldToScreenPoint (worldPosition); |
在Unity工程導(dǎo)入角色控制器組件,不知道角色控制器的朋友請(qǐng)閱讀我之前的文章哈。創(chuàng)建一個(gè)Plane做為游戲的地面,然后利用角色控制器組件創(chuàng)建兩個(gè)模型,一個(gè)做為主角,一個(gè)作為NPC,主角可以通過(guò)控制來(lái)移動(dòng)從四周來(lái)觀察NPC對(duì)象。由于地面的面積比較小移動(dòng)主角時(shí)為了避免主角越界掉下去,我們做一個(gè)邊界的物理層。物理層其實(shí)很簡(jiǎn)單,就是給平面四周放置四個(gè)平面在四周將平面包圍著,給四周的四個(gè)平面綁定上Box Collider組件,這樣主角就不會(huì)越界掉下去啦。因?yàn)闆]有給貼圖所以效果上看不到這四個(gè)對(duì)象。哇咔咔~ 如下圖所示,在場(chǎng)景是途中主角被四個(gè)平面包圍這,即時(shí)它拼命的想往外條但是還是跳不出去,哈哈。
創(chuàng)建腳本NPC.cs 然后把腳本掛在NPC對(duì)象身上,在腳本中我們繪制主角的血條以及名稱。
NPC.cs
[代碼]c#/cpp/oc代碼:
| 002 | using System.Collections; |
| 004 | public class NPC : MonoBehaviour { |
| 007 | private Camera camera; |
| 009 | private string name = "我是雨松MOMO"; |
| 016 | public Texture2D blood_red; |
| 018 | public Texture2D blood_black; |
| 020 | private int HP = 100; |
| 024 | //根據(jù)Tag得到主角對(duì)象 |
| 025 | hero = GameObject.FindGameObjectWithTag("Player"); |
| 027 | camera = Camera.main; |
| 031 | float size_y = collider.bounds.size.y; |
| 033 | float scal_y = transform.localScale.y; |
| 035 | npcHeight = (size_y *scal_y) ; |
| 042 | transform.LookAt(hero.transform); |
| 047 | //得到NPC頭頂在3D世界中的坐標(biāo) |
| 048 | //默認(rèn)NPC坐標(biāo)點(diǎn)在腳底下,所以這里加上npcHeight它模型的高度即可 |
| 049 | Vector3 worldPosition = new Vector3 (transform.position.x , transform.position.y + npcHeight,transform.position.z); |
| 050 | //根據(jù)NPC頭頂?shù)?D坐標(biāo)換算成它在2D屏幕中的坐標(biāo) |
| 051 | Vector2 position = camera.WorldToScreenPoint (worldPosition); |
| 052 | //得到真實(shí)NPC頭頂?shù)?D坐標(biāo) |
| 053 | position = new Vector2 (position.x, Screen.height - position.y); |
| 056 | Vector2 bloodSize = GUI.skin.label.CalcSize (new GUIContent(blood_red)); |
| 058 | //通過(guò)血值計(jì)算紅色血條顯示區(qū)域 |
| 059 | int blood_width = blood_red.width * HP/100; |
| 061 | GUI.DrawTexture(new Rect(position.x - (bloodSize.x/2),position.y - bloodSize.y ,bloodSize.x,bloodSize.y),blood_black); |
| 063 | GUI.DrawTexture(new Rect(position.x - (bloodSize.x/2),position.y - bloodSize.y ,blood_width,bloodSize.y),blood_red); |
| 067 | Vector2 nameSize = GUI.skin.label.CalcSize (new GUIContent(name)); |
| 069 | GUI.color = Color.yellow; |
| 071 | GUI.Label(new Rect(position.x - (nameSize.x/2),position.y - nameSize.y - bloodSize.y ,nameSize.x,nameSize.y), name); |
| 075 | //下面是經(jīng)典鼠標(biāo)點(diǎn)擊對(duì)象的事件,大家看一下就應(yīng)該知道是什么意思啦。 |
| 078 | Debug.Log("鼠標(biāo)拖動(dòng)該模型區(qū)域時(shí)"); |
| 083 | Debug.Log("鼠標(biāo)按下時(shí)"); |
| 093 | Debug.Log("鼠標(biāo)抬起時(shí)"); |
| 098 | Debug.Log("鼠標(biāo)進(jìn)入該對(duì)象區(qū)域時(shí)"); |
| 102 | Debug.Log("鼠標(biāo)離開該模型區(qū)域時(shí)"); |
| 106 | Debug.Log("鼠標(biāo)停留在該對(duì)象區(qū)域時(shí)"); |
注解1:通過(guò)collider.bounds.size 可以拿到模型對(duì)應(yīng)三個(gè)軸向的高度,但是模型是可以縮放的,所以真實(shí)的模型高度應(yīng)當(dāng)是原始高度乘以縮放系數(shù)才行。 transform.localScale可以拿到模型對(duì)應(yīng)三個(gè)軸向的縮放系數(shù),因?yàn)檫@里我們需要模型的高度,所以忽略X軸與Z軸。
注解2:在這里我們計(jì)算血條的寬度,GUI.skin.label.Calcsize()這個(gè)方法是以默認(rèn)的皮膚對(duì)象Label對(duì)象去參數(shù)對(duì)象的寬高。參數(shù)是new GUIContent(blood_Red)意思是拿紅色血條的貼圖的寬高,它將保存在返回的size中。最后以寬高將血條繪制在屏幕中,我們的血條采取兩層。背景是黑色的,前面是紅色的,當(dāng)人物費(fèi)血時(shí)紅色血條減少。
注解3: 這里通過(guò)字符串來(lái)獲取它整體的寬度與高度,因?yàn)镹PC的名稱是可變的,所以我們需要?jiǎng)討B(tài)的獲取整體的顯示區(qū)域。同樣是以GUI.skin.label對(duì)象去調(diào)用CalcSize。
如下圖所示,當(dāng)使用鼠標(biāo)點(diǎn)擊NPC對(duì)象時(shí),NPC頭頂?shù)难獥l將開始發(fā)生減血。這個(gè)例子我使用OnGUI繪制當(dāng)然大家也可以在Hierarchy 視圖中的創(chuàng)建GUI Texture 或者GUI Text對(duì)象 來(lái)實(shí)現(xiàn),不過(guò)原理都是這樣的 大家可以試試 哇咔咔。
分享名稱:Unity3D研究之人物頭頂名稱與血條更新與繪制
鏈接地址:
http://www.5511xx.com/article/cdcshhh.html