Unity游戏角色血条的实现与实时反馈 您所在的位置:网站首页 游戏的血条 Unity游戏角色血条的实现与实时反馈

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

2024-06-10 20:25| 来源: 网络整理| 查看: 265

在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(); //订阅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(); } //游戏角色的行为会影响血量 private void OnCollision(Collision collision) { if(collision.gameObject.name == "Enemy") { _gameManager.HP -= 1; } } }

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

脚本中变量的挂载

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

 总结

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有