杨航最近在学Unity3D
 using UnityEngine;
 using System.Collections;
public class NPC : MonoBehaviour {
        //主摄像机对象
         public  Camera camera;
         //NPC名称
         private string name = "我是doudou";
        //主角对象
         public GameObject hero;
         //NPC模型高度
         float npcHeight;
         //红色血条贴图
         public Texture2D blood_red;
         //黑色血条贴图
         public Texture2D blood_black;
     //默认NPC血值
         private int HP = 100;
        void Start ()
         {
                 根据Tag得到主角对象
                 //hero = GameObject.FindGameObjectWithTag("Human");
                 得到摄像机对象 
                 //camera = Camera.main;
             blood_red = new Texture2D(100, 10,TextureFormat.RGBA32,false);
            blood_red.SetPixel(100,10, Color.red);
             blood_black = new Texture2D(100, 10, TextureFormat.RGBA32, false);
             blood_black.SetPixel(100,10, Color.black);
  
                 //注解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("鼠标停留在该对象区域时");
         }
}