欢迎来到天天文库
浏览记录
ID:40574815
大小:139.36 KB
页数:4页
时间:2019-08-04
《unity3d角色血条》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Unity3D之人物头顶名称与血条更新与绘制时间:12-07-18栏目:Unity3D教程作者:liuxiaoni评论:3人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标。因为3D世界中的人物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的人物坐标换算成2D平面中的坐标,继而找到人物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来。首先学习本文的重点内容,如何将游戏世界中任意3D坐标转换成屏幕中的2D坐标。根据这个方法计算出的2D坐标屏幕左下角的点为0.0,屏幕右上角的坐标为1.1所以真实的2D坐标还得通过Scr
2、een.height与Screen.width计算一下才行。Vector2position=camera.WorldToScreenPoint(worldPosition);在Unity工程导入角色控制器组件,不知道角色控制器的朋友请阅读我之前的文章哈。创建一个Plane做为游戏的地面,然后利用角色控制器组件创建两个模型,一个做为主角,一个作为NPC,主角可以通过控制来移动从四周来观察NPC对象。由于地面的面积比较小移动主角时为了避免主角越界掉下去,我们做一个边界的物理层。物理层其实很简单,就是给平面四周放置四个平面在四周将平面包围着,给四周的四个平面绑定上BoxCollider组件,这样
3、主角就不会越界掉下去啦。因为没有给贴图所以效果上看不到这四个对象。如下图所示,在场景是途中主角被四个平面包围这,即时它拼命的想往外条但是还是跳不出去。创建脚本NPC.cs然后把脚本挂在NPC对象身上,在脚本中我们绘制主角的血条以及名称。NPC.csusingUnityEngine;usingSystem.Collections;publicclassNPC:MonoBehaviour{//主摄像机对象privateCameracamera;//NPC名称privatestringname="我是雨松MOMO";//主角对象GameObjecthero;//NPC模型高度floatnpcHe
4、ight;//红色血条贴图publicTexture2Dblood_red;//黑色血条贴图publicTexture2Dblood_black;//默认NPC血值privateintHP=100;voidStart(){//根据Tag得到主角对象hero=GameObject.FindGameObjectWithTag("Player");//得到摄像机对象camera=Camera.main;//注解1//得到模型原始高度floatsize_y=collider.bounds.size.y;//得到模型缩放比例floatscal_y=transform.localScale.y;//它
5、们的乘积就是高度npcHeight=(size_y*scal_y);}voidUpdate(){//保持NPC一直面朝主角transform.LookAt(hero.transform);}voidOnGUI(){//得到NPC头顶在3D世界中的坐标//默认NPC坐标点在脚底下,所以这里加上npcHeight它模型的高度即可Vector3worldPosition=newVector3(transform.position.x,transform.position.y+npcHeight,transform.position.z);//根据NPC头顶的3D坐标换算成它在2D屏幕中的坐标Ve
6、ctor2position=camera.WorldToScreenPoint(worldPosition);//得到真实NPC头顶的2D坐标position=newVector2(position.x,Screen.height-position.y);//注解2//计算出血条的宽高Vector2bloodSize=GUI.skin.label.CalcSize(newGUIContent(blood_red));//通过血值计算红色血条显示区域intblood_width=blood_red.width*HP/100;//先绘制黑色血条GUI.DrawTexture(newRect(p
7、osition.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);//注解3/
此文档下载收益归作者所有