当前位置: 首页 > article >正文

【UGUI】为射击游戏添加动态显示的分数和血量到UI界面

 

项目背景

在这个项目中,我们希望实现一个简单的游戏系统,其中玩家可以通过击中目标来获得分数,同时通过与怪物碰撞来减少血量。分数和血量需要在游戏界面上实时显示,以便玩家能够随时了解自己的状态。

技术实现
1. 静态变量的使用

在Unity中,静态变量是一种全局变量,可以在整个程序中共享。在本项目中,我们使用静态变量来存储分数和血量,这样可以在不同的脚本中方便地访问和修改这些数据。

public static int Score; // 记录分数
public static float Blood; // 记录血量
2. UI元素的设置

为了在界面上显示分数和血量,我们使用了TextMeshProUGUISlider组件。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. 加分和减血的逻辑

为了实现加分和减血的功能,我们定义了两个静态方法AddScoreSubBlood。当玩家击中目标时,调用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); // 在控制台输出当前血量
    }
}


http://www.kler.cn/a/376004.html

相关文章:

  • wx.setNavigationBarColor动态设置导航栏颜色无效(亲测有效)
  • STM32中ARR(自动重装寄存器)为什么要减1
  • 淘宝详情API接口全解析:获取与高效运用
  • 数据挖掘(四)
  • 慢即是快,少即是多
  • 坏块处理 ORA-01578: ORACLE data block corrupted (file # 3, block # 152588)
  • 跟我学C++中级篇——内联的语义
  • qt QDialog详解
  • static全局/局部变量/函数和普通全局/局部变量/函数的区别
  • 数据结构初识及顺序表详解
  • Mysql 8.4.3LTS 的离线部署
  • vue中时间插件moment
  • Java中的JVM(Java虚拟机)是什么?
  • 【OD-支持在线评测】电脑病毒感染(200分)
  • Android版本适配策略
  • 模式匹配类型
  • 使用AWS Redshift从AWS MSK中读取数据
  • Dropout 技术:防止神经网络过拟合的有效手段
  • 20241029软考架构-------软考案例9答案
  • AI 大模型的发展趋势是怎样的?
  • 量子神经网络(Quantum Neural Network):结合量子计算的 AI 新探索
  • cv.dnn.blobFromImage参数详解
  • Unity项目使用的.net版本
  • 【网络】HTTP(超文本传输协议)详解
  • Java面试题十五
  • 基于大数据的智能家居销量数据分析