Unity制作血条

using UnityEngine;
using System.Collections;

//Unity移动旋转,比例缩放
public class Test : MonoBehaviour {
    private Transform myTransform;
    private GameObject hpObj; // 血量条
    private GameObject UIRootObj; //UIRoot
    private float defaultDistance = 10.0f;  // 默认距离摄像机的距离
    public float height;   //血条高度
    private Camera guiCamera;  // Ngui 摄像机 

    void Start()
    {
        Init();
    }

    void Init()
    {
        myTransform = transform;
        UIRootObj = GameObject.FindGameObjectWithTag("UIRootObj"); // 获取UIRoot
        guiCamera = NGUITools.FindCameraForLayer(LayerMask.NameToLayer("UICameraLayer")); // 获取UI摄像
              // Resources.Load("Hp/Hp")  ;  Hp 为NGUI中制作的血条 Slider 预制件
        hpObj = NGUITools.AddChild(UIRootObj, Resources.Load("Hp/Hp") as GameObject);  // 将血条添加为 UIRoot的子物体
    }

    void Update()
    {
        AddHpSlider();
    }

    private void AddHpSlider()  //添加血量条
    {
        if (hpObj != null)
        {
            Vector3 rolePos = myTransform.position;  // 获取自身坐标
            rolePos.y += height;   // 设置血条高度
            //将血条位置的世界坐标转换为 UI摄像机的 屏幕坐标
            Vector3 pos = Camera.main.WorldToScreenPoint(rolePos);  
            pos.z = 0.0f;  // 设置 Z轴坐标为 0
            Vector3 sliderPos = Vector3.zero;// 定义 血条坐标
            // 将血条位置的 世界坐标转换为 UI摄像机的世界坐标
            sliderPos = guiCamera.ScreenToWorldPoint(pos); 
            // 设置 血条的位置
            hpObj.transform.position = sliderPos;
            // 获取角色和摄像机的距离
            float distance = Vector3.Distance(Camera.main.transform.position, myTransform.position);
            // 获取比例。 即距离摄像机越近,血条越大, 距离摄像机越远,血条越小
            float scal = defaultDistance / distance;
            // 设置血条的比例
            hpObj.transform.localScale = new Vector3(scal, scal, scal);
        }
    }
}

你可能感兴趣的:(Unity)