unity3D制作血条跟随的研究

在制作游戏的时候都会用到血条,尤其RPG游戏,那么这个怎么制作呢?

第一种NGUI制作,这里要引入NGUI HUD Text ,这是最简单的方法。制作一个slider给其添加脚本Follow Target如下图:

unity3D制作血条跟随的研究_第1张图片

我们给cube头上设置一个空物体,这样做是为了不让血条里cube太近。

这里对应Target就是我们要设置血条跟随的目标物体,因为NGUI下的camera只是渲染UI,所以下面的GameCamera就是工程的Main Camera。把UI下的camera拖过来。运行,移动cube,这样就可以达到血条跟随了。

那下面的Disable if Invisible什么意思呢?

意思是当超出视野的时候血条是否渲染。一般情况勾上对性能有好处。

第二种方法,GUI画出血条

using UnityEngine;
using System.Collections;
 
public class NPC : MonoBehaviour {
 
	//主摄像机对象
	private Camera camera;
	//NPC名称
	private string name = "学者1";
 
	//主角对象
	GameObject hero;
	//NPC模型高度
	float npcHeight;
	//红色血条贴图
	public Texture2D blood_red;
	//黑色血条贴图
	public Texture2D blood_black;
    //默认NPC血值
	private int HP = 100;
 
	void Start ()
	{
		//根据Tag得到主角对象
		hero = GameObject.FindGameObjectWithTag("Player");
		//得到摄像机对象
		camera = Camera.main;
 
		//注解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);
 
	}
这里代码来自雨松博客,引入学习,将脚本挂在目标任务头上,PS两张血条,挂上,就可以做出血条跟随。

第三种方法UGUI,这里主要涉及到坐标的转化,这个以后博客里总结吧。。。


你可能感兴趣的:(unity,unity3d,血条跟随,NGUI,GUI,UGUI)