unity制作简单血条
学习Unity已经10天了,也没发现有什么长进,真的急。昨天仿着官方Demo做了个射击游戏轮廓,其中需要给每个怪做一个血条。
搜了一些,挺复杂的,用NGUI或者UGUI,外加很长的代码。。。不过还是找到了一篇简单的。
但是那一篇把所有的东西都放一起了,不太好,我在这整理分离一下。
背景:
官方Demo恶魔射手。其中每个怪都有一个EnemyHealth脚本,该脚本主要有怪物的血量等,然后有个TakeDamage()函数来计算伤害后的血量。
开始:
1、制作图片:
PS一张细长的红色图片作为血量;
2、制作一个材质球,起名为“XuetiaoMaterial”,单击这个材质球,在Inspector面板中把红色图片加进来,就成了红色的材质球了。
Inspector面板的Shader下选择Unlit/Transparent
3、创建一个Cube,放到你需要加血条的怪上,Cube作为怪的子物体。拖动成纸片子的形状,然后拖动到合适的位置即可。
4、单击这个Cube,你愿意改名就改名。把2中的材质球加到这个Cube中来,它就变成红色的了。把Cube的Collider、俩Shdow勾选掉。毕竟血条不用阴影也不用碰撞嘛。
5、在你的控制血量的脚本里加点东西,我是在EnemyHealth.cs中加的,如下:
血条贴图是一个新货,代码计算后会重新赋给Cube
public Texture2D bloodBarRed; // 血条贴图
public Transform bloodBar; // 代表血条的CUBE
另外还有:
void Start()
{
bloodBar = transform.FindChild("BloodBarCube"); //获得血条物体 bloodBarRed = new Texture2D(, ); // 新建一个贴图,用以变化后赋给Cube
bloodBarRed.wrapMode = TextureWrapMode.Clamp; // 拉伸该图
}
还有,要使血条时刻正对摄像机的:
void Update ()
{
bloodBar.LookAt(Camera.main.transform.position); // 朝向摄像机
}
下面是加入的一个更新血条的函数:
public void UpDateBloodBar()
{
float cunrrentRed = currentHealth * bloodBarRed.width / startingHealth; //直接除,会因为两个整型得到0,所以先乘以后除
for (var x = ; x < bloodBarRed.width; x++)
{ // 对每个坐标点
for (var y = ; y < bloodBarRed.height; y++)
{//循环执行y轴从0开始,y轴小于血条的宽的话执行下面,否则+
if (x < cunrrentRed)
bloodBarRed.SetPixel(x, y, Color.red); //x小于血条长度的范围涂成红色,
else
bloodBarRed.SetPixel(x, y, Color.gray); //其他部位涂成黑色
}
}
bloodBarRed.Apply(); // 应用该图
bloodBar.gameObject.renderer.material.mainTexture = bloodBarRed; // 将修改后的贴图给血条Cube }
其中 currentHealth是我EnemyHealth类中的成员变量,startingHealth也是,代表了总血量。
然后你可以在血量改变的函数中调用此函数。从而更新血条。如果有必要,你也可以将当前血量作为形参传入。
6、将脚本拖入对应的对象(需要血条的怪)中,单击该怪,在Inspector面板中,找到该脚本,把红色图片拖入bloodBarRed中,把血条Cube(该怪的子物体)拖入bloodBar即可。
运行就OK了。

致谢:
http://www.manew.com/forum.php?mod=viewthread&tid=33694&page=1
unity制作简单血条的更多相关文章
- Unity NGUI弧形血条的制作
unity版本:4.6 NGUI版本:3.6. (转载请注明参考链接及作者) 参考链接:http://www.cnblogs.com/louissong/p/3841656.html,作者:博客园 L ...
- unity如何显示血条(不使用NGUI)
用unity本身自带的功能,如何显示血条? 显示血条,从资源最小化的角度,只要把一个像素的色点放大成一个矩形就足够,三个不同颜色的矩形,分别显示前景色,背景色,填充色,这样会消耗最少的显存资源. un ...
- 【FairyGUI & Unity】实现血条UI扣血与加血的缓动效果
组件设计 创建一个进度条组件,作为血条. bar是实际血量条 DownBar是扣血缓动背景图层 UpBar是加血缓动背景图层 LowBar是低血量变色(和控制器配合,本文不讲) n11组合是血量参考线 ...
- Unity NGUI 血条制作
NGUI 血条制作步骤 实现过程: 模拟血条的变化当点击按钮Button是血条会实时发生变化. 1.向Unity中导入NGUI2.6.3.unitypackage 点击create your ui 后 ...
- 制作Unity中的单位血条
本文章用于记录Unity的学习过程,如有疑问,欢迎交流. 1.血条的显示 在Unity场景中创建空物体,然后新建两个Image(图片),当然只用一个也行,一个作为填充来显示血量,一个作为血条的外框. ...
- Unity中制作血条2.0
##1.血量显示 不必像之前那样添加Slider组件 直接创建Image 在添加Source Image之后,将Image Type 修改为Filled 通过修改Fill Mode就可以显示不同效果 ...
- Unity UGUI HUD 怪物血条实现
首先做一个血条,创建一个名为Follow3DObject的脚本添加到血条控件上. Follow3DObject.cs的代码如下: using UnityEngine; using System.Col ...
- Unity UGUI实现分段式血条
我们可以看到像英雄联盟等游戏里英雄头顶的血条显示并非是纯色的,而是根据血量的多少而显示一定量的格子,这种方式明显是比较友好.比较美观的,事实上我们的游戏里面也想实现这样的效果,那该怎么办呢?根据血量的 ...
- 关于Unity中NGUI的3D角色血条的实现
首先要到Unity的Assets Store里面去下载一个扩展的Package叫NGUI HUD Text v1.13(81),注意如果没有安装NGUI就必须先安装NGUI插件,否则会用不了,因为HU ...
随机推荐
- Flink History Job
history job的写入1. org.apache.flink.runtime.jobmanager,Object JobManagerrunJobManager中指定使用MemoryArchiv ...
- Struts2值栈
一.前言 很多事儿啊,就是“成也萧何败也萧何”,细想一些事儿心中有感,当然,感慨和本文毛关系都没有~想起之前有篇Struts2中值栈的博客还未完工,就着心中的波澜,狂咽一把~ 二.正文 博文基于:st ...
- IE6中png背景图片透明的最好处理方法
在IE6浏览器下png(24位)的图片显示是不能透明的. 1.处理办法就是用DDPngMin.js <!--[if IE 6]> <script src="js/DDPng ...
- [洛谷P3946] ことりのおやつ(小鸟的点心)
题目大意:最短路,第$i$个点原有积雪$h_i$,极限雪高$l_i$(即雪超过极限雪高就不可以行走),每秒降雪$q$,ことり速度为$1m/s$,若时间大于$g$,则输出$wtnap wa kotori ...
- fzu 2246(ac 自动机)
fzu 2246(ac 自动机) 题意: 某一天YellowStar学习了AC自动机,可以解决多模式匹配问题.YellowStart当然不会满足于此,它想进行更深入的研究. YellowStart有一 ...
- 【BZOJ 1930】 [Shoi2003]pacman 吃豆豆 最大费用最大流
如果你知道他是网络流的话你就很快会想到一个最大费用最大流的模型,然后你发现可能T,然而你发现你只用增广两次,然后你就开心的打了出来,然后发现被稠密图里spfa的丧病时间复杂度坑了,还是会T.于是我就开 ...
- Exponial~(欧拉函数)~(发呆题)
Description Everybody loves big numbers (if you do not, you might want to stop reading at this point ...
- Nginx support TCP Load balance
1. Install nginx package 2. edit nginx configuration file [root@ip- nginx]# more nginx.conf user ngi ...
- Linux引导过程
早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序.尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行 ...
- HDU1013 Digital Roots
http://acm.hdu.edu.cn/showproblem.php?pid=1013 #include<iostream> #include "cstdio" ...