首页 > 代码库 > Unity3D人物头顶名称与血条更新与绘制
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 onm ouseDrag () { Debug.Log("鼠标拖动该模型区域时"); } void onm ouseDown() { Debug.Log("鼠标按下时"); if(HP >0) { HP -=5 ; } } void onm ouseUp() { Debug.Log("鼠标抬起时"); } void onm ouseEnter() { Debug.Log("鼠标进入该对象区域时"); } void onm ouseExit() { Debug.Log("鼠标离开该模型区域时"); } void onm ouseOver() { Debug.Log("鼠标停留在该对象区域时"); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。