13.游戏界面

  1. 13.游戏场景-游戏界面
    1. 13.1 拼面板
      1. 查看游戏界面示例图
      2. 把canvas预制体拉一个出来,创建游戏界面对象,面板中包括标题文本,血量底图和血量图,剩余波数金币文本,返回按钮,下方三个造塔按钮(其实是按键盘才有用的,不是真正点击的按钮)。
    2. 13.2 功能制作
      1. 创建GamePanel脚本,继承BasePanel面板基类,挂载到GamePanel游戏界面预制体上,注意脚本名要和界面名一样
      2. 创建下方塔按钮脚本,定义塔图片,塔文本,造塔需要的金币,挂载到下方塔按钮上关联
      3. GamePanel脚本中定义血条图片对象和血条文本对象,定义血条宽度变量,波数和金币文本对象,退出按钮,下方塔按钮父对象和塔按钮列表,外部关联
      4. 把游戏界面预制体放到Resources文件夹做成预制体
      5. 重新Init() 方法,添加监听退出按钮的点击事件,点击时隐藏游戏界面,返回到开始场景,可能有其他逻辑待补充。一开始造塔按钮父对象设置为隐藏,要人物走到范围内才显示。
      6. 定义用于更新安全区域血量的显示方法UpdateTowerHp() 。接收当前血量 hp 和最大血量 maxHP 作为参数。将血量文本的内容更新为当前血量和最大血量的字符串表示。通过计算当前血量在最大血量中所占比例,更新血条的宽度。
      7. 定义用于更新剩余波数的显示的方法UpdateWaveNum() 。接收当前波数 nowNum 和最大波数 maxNum 作为参数。将当前波数和最大波数的字符串表示更新到波数文本中,实现更新显示。
      8. 定义用于更新金币数量的显示方法UpdateMoney() 。接收当前获得的金币数量 money 作为参数。通过将金币数量转换为字符串,并更新到金币文本中,实现更新显示。
    3. 13.3 代码
      1. GamePanel
      2. TowerBtn

13.游戏场景-游戏界面


13.1 拼面板

查看游戏界面示例图

把canvas预制体拉一个出来,创建游戏界面对象,面板中包括标题文本,血量底图和血量图,剩余波数金币文本,返回按钮,下方三个造塔按钮(其实是按键盘才有用的,不是真正点击的按钮)。


13.2 功能制作

创建GamePanel脚本,继承BasePanel面板基类,挂载到GamePanel游戏界面预制体上,注意脚本名要和界面名一样

创建下方塔按钮脚本,定义塔图片,塔文本,造塔需要的金币,挂载到下方塔按钮上关联

/// <summary>
/// 组合控件 主要方便我们控制 造塔相关 UI的更新逻辑
/// </summary>
public class TowerBtn : MonoBehaviour
{
    public Image imgPic;
    
    public Text txtTip;
    
    public Text txtMoney;
}

GamePanel脚本中定义血条图片对象和血条文本对象,定义血条宽度变量,波数和金币文本对象,退出按钮,下方塔按钮父对象和塔按钮列表,外部关联

public Image imgHP; // 血条图片对象
public Text txtHP; // 血量文本对象

public Text txtWave; // 波数文本对象
public Text txtMoney; // 金币文本对象

public float hpW = 500; // 血条初始宽度,可以在外部进行调整

public Button btnQuit; // 退出按钮对象

public Transform botTrans; // 下方造塔组合控件的父对象,用于控制显示与隐藏

public List<TowerBtn> towerBtns = new List<TowerBtn>(); // 管理3个复合控件的集合

把游戏界面预制体放到Resources文件夹做成预制体

重新Init() 方法,添加监听退出按钮的点击事件,点击时隐藏游戏界面,返回到开始场景,可能有其他逻辑待补充。一开始造塔按钮父对象设置为隐藏,要人物走到范围内才显示。

