Unity3D小游戏——血条

0.前言

本次作业基于上一次作业“自动巡逻兵”:在主角上增加了血条,巡逻兵碰到主角会导致主角持续扣血直到主角死亡。地图上的中间一格没有巡逻兵,且主角位于此处时持续恢复血量直到满血。

1. 制作血条预制体

1. 创建一个新滑动条:在Hierarchy处右键,选择UI,选择Slider,发现多了一个Canvas和EventSystem

2. 把Canvas中的Handle Slide Area删掉,此时Canvas的内部如图所示:

3. 在Fill的Image组件中修改Color,这是血条的主色,我选择为红色

4. 在Background的Image组件中修改Color,这是血条的底色,我选择黑色

5. 在Fill Area的Rect Transform组件中把Left和Right都修改为0,否则血条不能到底和到顶

6. 在Slider的Slider组件中取消勾选Interactable,玩家不能在游戏过程中自行拖动血条的值

7. 设置血条位置:根据你想要的效果修改Canvas中的Canvas组件Render Mode,最简单的保持默认即可,其他情况可参考此处

8. 为了支持使用代码实时修改血条血量,编写脚本如下:(直接复制到名为BloodSetter的新脚本文件中即可)

using UnityEngine;
using System.Collections;
using UnityEngine.UI; // Required when Using UI elements.

public class BloodSetter : MonoBehaviour {

    public Slider mainSlider;

    public void update(float delta){
        float tmp = mainSlider.value + delta;
        if(tmp < 0f){
            tmp = 0f;
        }
        if(tmp > mainSlider.maxValue){
            tmp = mainSlider.maxValue;
        }
        mainSlider.value = tmp;
    }

    public bool isZero(){
        return mainSlider.value == 0f;
    }

    public bool isFull(){
        return mainSlider.value == mainSlider.maxValue;
    }

    public void setZero(){
        mainSlider.value = 0f;
    }

    public void setFull(){
        mainSlider.value = mainSlider.maxValue;
    }
}

9. 把以上脚本挂到Canvas上,看到Canvas的右边Inspector中多出了BloodSetter组件。把Canvas的子对象Slider拖动到Main Slider处,此时效果如图

 10. 把Canvas从Hierarchy拖动到Assert中(一般会放到Resources中),注意EventSystem不要动。

2. 使用血条预制体

以下语句可以获取到该血条

public BloodSetter bloodBar = Instantiate(Resources.Load<GameObject>("Canvas")).GetComponent<BloodSetter>();

在需要使用到血条的代码各处直接调用该血条对象的各API即可调用

3. 链接

视频

代码

原文地址:https://www.cnblogs.com/LC32/p/15740121.html