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

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

  • 相关阅读:
    如何申请iOS开发者证书/发布app到手机
    STL
    TCP/IP编程
    STL
    STL
    Python网络爬虫
    Python网络爬虫
    Python网络爬虫
    Python编程-基础知识-python项目包和文件的管理以及如何引用相对路径的包和模块
    带你认识HL7和CDA
  • 原文地址:https://www.cnblogs.com/wugang/p/4022485.html
Copyright © 2020-2023  润新知