欢迎来到unity学习社区
今天的内容是NPC头上的血条与名字的设置
具体分析,NPC血条的显示需要用到Vector2(二维向量)与Vector3(三维向量)的转换,用到类方法worldToScreenPoint
下面举个例子以此来说明:
代码及注释如下
//主摄像机对象
private Camera camera;
//NPC名称
public string name="埃克斯";
//主角对象
GameObject hero;
//NPC模型高度
float npcHeight;
bool flag = false;
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)+0.5f ;
}
void Update()
{
if (hero != null)
{
//保持NPC一直面朝主角
transform.LookAt(hero.transform);
if (Vector3.Distance(transform.position, hero.transform.position) < 3f)
{
flag = true;
}
else
{
flag = false;
}
}
}
void OnGUI()
{
if (flag){
//得到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);
//计算NPC名称的宽高
Vector2 nameSize = GUI.skin.label.CalcSize(new GUIContent(name));
//设置显示颜色为黄色
GUI.skin.label.fontSize = 20;
GUI.color = Color.green;
//绘制NPC名称
GUI.Label(new Rect(position.x - (nameSize.x / 2), position.y - nameSize.y, 100, 30), name);
}
}
本文介绍在Unity中如何设置NPC头上的血条和名字显示。通过使用Camera的世界到屏幕点转换方法worldToScreenPoint,结合Vector2和Vector3的转换,实现NPC血条和名字在屏幕上正确定位。示例代码详细展示了如何实现这一功能。
5051

被折叠的 条评论
为什么被折叠?



