Unity3D人物头顶名称与血条更新与绘制

using UnityEngine;
using System.Collections;

public class NPC : MonoBehaviour {

    //主摄像机对象
    private Camera camera;
    //NPC名称
    private string name = "我是雨松MOMO";

    //主角对象
    GameObject hero;
    //NPC模型高度
    float npcHeight;
    //红色血条贴图
    public Texture2D blood_red;
    //黑色血条贴图
    public Texture2D blood_black;
    //默认NPC血值
    private int HP = 100;

    void Start ()
    {
        //根据Tag得到主角对象
        hero = GameObject.FindGameObjectWithTag("Player");
        //得到摄像机对象
        camera = Camera.main;

        //注解1
        //得到模型原始高度
        float size_y = collider.bounds.size.y;
        //得到模型缩放比例
        float scal_y = transform.localScale.y;
        //它们的乘积就是高度
        npcHeight = (size_y *scal_y) ;

    }

    void Update ()
    {
        //保持NPC一直面朝主角
        transform.LookAt(hero.transform);
    }

    void OnGUI()
    {
        //得到NPC头顶在3D世界中的坐标
        //默认NPC坐标点在脚底下,所以这里加上npcHeight它模型的高度即可
        Vector3 worldPosition = new Vector3 (transform.position.x , transform.position.y + npcHeight,transform.position.z);
        //根据NPC头顶的3D坐标换算成它在2D屏幕中的坐标
        Vector2 position = camera.WorldToScreenPoint (worldPosition);
        //得到真实NPC头顶的2D坐标
        position = new Vector2 (position.x, Screen.height - position.y);
        //注解2
        //计算出血条的宽高
        Vector2 bloodSize = GUI.skin.label.CalcSize (new GUIContent(blood_red));

        //通过血值计算红色血条显示区域
        int blood_width = blood_red.width * HP/100;
        //先绘制黑色血条
        GUI.DrawTexture(new Rect(position.x - (bloodSize.x/2),position.y - bloodSize.y ,bloodSize.x,bloodSize.y),blood_black);
        //在绘制红色血条
        GUI.DrawTexture(new Rect(position.x - (bloodSize.x/2),position.y - bloodSize.y ,blood_width,bloodSize.y),blood_red);

        //注解3
        //计算NPC名称的宽高
        Vector2 nameSize = GUI.skin.label.CalcSize (new GUIContent(name));
        //设置显示颜色为黄色
        GUI.color  = Color.yellow;
        //绘制NPC名称
        GUI.Label(new Rect(position.x - (nameSize.x/2),position.y - nameSize.y - bloodSize.y ,nameSize.x,nameSize.y), name);

    }

    //下面是经典鼠标点击对象的事件,大家看一下就应该知道是什么意思啦。
    void OnMouseDrag ()
    {
        Debug.Log("鼠标拖动该模型区域时");
    }

    void OnMouseDown()
    {
        Debug.Log("鼠标按下时");

        if(HP >0)
        {
            HP -=5 ;
        }

    }
    void OnMouseUp()
    {
        Debug.Log("鼠标抬起时");
    }

    void OnMouseEnter()
    {
        Debug.Log("鼠标进入该对象区域时");
    }
    void OnMouseExit()
    {
        Debug.Log("鼠标离开该模型区域时");
    }
    void OnMouseOver()
    {
        Debug.Log("鼠标停留在该对象区域时");
    }

}

Unity3D人物头顶名称与血条更新与绘制,布布扣,bubuko.com

时间: 2024-10-14 00:40:56

Unity3D人物头顶名称与血条更新与绘制的相关文章

Unity3d人物的名称与血条的绘制方法

人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标.因为3D世界中的人物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的人物坐标换算成2D平面中的坐标,继而找到人物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来. 首先学习本文的重点内容,如何将游戏世界中任意3D坐标转换成屏幕中的2D坐标.根据这个方法计算出的2D坐标屏幕左下角的点为0.0 ,屏幕右上角的坐标为1.1 所以真实的2D坐标还得通过Screen.height

使用 NGUI 实现头顶文字及血条

