using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class HealthBar : MonoBehaviour {

public float HealthPoint
{
get
{
return m_Slider.value;
}
set
{
m_Slider.value = value;
}
}

public float MaxHealthPoint
{
get
{
return m_Slider.maxValue;
}
set
{
m_Slider.maxValue = value;
}
}

void Start()
{
if (Canvas == null) Debug.LogError("Please set a canvas for health bar.");
m_SliderRectTransform = gameObject.GetComponent<Slider>().transform as RectTransform;
//transform.parent = Canvas.transform;
transform.SetParent(Canvas.transform);
// 获取物体高度 https://blog.csdn.net/haobaworenle/article/details/53898221
m_ObjectHeight = FollowTarget.GetComponent<MeshRenderer>().bounds.size.y;
Debug.Log("object height." + m_ObjectHeight);
m_Slider = gameObject.GetComponent<Slider>();
}

void Update()
{
UpdateHealthBarPosition();
}

private void LateUpdate()
{
UpdateHealthBarColor();
}

void UpdateHealthBarPosition()
{
Vector3 worldPosition = new Vector3(FollowTarget.transform.position.x,
FollowTarget.transform.position.y + m_ObjectHeight, FollowTarget.transform.position.z);
// 根据NPC头顶的3D坐标换算成它在2D屏幕中的坐标
Vector2 position = Camera.main.WorldToScreenPoint(worldPosition);
m_SliderRectTransform.position = position;
}

void UpdateHealthBarColor()
{
if (m_Slider.value < m_Slider.maxValue * 0.5f)
{
m_FillImage.color = Color.red;
}
else
{
m_FillImage.color = Color.green;
}
if (m_Slider.value <= 0)
{
Debug.Log(gameObject.name + " is dead");
}
}

public Canvas Canvas;
public GameObject FollowTarget; // 血条跟踪的对象
private RectTransform m_SliderRectTransform;
private Slider m_Slider;

[SerializeField] private Image m_FillImage;
private float m_ObjectHeight;

UGUI血条的更多相关文章

  1. UGUI血条跟随

    定义常量 public class Content { //当前UI分辨率 public const float UI_Width = 1366f; public const float UI_Hei ...

  2. Unity UGUI实现分段式血条

    我们可以看到像英雄联盟等游戏里英雄头顶的血条显示并非是纯色的,而是根据血量的多少而显示一定量的格子,这种方式明显是比较友好.比较美观的,事实上我们的游戏里面也想实现这样的效果,那该怎么办呢?根据血量的 ...

  3. UGUI之Slider使用,制作血条

    用Slider来控制Cube旋转 Slider是滑动条.

  4. Unity UGUI HUD 怪物血条实现

    首先做一个血条,创建一个名为Follow3DObject的脚本添加到血条控件上. Follow3DObject.cs的代码如下: using UnityEngine; using System.Col ...

  5. unity如何显示血条(不使用NGUI)

    用unity本身自带的功能,如何显示血条? 显示血条,从资源最小化的角度,只要把一个像素的色点放大成一个矩形就足够,三个不同颜色的矩形,分别显示前景色,背景色,填充色,这样会消耗最少的显存资源. un ...

  6. unity制作简单血条

    学习Unity已经10天了,也没发现有什么长进,真的急.昨天仿着官方Demo做了个射击游戏轮廓,其中需要给每个怪做一个血条. 搜了一些,挺复杂的,用NGUI或者UGUI,外加很长的代码...不过还是找 ...

  7. Shader实例:NGUI制作网格样式血条

    效果: 思路: 1.算出正确的uv去采样过滤图,上一篇文章说的很明白了.Shader实例:NGUI图集中的UISprite正确使用Shader的方法 2.用当前血量占总血量的百分比来设置shader中 ...

  8. UE4 使用UGM制作血条

    声明:本文是自己做的项目,可能不是最好的方法,或有错误使用方式.各位不喜勿喷! HP进度 HP背景 将上面的资源拖到UE4中(使用UE4自带的颜色也可实现效果,具体参考官方教程 https://doc ...

  9. Unity3D人物头顶名称与血条更新与绘制

    using UnityEngine; using System.Collections; public class NPC : MonoBehaviour { //主摄像机对象 private Cam ...

随机推荐

  1. mysql分库 分页查询

    Mysql海量数据分表分库如何列表分页? 1.现在使用ElasticSearch了.基于Lucene的解决方案 2.必须将mysql里的数据写入到类似hbase这样的分布式数据库,查询快.但分页.查询 ...

  2. JQuery 数组获取和删除元素

    <script> var target = []; target [0] = "aaa000"; target [1] = "bbb111"; ta ...

  3. 算法笔记--次小生成树 && 次短路 && k 短路

    1.次小生成树 非严格次小生成树:边权和小于等于最小生成树的边权和 严格次小生成树:    边权和小于最小生成树的边权和 算法:先建好最小生成树,然后对于每条不在最小生成树上的边(u,v,w)如果我们 ...

  4. ElasticSearch改造研报查询实践

    背景: 1,系统简介:通过人工解读研报然后获取并录入研报分类及摘要等信息,系统通过摘要等信息来获得该研报的URI 2,现有实现:老系统使用MSSQL存储摘要等信息,并将不同的关键字分解为不同字段来提供 ...

  5. SQLyog 连接主机的时候出现错误

    这个 连接主机的时候出现: 这个时候打开cmd 找到mysql 的bin目录 输入 mysqld  -nt -remove  即可   直接登录,注意这里的d代表的是服务端 接下来就可以不用输入密码直 ...

  6. Jupyter Notebook 修改默认打开的文件夹的位置

    初次使用Jupyter Notebook,确实好用啊!!,又好看又好用,不过还是遇到了一个问题,安装好之后,打开Jupyter Notebook 的时候,默认的文件夹的位置是C盘下面的XXX目录,但是 ...

  7. redis 高可用

    Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实 ...

  8. Azure中block和Page的比较 Azure: Did You Know? Block vs Page Blobs

    Azure storage service supports two types of blobs (blob, or BLOB, stand for Binary Large OBject, i.e ...

  9. angular2学习笔记3

    一.项目搭建 二.生成首页的4个tab页面 三.运行部署及配置

  10. 【 P3952】 时间复杂度 大模拟题解

    题目链接 完全模拟 1.模拟结果 当我们的模拟程序执行结束时,直接执行模拟结果函数,用于比对我们的结果和数据给出的结果. bool yes(char a[],char b[]) { ;i<=;+ ...