zoukankan      html  css  js  c++  java
  • 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中更新坐标,实际使用按照具体情况。这里是以屏幕坐标为参考,同时也可以用视口坐标。

  • 相关阅读:
    安装一个Linux 罗晓杜
    基本正则表达 罗晓杜
    安装MySQL 罗晓杜
    复选框返回选中项ID到后台
    软件工程的理解
    作业一:计科131邵楠
    javascript中函数和方法的区别
    Javascript动画系列之 —— lightbox实现(一)
    如何让自己的javascript代码具有可维护性?
    javascript动画系列 —— 切换图片(原生)
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11277849.html
Copyright © 2011-2022 走看看