欢迎来到unity学习、unity培训
这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌
项目经验总结(3)
前两天太累了,本来想写着,躺了会就第二天了。好了,废话不多说,今天就把血条和名字来写下来。
1、血条
首先是两张作为血条的图片,一条设置好想要的长度,放在下面,另一条要根据自己的总血量,然后分成那么多分,让Update实时的更新血条,然后通过OnGUI让你想要的长度除以最大血量,然后乘以现有血量,并且位置要和上一条一样,并且覆盖在上面,这样就可以是一个血条了。
我的代码:
//这是两个血条的图片
public Texture2D blood_Red;
public Texture2D blood_Black;
void OnGUI()
//血条的GUI显示
{
int blood_width = 172 * Player.HP / 20;
//这个是实时更新的血条长度
//两个血条图片的GUI
GUI.DrawTexture(new Rect(111f, 31.5f, 172, 17.7f), blood_Black);
GUI.DrawTexture(new Rect(111f, 31.5f, blood_width, 17.7f), blood_Red);
GUI.color = Color.red;
//用来设置下面在血条上的文字的颜色的
GUI.skin.label.fontSize = 12;
//用来设置下面在血条上的文字的大小的
//血条上加文字,显示血,还可以获取任务的血量,然后让血量显示在上面
GUI.Label(new Rect(114f, 31.5f, 100, 17.7f), "人血:" + Player.HP);
}
2、头顶名字
这个应该比较常用,在游戏中好多都是要有名字的,这个为了好看当然是要加载人物的头顶上了。。。算了,废话我也不多说,来说一下具体的实现吧。就是通过将在应该在游戏里的3D坐标转换成2D坐标,获取x和z的坐标,然后加上y周的高度,就可以加载你想要的地方了,估计遮掩解释很难看懂,下面看看代码吧,基本是粘上就能用的代码
我的代码:
//首先是先声明需要的对象,这里因为要用到摄像机来寻找坐标,所以声明了摄像机
private Camera camera;
//主摄像机对象
private string name = "NPC2";
//NPC名称
private float npcHeight = 1.5f;
//NPC模型高度
void Start () {
camera = Camera.main;
//通过start来寻找主摄像机
}
void OnGUI()
{
GUI.skin.label.fontSize = 20;
//这个是改变名字的大小的,因为GUI是一步一步执行的,所以每变化一次大小或颜色就要写一个
Vector3 worldPosition = new Vector3(transform.position.x, transform.position.y + npcHeight, transform.position.z);
Vector2 position = camera.WorldToScreenPoint(worldPosition);
//根据NPC头顶的3D坐标换算成它在2D屏幕中的坐标
position = new Vector2(position.x, Screen.height - position.y);
//得到真实NPC头顶的2D坐标
Vector2 nameSize = GUI.skin.label.CalcSize(new GUIContent(name));
//计算NPC名称的宽高
GUI.color = Color.green;
//设置显示颜色为绿色
//绘制NPC名称
GUI.Label(new Rect(position.x - (nameSize.x / 2), position.y - nameSize.y - 20, nameSize.x, nameSize.y), name);
GUI.color = Color.white;
//最后还原颜色,防止下一次执行时前面的颜色有变化
}
好了
,老样子,碎叫去了,困死了,明天继续来