Unity3d中角色模型和角色名字保持相對位置

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

相關文章
相關標籤/搜索