UGUI血条
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血条的更多相关文章
- UGUI血条跟随
定义常量 public class Content { //当前UI分辨率 public const float UI_Width = 1366f; public const float UI_Hei ...
- Unity UGUI实现分段式血条
我们可以看到像英雄联盟等游戏里英雄头顶的血条显示并非是纯色的,而是根据血量的多少而显示一定量的格子,这种方式明显是比较友好.比较美观的,事实上我们的游戏里面也想实现这样的效果,那该怎么办呢?根据血量的 ...
- UGUI之Slider使用,制作血条
用Slider来控制Cube旋转 Slider是滑动条.
- Unity UGUI HUD 怪物血条实现
首先做一个血条,创建一个名为Follow3DObject的脚本添加到血条控件上. Follow3DObject.cs的代码如下: using UnityEngine; using System.Col ...
- unity如何显示血条(不使用NGUI)
用unity本身自带的功能,如何显示血条? 显示血条,从资源最小化的角度,只要把一个像素的色点放大成一个矩形就足够,三个不同颜色的矩形,分别显示前景色,背景色,填充色,这样会消耗最少的显存资源. un ...
- unity制作简单血条
学习Unity已经10天了,也没发现有什么长进,真的急.昨天仿着官方Demo做了个射击游戏轮廓,其中需要给每个怪做一个血条. 搜了一些,挺复杂的,用NGUI或者UGUI,外加很长的代码...不过还是找 ...
- Shader实例:NGUI制作网格样式血条
效果: 思路: 1.算出正确的uv去采样过滤图,上一篇文章说的很明白了.Shader实例:NGUI图集中的UISprite正确使用Shader的方法 2.用当前血量占总血量的百分比来设置shader中 ...
- UE4 使用UGM制作血条
声明:本文是自己做的项目,可能不是最好的方法,或有错误使用方式.各位不喜勿喷! HP进度 HP背景 将上面的资源拖到UE4中(使用UE4自带的颜色也可实现效果,具体参考官方教程 https://doc ...
- Unity3D人物头顶名称与血条更新与绘制
using UnityEngine; using System.Collections; public class NPC : MonoBehaviour { //主摄像机对象 private Cam ...
随机推荐
- Crashing Robots(水题,模拟)
1020: Crashing Robots 时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte 总提交: 207 测试通过:101 ...
- 高阶函数 map、reduce、filter、sort 函数计算
map() 循环遍历,返回一个新数组 ,reduce()把结果继续和序列的下一个元素做累积计算 把一个字符串13579先变成Array--[1, 3, 5, 7, 9],再利用reduce()就可以写 ...
- c++ 线程间通信方式
一:两个进程间的两个线程通信,相当于进程间通信 二:一个进程中的两个线程间通信 通信方式: 1.互斥锁 mutex; lock_guard (在构造函数里加锁,在析构函数里解锁) unique_loc ...
- sublime和vscode 格式化Json ——两步走
目录 1.问题来源 2.sublime安装插件方式 3.使用方式 4.扩展:对于软件vscode 1.问题来源 最近做数据匹配任务,需要生成很多json文件,但是每个json文件又太大,想要逐字段(k ...
- what API can do
APIs for manipulating documents loaded into the browser. The most obvious example is the DOM (Docume ...
- async-await用法
转载:https://segmentfault.com/a/1190000011526612?utm_source=tag-newest
- 控制dom 加载成功后事件
- .Net mvc 上传多文件
.net mvc 上传多文件有很多种方式,我的方法只是其中一种, 仅供参考,我主要是注重参数传递的过程,后面文件保存的地方省略.. 调试环境 vs2017 控制器代码: [HttpPost] publ ...
- Maven 插件打包部署项目
clean install -Dmaven.test.skip=true:打包工具 clean package
- SQL-在Update中进行子查询和左联查询
以下总结源自后边的三个参考思索和测试而来: 我们有一张行政区划表,为了查询速度的优化,我们需要在这张表中,将每个乡镇的记录中写入其所属的省.市.县, 表如下: 当然,我们可以使用游标或在存储过程中使用 ...