【UGUI】为射击游戏添加动态显示的分数和血量到UI界面
项目背景
在这个项目中,我们希望实现一个简单的游戏系统,其中玩家可以通过击中目标来获得分数,同时通过与怪物碰撞来减少血量。分数和血量需要在游戏界面上实时显示,以便玩家能够随时了解自己的状态。
技术实现
1. 静态变量的使用
在Unity中,静态变量是一种全局变量,可以在整个程序中共享。在本项目中,我们使用静态变量来存储分数和血量,这样可以在不同的脚本中方便地访问和修改这些数据。
public static int Score; // 记录分数
public static float Blood; // 记录血量
2. UI元素的设置
为了在界面上显示分数和血量,我们使用了TextMeshProUGUI
和Slider
组件。TextMeshProUGUI
用于显示分数,Slider
用于显示血量。
public TextMeshProUGUI ScoreUI; // 用于显示分数的UI文本组件
public Slider MyBloodUI; // 用于显示血量的滑动条组件
3. 初始化
在Start
方法中,我们对分数和血量进行了初始化,并将Slider
的最大值设置为血量的初始值。
void Start()
{
Score = 0; // 初始化分数为0
Blood = 10000; // 初始化血量为10000
MyBloodUI.maxValue = Blood; // 设置滑动条的最大值为血量的初始值
}
4. 更新UI
在Update
方法中,我们实时更新分数和血量的显示。分数通过TextMeshProUGUI
显示,血量通过Slider
显示。
void Update()
{
Debug.Log("恭喜你击中目标!加分!" + Score); // 在控制台输出当前分数
ScoreUI.text = Score.ToString(); // 将分数转换为字符串并显示在UI文本组件上
MyBloodUI.value = Blood; // 将血量值设置为滑动条的当前值
}
5. 加分和减血的逻辑
为了实现加分和减血的功能,我们定义了两个静态方法AddScore
和SubBlood
。当玩家击中目标时,调用AddScore
方法增加分数;当玩家撞到怪物时,调用SubBlood
方法减少血量。
public static void AddScore()
{
Score += 10; // 每次击中目标增加10分
}
public static void SubBlood()
{
Blood -= 100; // 每次撞到怪物减少100血量
Debug.Log("减血了" + Blood); // 在控制台输出当前血量
}
完整代码示例
以下是完整的代码示例,每一行都加上了站在业务逻辑角度的注释:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class ShScoreSystem : MonoBehaviour
{
public static int Score; // 记录分数的全局静态变量
public static float Blood; // 记录血量的全局静态变量
public TextMeshProUGUI ScoreUI; // 用于显示分数的UI文本组件
public Slider MyBloodUI; // 用于显示血量的滑动条组件
void Start()
{
Score = 0; // 初始化分数为0
Blood = 10000; // 初始化血量为10000
MyBloodUI.maxValue = Blood; // 设置滑动条的最大值为血量的初始值
}
void Update()
{
Debug.Log("恭喜你击中目标!加分!" + Score); // 在控制台输出当前分数
ScoreUI.text = Score.ToString(); // 将分数转换为字符串并显示在UI文本组件上
MyBloodUI.value = Blood; // 将血量值设置为滑动条的当前值
}
public static void AddScore()
{
Score += 10; // 每次击中目标增加10分
}
public static void SubBlood()
{
Blood -= 100; // 每次撞到怪物减少100血量
Debug.Log("减血了" + Blood); // 在控制台输出当前血量
}
}