NGUI血条制作,当人物移出屏幕后不显示血条,优化代码

using UnityEngine;using System.Collections;/// <summary>/// 脚本功能:NGUI血条实现/// 知识要点:NGUI,3D坐标到2D坐标的转换/// 创建时间:2015年6月29日/// 添加对象:添加到玩家身上/// </summary>public class HP_2 : MonoBehaviour{// 玩家Transform Player;// 血条的UIpublic Transform Hp_UI;// 人物头顶空物体(用于固定血条位置,,这个空物体是人物的子物体)Transform Head;// 主摄像机与血条之间的距离float Distance;// 血条UI是否可见(当人物移动到屏幕外方的时候为不可见)bool uiIsCanSee = true;// 当挂载这个脚本的物体在场景里可以看见的时候void OnBecameVisible (){uiIsCanSee = true;}// 当挂载这个脚本的物体在场景里看不见的时候void OnBecameInvisible (){uiIsCanSee = false;}void Start (){// 获取挂载这个脚本的玩家的TransformPlayer = gameObject.transform.GetComponent<Transform> ();// 找到玩家自身头顶的空物体Head = Player.Find ("target");// 计算头顶空物体与主摄像机之间距离Distance = Vector3.Distance (Head.position, Camera.main.transform.position);}void Update (){// 如果玩家在摄像机的视线内,就显示血条if (uiIsCanSee) {Hp_UI.gameObject.SetActive (true);} else {Hp_UI.gameObject.SetActive (false);}// 计算缩放比例float newDistance = Distance / Vector3.Distance (Head.position, Camera.main.transform.position);// 血条UI的坐标,由人物头顶的空物体坐标换算而来Hp_UI.position = WorldPointToUiPoint (Head.position);// 血条UI的缩放Hp_UI.localScale = Vector3.one * newDistance;if (Input.GetKey (KeyCode.W)) {gameObject.transform.Translate (Vector3.forward);}if (Input.GetKey (KeyCode.A)) {gameObject.transform.Translate (Vector3.left);}if (Input.GetKey (KeyCode.S)) {gameObject.transform.Translate (Vector3.back);}if (Input.GetKey (KeyCode.D)) {gameObject.transform.Translate (Vector3.right);}}// 主摄像机中物体的3D坐标—>UI摄像机的3D坐标public static Vector3 WorldPointToUiPoint (Vector3 point){// 主摄像机中物体的3D坐标转换到主摄像机的2D坐标Vector3 main_point_2d = Camera.main.WorldToScreenPoint (point);// 主摄像机中物体的2D坐标转换到UI摄像机的3D坐标Vector3 ui_point_3d = UICamera.mainCamera.ScreenToWorldPoint (main_point_2d);// UI上的物体坐标不涉及Z轴,所以要设为0ui_point_3d.z = 0;return ui_point_3d;}}

版权声明:本文为博主原创文章,未经博主允许不得转载。

即使爬到最高的山上,一次也只能脚踏实地地迈一步。

NGUI血条制作,当人物移出屏幕后不显示血条,优化代码

相关文章:

你感兴趣的文章:

标签云: