Unity游戏角色血条的实现与实时反馈

在Unity中,使用UI可以实时反映游戏角色的血量。本文提供一种实现方式,主要使用了C#语言中的事件。

实现的效果(敌人碰到角色之后角色血量减少并反映在UI上)

可以看下面的GIF展示效果

 实现的效果:当红色胶囊体(敌人)撞击到玩家角色时,画面右上角的血条减少了一部分,代表了血量的减少。PS:撞击之后人物后退并不是被撞的,而是操纵产生的

实现步骤:

UI的创建

在Unity界面添加画布,画布中添加一个图片,我这里是一个爱心代表血量,然后再添加一个滑块,滑块命名为HpSlider,具体的UI创建这里就不详细介绍了,可以参考其他创建UI的文章。创建好的UI画布如下图所示:(注意红框处的设置,我这里人物最大血量为5,所以Max Value我设置的就为5)

C#脚本的编写

GameBehavior脚本的编写

首先创建一个空的游戏对象Game Manager,再在其上挂载一个GameBehavior脚本,该脚本主要用来管理游戏中游戏对象的属性,脚本内容如下所示:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

//声明了一个委托
public delegate void HpChanged(int newValue);

public class GameBehavior : MonoBehavior
{
    //利用该委托声明了一个事件
    public static event HpChanged OnHpChanged;

    private  int _playerHP = 5;

    public int HP
    {
        get { return _playerHP; }

        set 
        { 
            _playerHP = value;
            if(OnHpChanged != null)
            {
                //回调OnHpChanged所订阅的具体方法
                OnHpChanged(_playerHP);
            }        
        }
    }
}

该脚本中主要定义了一个事件,在接下来的脚本中将订阅该事件,该事件主要与_playerHP这一属性绑定。对角色HP属性这样写法可以参考我上一篇博文。

UIBehavior脚本的编写

首先创建一个空的游戏对象UIManager,再在其上挂载一个UIBehaviorr脚本,该脚本主要用来管理游戏中的UI部分,内容如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIBehavior : MonoBehaviour
{
    //创建一个滑块
    public Slider HpSlider;
    public GameBehavior gameBehavior;
    
    private void Start()
    {
        gameBehavior = GameObject.Find("Game Manager").GetComponent<GameBehavior>();
        //订阅GamenBehavior脚本中的事件,事件处理器为UpdateHpSliderValue方法
        GameBehavior.OnHpChanged += UpdateHpSliderValue;
        //将滑块的值初始化为血量的最大值
        HpSlider.value = HpSlider.maxValue;
    }
    private void UpdateHpSliderValue(int newValue)
    {
        //更新滑块的值
        HpSlider.value=newValue;
    }
}

该脚本主要负责将事件的拥有者GameBehavior类的事件OnHpChanged与事件的订阅者UIBehavior联系起来,UIBehavior的事件处理器为UpdateHpSliderValue方法,该方法用来改变UI中HpSlider的值。因为角色一开始的血量为满,所以不要忘了将滑块的值初始化为最大值。

PlayerBehavior的编写

最后是PlayerBehavior的编写,游戏角色的行为改变血量值,PlayerBehavior的编写如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerBehavior : MonoBehaviour
{
    private GameBehavior _gameManager;
    
    private void Start()
    {
        _gameManager = GameObject.Find("Game Manager").GetComponent<GameBehavior>();    
    }
    //游戏角色的行为会影响血量
    private void OnCollision(Collision collision)
    {
        if(collision.gameObject.name == "Enemy")
        {
            _gameManager.HP -= 1;
        }
    }
}

代码的主要逻辑就是编写角色的哪些行为会影响血量,通过_gameManager来在GameBehavior中进行反馈。本代码中的逻辑是当敌人碰撞到了角色,角色掉血,利用的是触发器,当然读者可以有自己的逻辑。

脚本中变量的挂载

最后一步将PlayerBehavior脚本挂载到Player上,此外还需要将开头创建的画布中的滑块HpSlider挂载到UIBehavior中的HpSlider上,如下图所示:

 总结

本文主要利用的是C#中的事件来在Unity的UI上实时反馈游戏角色的血量变化,希望对大家有所帮助,如有错误欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_68117303/article/details/132275312