版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leonardo_Davinci/article/details/78369184
方法一:(推荐)
结果:血条跟随目标物体移动,血条一直面向摄像机
步骤一:
1.制作一个血条(Image)的预设体;
2.在Canvas 中添加一个Plane,作为血条的父物体;
3.(1,2)准备工作做完了,思路:在生成游戏物体时,生成血条,把游戏物体的3D坐标转换为屏幕坐标,让血条的坐标等于游戏物体的屏幕坐标,如果要修改,可以添加一些偏移,
代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class EnemyState : MonoBehaviour {
//声明你需要用到的变量
private GameObject HP_imageGameobject;
private GameObject HP_imageGameObjectClone;
private Transform HP_Parent;
private Vector3 EnemySceenPosition;
void Start () {
//获取复制HP的预制体(prefab)
HP_imageGameobject=Resources.Load<GameObject>("Enemys/Image_blod");
//获取放HP血条的父物体
HP_Parent = GameObject.FindWithTag("HPPosition").transform;
//把游戏物体的世界坐标转换为屏幕坐标
EnemySceenPosition=Camera.main.WorldToScreenPoint(transform.position);
//创建一个Clone血条图片
HP_imageGameObjectClone = Instantiate(HP_imageGameobject,EnemySceenPosition, Quaternion.identity);
//设置血条的父物体
HP_imageGameObjectClone.transform.SetParent(HP_Parent);
}
void Update () {
//没帧都去执行使血条跟随物体
PHFollowEnemy();
}
//血条放置到Canvas另一个Plane中 并跟随物体移动
void PHFollowEnemy()
{
//把物体坐标转换为屏幕坐标,修改偏移量
EnemySceenPosition= Camera.main.WorldToScreenPoint(transform.position)+new Vector3(0,50,0);
HP_imageGameObjectClone.transform.position = EnemySceenPosition;
}
}
方法二:(推荐)
和方法一相似,只是把血条的坐标转换到3D场景中 ,和游戏物体的坐标相等,之后微调,
方法三:
如果血条不一定面向摄像机,可以把(用Canvas单独做血条)血条设置为游戏物体的子物体;