制作Unity中的单位血条
本文章用于记录Unity的学习过程,如有疑问,欢迎交流。
1.血条的显示
    在Unity场景中创建空物体,然后新建两个Image(图片),当然只用一个也行,一个作为填充来显示血量,一个作为血条的外框。
    

然后在Unit上添加Slider组件
    并将Transition和Navigation均设为None
    
    将Fill(血条背景)拖拽到 Fill Rect
    
    之后应该这样
    
    之后就可以通过下方的Value 来控制填充的显示
    
    
    可以将Fill设置为红色
    
也可适当添加UI
    
    可以通过设置Slider 的最大值和最小值(一般都是0),来直接以整数来显示血条,可以避免区间在0-1是以小数比例来显示血条,
避免了不必要的麻烦和计算
    
    选中Whole Number后,可以将Value限制为整数
    
2.脚本
    要实现血条,从面向对象角度来说只至少需要两个脚本,控制血条显示的脚本和单位的血量等基本信息的类
    新建脚本HealthBar
血条脚本的作用仅仅是显示和更新血量
public class HealthBar : MonoBehaviour
{
    public Slider slider;
    public void SetMaxHeath(int health)     //设置最大血量
    {
        slider.maxValue = health;
        slider.value = health;
    }
    public void SetHealth(int health)       //刷新血量
    {
        slider.value = health;
    }
}
然后是单位脚本Unit(类)
目前该单位只包含血量相关信息
public class Unit : MonoBehaviour
{
    public int maxHealth = 100;     //最大血量
    public int currentHealth;       //当前血量
    public HealthBar healthBar;     //声明一个HealthBar类
    private void Start()
    {
        currentHealth = maxHealth;  //初始化血量
        healthBar.SetMaxHeath(maxHealth);   //刷新血量显示
    }
    private void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            TakeDamage(20);
        }
    }
    private void TakeDamage(int damage)     //受伤方法
    {
        if (currentHealth >= damage && currentHealth > 0)
        {
            currentHealth -= damage;
        }
        healthBar.SetHealth(currentHealth); //刷新血量显示
    }
}
然后将对应的血条搭载到Unit上
    
运行后每按一次空格血量便会减少20
    
3.血条颜色渐变
    若想实现血量充足时为绿色,中等为黄色,少量为红色
可以使用 Gradient 类,该类能够动态控制颜色
    在HealthBar脚本中声明一个Gradient
//public class HealthBar : MonoBehaviour
//{
   // public Slider slider;
    public Gradient gradient;
    //public void SetMaxHeath(int health)
    //{
        //slider.maxValue = health;
        //slider.value = health;
    //}
    //public void SetHealth(int health)
    //{
        //slider.value = health;
    //}
//}
这样便能修改颜色渐变
注意:声明该类仅仅是有一个能够输入的数据,改变颜色还需要相应的方法
    
    点击Gradient打开
这里存在Blend和Fixed两种模式
    
    
    根据喜好选择即可,这样设置后血条就会呈现以上渐变效果
    然后是代码
//public class HealthBar : MonoBehaviour
//{
    //public Slider slider;
    public Gradient gradient;       //声明Gradient,在Inspector面板可对其赋值
    public Image fill;             //声明填充图形,用于修改所需的填充颜色
    //public void SetMaxHeath(int health)
    //{
        //slider.maxValue = health;
        //slider.value = health;
        fill.color = gradient.Evaluate(1f);     //填充颜色为1f,就是满血
    //}
    //public void SetHealth(int health)
    //{
        //slider.value = health;
        fill.color = gradient.Evaluate(slider.normalizedValue);//填充颜色为slider的值映射到0-1,就是当前血量百分比
    //}
//}
注意:
gradient.Evaluate(float value)会根据给定的值,来计算对应的颜色
后面value的值限制在 0 — 1 之间,其实就是根据输入来百分比计算对应颜色
例如剩余50滴血,总血量100,这里value就应该为 50/100 为0.5,会返回剩余百分之50血量时 gradient 中对应的颜色
4.血条的显示方式
    新建一个方块视为一个单位
4.1显示在HUD上
    无需多余修改,在Canvas移动位置即可
    
4.2.显示在单位上,可以在头上也可以在脚下
    将 HealthBar 所在的画布(Canvas)的渲染模式修改为World Space
    
这样画布就会成为可移动的物体
同时适当修改Canvas大小
    
    然后将Canvas拖拽到Unit下成为子物体
    