public override void Init()
{
    // 监听按钮事件
    btnQuit.onClick.AddListener(() =>
    {
        // 隐藏游戏界面
        UIManager.Instance.HidePanel<GamePanel>();
        // 返回到开始界面
        SceneManager.LoadScene("BeginScene");
        // 其他操作
    });
    
    // 一开始隐藏下方和造塔相关的UI
    botTrans.gameObject.SetActive(false);
}

定义用于更新安全区域血量的显示方法UpdateTowerHp() 。接收当前血量 hp 和最大血量 maxHP 作为参数。将血量文本的内容更新为当前血量和最大血量的字符串表示。通过计算当前血量在最大血量中所占比例,更新血条的宽度。

public void UpdateTowerHp(int hp, int maxHP)
{
    txtHP.text = hp + "/" + maxHP;  // 更新血量文本显示
    // 更新血条的长度
    (imgHP.transform as RectTransform).sizeDelta = new Vector2((float)hp / maxHP * hpW, 38);
}

定义用于更新剩余波数的显示的方法UpdateWaveNum() 。接收当前波数 nowNum 和最大波数 maxNum 作为参数。将当前波数和最大波数的字符串表示更新到波数文本中,实现更新显示。

public void UpdateWaveNum(int nowNum, int maxNum)
{
    txtWave.text = nowNum + "/" + maxNum; // 更新波数文本显示
}

定义用于更新金币数量的显示方法UpdateMoney() 。接收当前获得的金币数量 money 作为参数。通过将金币数量转换为字符串,并更新到金币文本中,实现更新显示。

public void UpdateMoney(int money)
{
    txtMoney.text = money.ToString(); // 更新金币文本显示
}

13.3 代码

GamePanel

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

public class GamePanel : BasePanel
{
    public Image imgHP; // 血条图片对象
    public Text txtHP; // 血量文本对象
    public Text txtWave; // 波数文本对象
    public Text txtMoney; // 金币文本对象
    public float hpW = 500; // 血条初始宽度,可以在外部进行调整
    public Button btnQuit; // 退出按钮对象
    public Transform botTrans; // 下方造塔组合控件的父对象,用于控制显示与隐藏
    public List<TowerBtn> towerBtns = new List<TowerBtn>(); // 管理3个复合控件的集合

    public override void Init()
    {
        // 监听按钮事件
        btnQuit.onClick.AddListener(() =>
        {
            // 隐藏游戏界面
            UIManager.Instance.HidePanel<GamePanel>();
            // 返回到开始界面
            SceneManager.LoadScene("BeginScene");
            // 其他操作
        });

        // 一开始隐藏下方和造塔相关的UI
        botTrans.gameObject.SetActive(false);
    }

    /// <summary>
    /// 更新安全区域血量函数
    /// </summary>
    /// <param name="hp">当前血量</param>
    /// <param name="maxHP">最大血量</param>
    public void UpdateTowerHp(int hp, int maxHP)
    {
        txtHP.text = hp + "/" + maxHP; // 更新血量文本显示
        // 更新血条的长度
        (imgHP.transform as RectTransform).sizeDelta = new Vector2((float)hp / maxHP * hpW, 38);
    }

    /// <summary>
    /// 更新剩余波数
    /// </summary>
    /// <param name="nowNum">当前波数</param>
    /// <param name="maxNum">最大波数</param>
    public void UpdateWaveNum(int nowNum, int maxNum)
    {
        txtWave.text = nowNum + "/" + maxNum; // 更新波数文本显示
    }

    /// <summary>
    /// 更新金币数量
    /// </summary>
    /// <param name="money">当前获得的金币</param>
    public void UpdateMoney(int money)
    {
        txtMoney.text = money.ToString(); // 更新金币文本显示
    }
}

TowerBtn

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

/// <summary>
/// 组合控件 主要方便我们控制 造塔相关 UI的更新逻辑
/// </summary>
public class TowerBtn : MonoBehaviour
{
    public Image imgPic;
    public Text txtTip;
    public Text txtMoney;
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