http://www.unitymanual.com/thread-14635-1-1.html
用NGUI 顯示遊戲物體的名字,當然也可以顯示物體的血條 狀态資訊 最終效果 ![]() 第一步 首先找到場景中的camera,設定一下 Clear Flags 的屬性為Depth only culling Mask的屬性為Everything 标簽設定為MainCamera 第2步 制作一個預制物 在場景内建立一個空物體,在空物體上建立一個NGUI的panel, panel下建立Label ,這個Label就是顯示名字的, 注意把3物體的位置都設成0, 然後把它制作成一個預制物,取名NameTiao, 保持到這個下路徑 Assets/prefab/NameTiao.prefab 第三步 用NGUI ->create -> 2Dui ,建立一個NGUI 的錄影機在場景中 效果如圖 同樣設定一下 NGUi camera,設定一下[size=14.399999618530273px]Clear Flags 的屬性為 Depth only culling Mask的屬性為Everything UICamera(Script)中 Event type的屬性為word Event Mask的屬性為Everything 把Camera設定一個标簽為:NamGua 友善我們找到他 說明:我們所有遊戲物體的名字都挂在Camera下 第四步 顯示名字的腳本 XianShiName.cs把此腳本拖到要顯示名字的物體上 ,通過 public string name; 改名就可以了 using UnityEngine; using UnityEditor; using System.Collections; using System.Collections.Generic; public class XianShiName : MonoBehaviour { public string name; GameObject NameTiao;//擷取. Camera MainCamera;//擷取主錄影機. UILabel Label;//名字. GameObject NameGua; void Awake () { if(name == "") name = "未命名"; NameTiao = (GameObject)AssetDatabase.LoadAssetAtPath("Assets/prefab/NameTiao.prefab",typeof(GameObject)); NameTiao =(GameObject) Instantiate (NameTiao,NameTiao.transform.position, NameTiao.transform.rotation); MainCamera = GameObject.FindWithTag("MainCamera").camera; Label = NameTiao.transform.FindChild("Panel/Label").gameObject.GetComponent<UILabel>(); NameGua= GameObject.FindWithTag("NameGua"); aToB(NameGua,NameTiao); } //A變成B的子物體. void aToB(GameObject fu,GameObject child) { child.transform.parent = fu.transform; } Vector3 pos; void Update() { Label.text = name; // if(是人物) // { // pos = MainCamera.WorldToScreenPoint(人物頭頂的坐标); // } pos = MainCamera.WorldToScreenPoint(transform.position); pos.z = 0f; //z一定要為0. //2. 使用UI錄影機轉換到NGUI的世界坐标. Vector3 pos2 = NameGua.camera.ScreenToWorldPoint(pos); //3. 指派給NGUI控件. //temp為NGUI控件. NameTiao.transform.position = pos2; } } |
-
用NGUI 顯示遊戲物體的名字血條
damageHudPos是人物頭上一個點,damageHudPrefab就是畫好的血條
UIFollowTarget元件會自動跟随