3D遊戲中,常常遇到這樣的狀況。角色模型上須要顯示角色名字或者血條等信息。ui
若是用一個攝像機會有可能出現名字或血條顯示不正常等問題,因此我採用兩個攝像機。一個渲染名字或血條等UI,另外一個渲染角色模型。spa
下面以NGUI爲例,實現這一功能。code
如圖所示,一個相機負責渲染UI,另一個負責渲染遊戲場景。orm
再添加腳本NamePanel,代碼以下:blog
/* 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是角色模型。ip
而後點擊運行,就會發現名字面板緊跟着模型it