码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-10-13 18:09:41      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   io   os   使用   ar   

3D游戏中,经常遇到这样的情况。角色模型上需要显示角色名字或者血条等信息。

如果用一个摄像机会有可能出现名字或血条显示不正常等问题,所以我采用两个摄像机。一个渲染名字或血条等UI,另一个渲染角色模型。

下面以NGUI为例,实现这一功能。

 

bubuko.com,布布扣

如图所示,一个相机负责渲染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中更新坐标,实际使用按照具体情况。这里是以屏幕坐标为参考,同时也可以用视口坐标。

bubuko.com,布布扣

将脚本挂在GameManager上,其中:Obj是角色模型。

 然后点击运行,就会发现名字面板紧跟着模型

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

标签:des   style   blog   http   color   io   os   使用   ar   

原文地址:http://www.cnblogs.com/wugang/p/4022485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!