您的位置:首页 > 移动开发 > Unity3D

unity学习之怪物名称血条

2015-01-16 21:25 351 查看
欢迎来到unity学习、unity培训unity企业培训教育专区,这里有很多U3D资源、U3D培训视频,我们致力于打造业内unity3d培训、学习第一品牌。

      人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标。因为3D世界中的怪物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的怪物坐标换算成2D平面中的坐标,继而找到怪物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来。

        //主摄像机对象

privateCamera
camera;

//NPC名称

privatestringname="老鼠";

 

//主角对象

GameObject hero;

//怪物模型高度

floatnpcHeight;

//红色血条贴图

publicTexture2D
blood_red;

//黑色血条贴图

publicTexture2D
blood_black;

    //默认怪物血值

privateintHP=100;

 

voidStart()

{

//根据Tag得到主角对象

hero=GameObject.FindGameObjectWithTag("Player");

//得到摄像机对象

camera=Camera.main;

 

//注解1

//得到模型原始高度

floatsize_y=collider.bounds.size.y;

//得到模型缩放比例

floatscal_y=transform.localScale.y;

//它们的乘积就是高度

npcHeight=(size_y*scal_y);

 

}

voidUpdate()

{
//保持可以让怪物一直面朝主角

transform.LookAt(hero.transform);
}

voidOnGUI()
{

//得到怪物头顶在3D世界中的坐标
//默认怪物坐标点在脚底下,所以这里加上npcHeight它模型的高度即可

Vector3 worldPosition=newVector3(transform.position.x,transform.position.y+npcHeight,transform.position.z);
//根据怪物头顶的3D坐标换算成它在2D屏幕中的坐标

Vector2 position=camera.WorldToScreenPoint(worldPosition);
//得到真实怪物头顶的2D坐标
position=newVector2(position.x,Screen.height-position.y);
//注解2

//计算出血条的宽高
Vector2
bloodSize=GUI.skin.label.CalcSize(newGUIContent(blood_red));

 
//通过血值计算红色血条显示区域

intblood_width=blood_red.width*HP/100;
//先绘制黑色血条

GUI.DrawTexture(newRect(position.x-(bloodSize.x/2),position.y-bloodSize.y,bloodSize.x,bloodSize.y),blood_black);
//在绘制红色血条

GUI.DrawTexture(newRect(position.x-(bloodSize.x/2),position.y-bloodSize.y,blood_width,bloodSize.y),blood_red);
 
//计算怪物名称的宽高

Vector2 nameSize=GUI.skin.label.CalcSize(newGUIContent(name));
//设置显示颜色为黄色

GUI.color  =Color.yellow;
//绘制怪物名称

GUI.Label(newRect(position.x-(nameSize.x/2),position.y-nameSize.y-bloodSize.y,nameSize.x,nameSize.y),name);
 

}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息