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


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是角色模型。

 然后點擊運行,就會發現名字面板緊跟着模型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM