UNITY3D 脑袋顶血顶名

来源:互联网 发布:it行业发展前景ppt 编辑:程序博客网 时间:2024/05/16 01:22


杨航最近在学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("鼠标停留在该对象区域时");
        }

}


0 0
原创粉丝点击