<span style="font-size:14px;">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摄像</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:14px;"> // Resources.Load("Hp/Hp") ; Hp 为NGUI中制作的血条 Slider 预制件</span></span>
<span style="font-size:14px;"> 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);
}
}
}
</span>