剛好今天有朋友問我,比較典型的例子就是游戲里面人物的血條。原理很簡單就是把3D點換算成2D的點,但是由于NGUI自身是3D所以我們需要先把NGUI下的點轉(zhuǎn)成2D點,然后在把他轉(zhuǎn)成3D的點。聽起來有點繞,不要緊我直接上代碼。對屏幕自適應不明白的看NGUI研究之如
??
剛好今天有朋友問我,比較典型的例子就是游戲里面人物的血條。原理很簡單就是把3D點換算成2D的點,但是由于NGUI自身是3D所以我們需要先把NGUI下的點轉(zhuǎn)成2D點,然后在把他轉(zhuǎn)成3D的點。聽起來有點繞,不要緊我直接上代碼。對屏幕自適應不明白的看NGUI研究之如何自適應屏幕
目前我一直都是用NGUI來做人物血條,但是2D血條都會有個限制,就是它不能和模型有遮擋關系。不過血條可以根據(jù)人物的位置調(diào)節(jié),比如遠一點的人物血條會小一些,近一點的人物血條會大一些。
最好讓美術做FBX的時候直接內(nèi)置一個GameObject 的點,因為模型有的高有的低,所以血條的位置高度是不一樣的,如果美術內(nèi)置的話可以讓美術來調(diào)節(jié)模型頭頂上的點,這樣比較方便。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
using UnityEngine; using System.Collections; ? publicclassNewBehaviourScript :MonoBehaviour{ ? ??//角色 ????publicTransform Cube; ????//角色的血條 ????publicTransform UI; ? ??//默認血條縮與攝像機的距離 ????privatefloatFomat; ????//角色頭頂?shù)狞c, 最好讓美術把這個點直接做在fbx模型里面。 ????privateTransform Head; ? ????voidStart() ????{ ??????//找到角色身上頭頂?shù)狞c ????????Head=Cube.Find("head"); ????????//計算以下默認血條的距離,也可以寫個常量,就是標記一下 ????????Fomat??=Vector3.Distance(Head.position,Camera.main.transform.position); ????} ? ????voidUpdate() ????{ ??????//這里可以判斷一下 如果位置沒有變化就不要在賦值了 ????????floatnewFomat=Fomat/Vector3.Distance(Head.position,Camera.main.transform.position); ????????UI.position??=WorldToUI(Head.position); ????????//計算出血條的縮放比例 ????????UI.localScale=Vector3.one *newFomat; ? ????//測試代碼,按下W S鍵前后移動角色 ????????if(Input.GetKey(KeyCode.W)) ????????????Cube.Translate(Vector3.forward); ????????if(Input.GetKey(KeyCode.S)) ????????????Cube.Translate(Vector3.back); ????} ? ??//核心代碼在這里把3D點換算成NGUI屏幕上的2D點。 ????publicstaticVector3 WorldToUI(Vector3 point) ????{ ????????Vector3 pt=Camera.main.WorldToScreenPoint(point); ????????//我發(fā)現(xiàn)有時候UICamera.currentCamera 有時候currentCamera會取錯,取的時候注意一下啊。 ????????Vector3 ff= ????UICamera.currentCamera.ScreenToWorldPoint(pt); ????????//UI的話Z軸 等于0 ????????ff.z=0; ????????returnff; ????} } |
?
再說一下,一般血條可能都是由多個UISprite組成,那么最好把這些Sprite都掛在同一個GameObject下面,這樣只需要修正父對象,所以子對象的縮放都會正確。控制角色移動近一點的截圖。
控制角色移動遠一點的截圖,你會發(fā)現(xiàn)血條在屏幕上的比例是不會變化的。
祝大家學習愉快,歡迎討論,嘿嘿嘿嘿
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
Copyright 2014-2025 http://miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號