3D游戲中,經常遇到這樣的情況。角色模型上需要顯示角色名字或者血條等信息。
如果用一個攝像機會有可能出現名字或血條顯示不正常等問題,所以我采用兩個攝像機。一個渲染名字或血條等UI,另一個渲染角色模型。
下面以NGUI為例,實現這一功能。
如圖所示,一個相機負責渲染UI,另外一個負責渲染游戲場景。
再添加腳本NamePanel,代碼如下:
/* date:2014-10-13 author:wg description:英雄名字面板 */ using UnityEngine; using System.Collections; public class NamePanel : MonoBehaviour { [SerializeField] UILabel lblName; [SerializeField] GameObject obj; [SerializeField] Camera mainCamera; [SerializeField] Camera uiCamera; void Update() { UpdateNamePosition(); } Vector3 m_position; /// <summary> /// 更新名字位置 /// </summary> void UpdateNamePosition() { //取模型在主攝像機中的世界坐標 m_position = obj.transform.position; //轉換為主攝像機的屏幕坐標 m_position = mainCamera.WorldToScreenPoint(m_position); //用得到的屏幕坐標,在UI攝像機中轉換為世界坐標 m_position = uiCamera.ScreenToWorldPoint(m_position); m_position.z = 0f; m_position.y += 0.1f; lblName.transform.position = m_position; } }
在Update中更新坐標,實際使用按照具體情況。這里是以屏幕坐標為參考,同時也可以用視口坐標。
將腳本掛在GameManager上,其中:Obj是角色模型。
然后點擊運行,就會發現名字面板緊跟着模型