以下是 NGUI HUD Text 实现的: 基本原理: 1. 在角色头顶绑一个点 Pivot,用于对齐 2. 因为界面总是覆盖在人物头顶信息的上面,所以将 UIRoot 分为2个 Panel:1) GUI,用于画界面,Depth 较大 2) HUDPanel,用于画人物头顶文字及血条,Depth 较小 (1和2是最重要的) 3. 先使用 NGUI 实现一套管理人物头顶信息的类(或若干个类),名为 HUDText,他包含了各种功能(设置名字.名字颜色.血条等) 4. 将 HUDText 存为 P

unity3d学习笔记(十九)--ngui制作3d人物头顶的头像和血条

原地址:http://blog.csdn.net/lzhq1982/article/details/18793479 本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/18793479 先上张图,自己做的一个demo. 这里的人物头像和血条是在3d世界生成的,所以有真正的纵深感和遮挡关系,废话不多说,看我是怎么实现的. 第一步,先在UI Root里制作头像和血条. 这个制作步骤基

[Unity3D]Unity3D再叙NGUI之血条及技能冷却效果

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本文作者:

Unity3D游戏开发之实现血条技能培训

下面我们开始今天的Unity3D技能培训. 我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天呢,我们来做一个在游戏中十分重要的组成元素:血条.血条是什么呢?血条是生命值的一种体现,就像<仙剑奇侠传三>电视剧中,当景天说他想让那些被邪剑仙害死的人活过来的时候,天帝说需要等量的生命值来换,所以电视剧中的结局就变成了景天留在世上的时间并不多了,雪见依偎着他坐在新安当门口的时候,天上忽然下起了雪.聊完了游

unity3d 角色头顶信息3D&amp;2D遮挡解决方案

先上效果图,只凭文字描述,脑补应该有些困难- - 如图:有三个角色(我们暂且从左到右叫它们A.B.C),一个2D UI(中间动作选择的框框),一个cube(右边的方块) cube挡住了角色C的头顶信息 2D UI挡住了角色和cube 共同点是只显示未被遮挡的部分,遮挡的部分不显示 相信大多数人在看我这篇文章之前已经看过雨松momo的<人物头顶名称与血条更新与绘制> 没看过的可以去看看:http://www.xuanyusong.com/archives/1032 如果直接使用雨松momo文章中

Ogre之简易地模拟人物退格血条

写在前面: 首先,在制作该人物血条前,我需要声明以下几点: 1.人物的血条属于简易制作的退格方式,不是连续的进度条类型. 2.该血条制作纯属快速开发完成,没有达到精细的程度,高手可以绕道. 以以上两点为前提,我粗略的讲述一下我在OGRE中用CEGUI制作血条的过程. 首先,人物头像用了一张我很喜欢的全职猎人中奇伢的图片: 紧接着,为了配合紫色色调,我我选取了一种紫色的血条单元: 有了血条单元(这里我称之为紫星),之后,用图片制作工具拼接制作了11张图片, 从0星紫星一直到10星紫星,取名为pur

Unity里名字牌、血条等头顶挂件的实现

Unity里实现人物头顶的名字牌.血条的实现,网上很多博客有提到过.这里结合自己在项目中的开发,简单总结几点. 宣雨松的热门博客里有提到过直接利用Unity自身的OnGUI()实现人物血条:http://www.xuanyusong.com/archives/1032 . 撇开血条进度条的更新,重点关注头顶物件位置的更新.简化之,实现人物头顶的名字牌的. 核心代码如下: using UnityEngine; using System.Collections; public class Follo

[Unity3D]Unity3D游戏开发之基于2D贴图实现血条组件的开发

各位朋友,大家好,欢迎大家关注我的博客,我是秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 在上一篇文章中,我们以经典的打砖块游戏为例,讲解了一个Unity3D游戏的完整实现过程.今天呢,我们来做一个在游戏中十分重要的组成元素:血条.血条是什么呢?血条是生命值的一种体现,就像<仙剑奇侠传三>电视剧中,当景天说他想让那些被邪剑仙害死的人活过来的时候,天帝说需要等量的生命值来换,所以电视剧中的结局就变成了景天留在世上的时间并不多了,雪见依偎着他坐在新安当门口的时候,天上忽