学习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制作简单血条的更多相关文章

  1. Unity NGUI弧形血条的制作

    unity版本:4.6 NGUI版本:3.6. (转载请注明参考链接及作者) 参考链接:http://www.cnblogs.com/louissong/p/3841656.html,作者:博客园 L ...

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

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

  3. 【FairyGUI & Unity】实现血条UI扣血与加血的缓动效果

    组件设计 创建一个进度条组件,作为血条. bar是实际血量条 DownBar是扣血缓动背景图层 UpBar是加血缓动背景图层 LowBar是低血量变色(和控制器配合,本文不讲) n11组合是血量参考线 ...

  4. Unity NGUI 血条制作

    NGUI 血条制作步骤 实现过程: 模拟血条的变化当点击按钮Button是血条会实时发生变化. 1.向Unity中导入NGUI2.6.3.unitypackage 点击create your ui 后 ...

  5. 制作Unity中的单位血条

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

  6. Unity中制作血条2.0

    ##1.血量显示 不必像之前那样添加Slider组件 直接创建Image 在添加Source Image之后,将Image Type 修改为Filled 通过修改Fill Mode就可以显示不同效果 ...

  7. Unity UGUI HUD 怪物血条实现

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

  8. Unity UGUI实现分段式血条

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

  9. 关于Unity中NGUI的3D角色血条的实现

    首先要到Unity的Assets Store里面去下载一个扩展的Package叫NGUI HUD Text v1.13(81),注意如果没有安装NGUI就必须先安装NGUI插件,否则会用不了,因为HU ...

随机推荐

  1. perf原理再看

    vim ./arch/x86/kernel/hw_breakpoint.c perf如何控制采样的频率 perf采样不同的事件,得到的不是一样 cycles: 向PMU中增加不同的函数,增加不同 使用 ...

  2. TCP的挥手协议和握手协议

    三次握手协议:三次握手协议的主要过程是交互彼此之间的初始序列号,如果没有确认的ACK帧可以么?肯定是可以的 client A -------> server B client A 发送了自己的初 ...

  3. SQL 取数值小数后两位,但不四舍五入

    select round('1.67789',2,1) /* 1.67*/

  4. SRM709 div1 Xscoregame(状压dp)

    题目大意: 给定一个序列a,包含n个数(n<=15),每个数的大小小于等于50 初始时x = 0,让你每次选a中的一个数y,使得x = x + x^y 问如何安排选择的次序,使得最终结果最大. ...

  5. SPOJ HIGH(生成树计数,高斯消元求行列式)

    HIGH - Highways no tags  In some countries building highways takes a lot of time... Maybe that's bec ...

  6. [POI2007]ATR-Tourist Attractions

    题目大意:一个无向图,从$1$到$n$,要求必须经过$2,3,\dots,k+1$,给出一些限制关系,要求在经过$v\leq k+1$之前必须经过$u\leq k+1$,求最短路 题解:预处理出$1\ ...

  7. 周记【距gdoi:105天】

    月考果然很可怕,跪得要死. 然后这周搞(被老师坑)去搞某个程序,我和蔡大神和kpm分工搞(结果最后我也只是变成全程嘴炮). 这周有点闷,明明想快乐点但还是…… 进度慢得要死,后缀数组略神的东西.模仿了 ...

  8. 洛谷 P1268 树的重量 解题报告

    P1268 树的重量 题目描述 树可以用来表示物种之间的进化关系.一棵"进化树"是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题 ...

  9. [NOI2003] 文本编辑器 (splay)

    复制炸格式了,就不贴题面了 [NOI2003] 文本编辑器 Solution 对于光标的移动,我们只要记录一下现在在哪里就可以了 Insert操作:手动维护中序遍历结果,即每次取中点像线段树一样一样递 ...

  10. Educational Codeforces Round 55:B. Vova and Trophies

    B. Vova and Trophies 题目链接:https://codeforc.es/contest/1082/problem/B 题意: 给出一个“GS”串,有一次交换两个字母的机会,问最大的 ...