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 = ; 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/;
//先绘制黑色血条
GUI.DrawTexture(new Rect(position.x - (bloodSize.x/),position.y - bloodSize.y ,bloodSize.x,bloodSize.y),blood_black);
//在绘制红色血条
GUI.DrawTexture(new Rect(position.x - (bloodSize.x/),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/),position.y - nameSize.y - bloodSize.y ,nameSize.x,nameSize.y), name); } //下面是经典鼠标点击对象的事件,大家看一下就应该知道是什么意思啦。
void OnMouseDrag ()
{
Debug.Log("鼠标拖动该模型区域时");
} void OnMouseDown()
{
Debug.Log("鼠标按下时"); if(HP >)
{
HP -= ;
} }
void OnMouseUp()
{
Debug.Log("鼠标抬起时");
} void OnMouseEnter()
{
Debug.Log("鼠标进入该对象区域时");
}
void OnMouseExit()
{
Debug.Log("鼠标离开该模型区域时");
}
void OnMouseOver()
{
Debug.Log("鼠标停留在该对象区域时");
} }
Unity3D人物头顶名称与血条更新与绘制的更多相关文章
- 使用 NGUI 实现头顶文字及血条
以下是 NGUI HUD Text 实现的: 基本原理: 1. 在角色头顶绑一个点 Pivot,用于对齐 2. 因为界面总是覆盖在人物头顶信息的上面,所以将 UIRoot 分为2个 Panel:1) ...
- unity3d学习笔记(十九)--ngui制作3d人物头顶的头像和血条
原地址:http://blog.csdn.net/lzhq1982/article/details/18793479 本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. htt ...
- unity3d 角色头顶信息3D&2D遮挡解决方案(一)
先上效果图,只凭文字描述,脑补应该有些困难- - 如图:有三个角色(我们暂且从左到右叫它们A.B.C),一个2D UI(中间动作选择的框框),一个cube(右边的方块) cube挡住了角色C的头顶信息 ...
- pygame 笔记-7 生命值/血条处理
通常游戏中的角色都有所谓的生命值,而且头顶上会有一个血条显示.生命值无非就是一个属性而已,很容易在Player.py类中增加,头顶上的血条其实就是绘制二个矩形,叠加在一起. 以上节的Player.py ...
- Unity3D NGUI学习(一)血条
这次来讲讲Unity3D NGUI这个插件的学习,这个插件是收费的,不过去网上可以下载得很多可用版本.用来做用户的交互UI,学习起来比较简单 第一步,导入NGUI包 http://pan.baidu. ...
- Unity3D 人形血条制作小知识
这几天用Unity3D做个射击小游戏,想做个人形的血条.百思不得其解,后来问了网上的牛牛们,攻克了,事实上挺简单的,GUI里面有个函数DrawTextureWithTexCoords就能够实现图片的裁 ...
- NGUI研究之3D模型坐标转2D屏幕坐标-血条
刚好今天有朋友问我,比較典型的样例就是游戏里面人物的血条. 原理非常easy就是把3D点换算成2D的点.可是因为NGUI自身是3D所以我们须要先把NGUI下的点转成2D点.然后在把他转成3D的点 ...
- Unity UGUI实现分段式血条
我们可以看到像英雄联盟等游戏里英雄头顶的血条显示并非是纯色的,而是根据血量的多少而显示一定量的格子,这种方式明显是比较友好.比较美观的,事实上我们的游戏里面也想实现这样的效果,那该怎么办呢?根据血量的 ...
- UGUI血条
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI; pu ...
随机推荐
- java序列化知识整理
1. 什么是序列化? 序列化就是只把一个对象串行化成一个字节流,用于网络传输或者持久化. 2. 序列化的使用场景? a). 把内存中的对象持久化到文件或者数据库中: b). 对象在网络上传输. 3. ...
- Mongodb和Hive详细对比
本文主要用于分析在大数据场景下Mongodb和Hive的优缺点: 支持的数据类型 支持的查询 支持的数据量 性能优化手段
- Hibernate配置log4j日志环境
1.准备所需的jar 说明:具体所使用的jar包的版本与你所使用的Hibernate版本有关,我用的是(hibernate-release-4.3.11.Final) <1>准备slf4j ...
- [NOIP2013] 火柴排队(归并排序)
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- 【jq】c#零基础学习之路(1)Hello World!
从今天起我会持续发表,这个就是一个日记型的,学习编程是枯燥的,况且我们还是零基础. 学前准备 1.编译环境 vs2010.vs2012.vs2015...(本人用的是vs2010旗舰版).vs2010 ...
- SqlServer阅读收集
1.根据字段名,查找相关表--INFORMATION_SCHEMA.COLUMNS SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME ...
- mfc 调用Windows的API函数实现同步异步串口通信(源码)
在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...
- Python 获得对象内存占用内存大小 sys.getsizeof
from sys import getsizeof class A(object): pass class B: pass for x in (None, 1, 1L, 1.2, 'c', [], ( ...
- Squid代理服务器
缓存代理概述:做为应用层的代理服务软件,squid主要提供缓存加速,应用层过滤控制的功能. 1.代理的工作机制 当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有 ...
- switch
关于java中switch使用的一些说明 switch(表达式) { case常量表达式1:语句1; .... case常量表达式2:语句2; default:语句; } default就是如果没有符 ...