然后需要让血条始终面向摄像机
创建脚本BillBoard
搭载到Canvas上
public class BillBoard : MonoBehaviour
{
    public Transform cam;   //需要朝向的摄像机
    void LateUpdate()
    {
        transform.LookAt(transform.position + cam.forward);
    }
}
这里采用 LateUpdate() ,若为其它Update(),会在相机运动时同时计算血条位置,会发生抖动
应在计算完摄像机位置之后再计算血条位置
制作Unity中的单位血条的更多相关文章
- Unity UGUI HUD 怪物血条实现
		首先做一个血条,创建一个名为Follow3DObject的脚本添加到血条控件上. Follow3DObject.cs的代码如下: using UnityEngine; using System.Col ... 
- unity制作简单血条
		学习Unity已经10天了,也没发现有什么长进,真的急.昨天仿着官方Demo做了个射击游戏轮廓,其中需要给每个怪做一个血条. 搜了一些,挺复杂的,用NGUI或者UGUI,外加很长的代码...不过还是找 ... 
- Unity中制作血条2.0
		##1.血量显示 不必像之前那样添加Slider组件 直接创建Image 在添加Source Image之后,将Image Type 修改为Filled 通过修改Fill Mode就可以显示不同效果 ... 
- Unity NGUI弧形血条的制作
		unity版本:4.6 NGUI版本:3.6. (转载请注明参考链接及作者) 参考链接:http://www.cnblogs.com/louissong/p/3841656.html,作者:博客园 L ... 
- Unity NGUI 血条制作
		NGUI 血条制作步骤 实现过程: 模拟血条的变化当点击按钮Button是血条会实时发生变化. 1.向Unity中导入NGUI2.6.3.unitypackage 点击create your ui 后 ... 
- 关于Unity中NGUI的3D角色血条的实现
		首先要到Unity的Assets Store里面去下载一个扩展的Package叫NGUI HUD Text v1.13(81),注意如果没有安装NGUI就必须先安装NGUI插件,否则会用不了,因为HU ... 
- unity如何显示血条(不使用NGUI)
		用unity本身自带的功能,如何显示血条? 显示血条,从资源最小化的角度,只要把一个像素的色点放大成一个矩形就足够,三个不同颜色的矩形,分别显示前景色,背景色,填充色,这样会消耗最少的显存资源. un ... 
- [Unity]制作游戏中名字板的过程记录
		先大概说一下需求: 1 每个模型上都要有名字板:人.怪.npc等等. 2 名字板上会显示:名字(文字).血条(图片)等 3 因为是透视相机,名字板离得太近会变得超大,且主角移动,名字板的位置相对于相机 ... 
- unity  中UGUI制作滚动条视图效果(按钮)
		1.在unity中创建一个Image作为滚动条视图的背景: 2.在Image下创建一个空物体,在空物体下创建unity自带的Scroll View组件: 3.对滑动条视图的子物体进行调整: 4.添加滚 ... 
随机推荐
- Linux-timedatectl使用
			Linux下使用timedatectl命令时间时区操作详解 timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系 ... 
- 5月14日 python学习总结 视图、触发器、事务、存储过程、函数、流程控制、索引
			一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view t ... 
- Spring核心思想:IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程)
			Spring有三大核心思想,分别是控制反转(IOC,Inversion Of Controller),依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect O ... 
- 面向对象编程(C++篇4)——RAII
			目录 1. 概述 2. 详论 2.1. 堆.栈.静态区 2.2. 手动管理资源的弊端 2.3. 间接使用 2.4. 自下而上的抽象 3. 总结 4. 参考 1. 概述 在前面两篇文章<面向对象编 ... 
- 由浅入深,带你用JavaScript实现响应式原理(Vue2、Vue3响应式原理)
			由浅入深,带你用JavaScript实现响应式原理 前言 为什么前端框架Vue能够做到响应式?当依赖数据发生变化时,会对页面进行自动更新,其原理还是在于对响应式数据的获取和设置进行了监听,一旦监听到数 ... 
- 【技术干货】华为云FusionInsight MRS的自研超级调度器Superior Scheduler
			Superior Scheduler是一个专门为Hadoop YARN分布式资源管理系统设计的调度引擎,是针对企业客户融合资源池,多租户的业务诉求而设计的高性能企业级调度器. Superior Sch ... 
- Dubbo 服务降级,失败重试怎么做?
			可以通过 dubbo:reference 中设置 mock="return null".mock 的值也可以修 改为 true,然后再跟接口同一个路径下实现一个 Mock 类,命名 ... 
- Java Output流写入包装问题
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); OutputStreamWriter output ... 
- MariaDB CTE公用表达式
			公用表达式(Common Table Expressions,简称CTE) Maria DB 版本为10.2.2以上的才支持 WITH 语法 CTE 介绍 WITH关键字表示公用表表达式(CTE) 它 ... 
- spring bean 容器的生命周期是什么样的?
			spring bean 容器的生命周期流程如下: 1.Spring 容器根据配置中的 bean 定义中实例化 bean. 2.Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置. 3 ... 
