码迷,mamicode.com
首页 > 其他好文 > 详细

NGUI血条制作,当人物不移除屏幕后不现实血条,优化代码

时间:2015-06-30 10:35:31      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:ngui血条   unity优化   效果   unity   三维坐标到二维坐标的转换   

using UnityEngine;
using System.Collections;
/// <summary>
/// 脚本功能:NGUI血条实现
/// 知识要点:NGUI,3D坐标到2D坐标的转换
/// 创建时间:2015年6月29日
/// 添加对象:添加到玩家身上
/// </summary>
public class HP_2 : MonoBehaviour
{
	// 玩家
	Transform Player;
	// 血条的UI
	public Transform Hp_UI;
	// 人物头顶空物体(用于固定血条位置,这个空物体是人物的子物体)
	Transform Head;
	// 主摄像机与血条之间的距离
	float Distance;
	// 血条UI是否可见(当人物移动到屏幕外方的时候为不可见)
	bool uiIsCanSee = true;

	// 当挂载这个脚本的物体在场景里可以看见的时候
	void OnBecameVisible ()
	{
		uiIsCanSee = true;
	}
	// 当挂载这个脚本的物体在场景里看不见的时候
	void OnBecameInvisible ()
	{
		uiIsCanSee = false;
	}

	void Start ()
	{
		// 获取挂载这个脚本的玩家的Transform
		Player = 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轴,所以要设为0
		ui_point_3d.z = 0;
		return ui_point_3d;
	}
}

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

NGUI血条制作,当人物不移除屏幕后不现实血条,优化代码

标签:ngui血条   unity优化   效果   unity   三维坐标到二维坐标的转换   

原文地址:http://blog.csdn.net/sinat_20559947/article/details/46689161

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!