「Unity入门」Step by step的太空清理垃圾游戏Part 7-1:撞击损失生命值

许多常见的RPG等游戏中,玩家操控的角色都有“健康值”这一属性,也被通俗叫做“血条”。当玩家的角色受到伤害时,会损失一定的健康值并反映到血条上来。我们的飞船同样也需要这样一个用户界面来反映当前的健康状态。当飞船撞击到太空中不可收集的物体时,如卫星、行星等,就会损失生命值,并且发出闪烁的灯光预警。

一般来说,血条可能在每个游戏角色正上方、跟随角色移动,比如大多数PvP游戏。也可能只显示第一视角控制角色的健康值,固定在屏幕上的某个位置。甚至还有环形、水平、竖直等不同位置。

Unity Asset Store中的健康条样例

为了节省我们手动绘制、设计用户界面的时间,我们依然去往Unity Asset Store寻找合适(且免费)的健康值系统UI。

  • 打开Unity Asset Store,搜索:Health Bar或者类似关键词

最后我选择了这个风格的血条:Simple Heart Health System | GUI Tools | Unity Asset Store:可以逐个降低生命值

  • 加入购物车后,选择“在Unity中打开”

  • 在Unity编辑器中下载(Download)、导入(Import)

现在,你的资产栏中应该出现了一个叫做“HealthHeartSystem”的文件夹,双击打开后,就会出现如下内容:

这个文件本身有自己预设的使用方式,可能会更加简便。但我们为了自己完成所有流程,本次只使用他的图像。感兴趣的同学可以通过阅读readme和他的代码文件来了解如何使用。

双击打开Graphics文件夹,发现其中包括红色(Mini-heart_0)和灰色(Mini-heart_1)的心,且两个的属性都为Sprite,自然而然的想到可以将它们作为源图像放置到UI中的Image上。

  • 选中场景栏中的Canvas,右键建立新的UI – Panel,重命名为Health Panel

    • 这个Panel用来显示生命值,方便我们统一移动、修改

  • 调整大小和位置,可以将它放在UI的左上角

  • 在Health Panel中选择新建UI – Image在Unity编辑器中下载(Download)、导入(Import)

    • 每个Image代表一个心的占位符

  • 同样调整大小和位置。

  • 点击Image,将资源栏中Mini-heart_0图片拖拽到Source Image那一栏中,图片就会变成红心的样子啦

(Source Image = mini-heart_0)

  • 同样的方式,复制几个心形,来作为血条

(最终场景栏的结构与UI

创建好基本的健康条后,开始进行“碰撞后掉血”这一操作。每当飞船与无法被收集的物体碰撞时,都会将一个红心image变灰。

这里涉及到三步:

  1. 碰撞探测OnCollisionEnter

  2. 比较碰撞物体

  3. 修改Source Image的sprite

  • 新建Script,命名为Health,双击打开

  • 首先导入UI这个workspace

using UnityEngine.UI;
  • 创建公开变量:

    • Image[]:用来存放所有的红心

    • Sprite:来保存灰心(损失生命值后)的图片

public Image[] hearts;

public Sprite gray;
  • 首先进行碰撞探测,并比较物体的tag是否属于Moon 或 Other 

    • 否则,撞到垃圾也会导致生命降低

void OnCollisionEnter(Collision other)

   {

       if (other.gameObject.CompareTag("Moon") || other.gameObject.CompareTag("Other"))

       {

}

}
  • 如果符合条件,就将心形图像由红色改为灰色。

    • 由于hearts存储在list中,我们需要通过一个额外的变量来得到改变哪一个心形。这个值一开始为最大健康值。

public int health;      // 记录健康值 
  • 当物体碰撞时,健康值会减1,心形列表将会从末尾端开始依次变灰。

health -=1;

hearts[health].sprite = gray;
  • 一旦健康值等于零,游戏就会结束:

If (health==0){

Application.Quit();

}
  • 保存并返回编辑器。将Health拖拽到飞船上,并赋予相应的值

    • 要注意health的值要保证与用户界面上心形的数量相等。

  • 不要忘记创建Other和Moon的tag,赋予给场景中相应的物体。

点击运行,当飞船碰撞到卫星、行星等物体时,用户界面上的红心就会变黑啦。当损失掉最后一点生命值后,游戏就结束了!

如果有任何疑问或者建议,欢迎在下方留言评论哟~

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值