15.游戏界面

15.游戏场景-游戏主界面


15.1 知识点

明确游戏主界面的职责

游戏主界面负责展示游戏核心信息,如分数、时间等,同时提供一些操作按钮,例如设置按钮和退出按钮。其职责包括但不限于:

  • 显示当前分数和游戏时间
  • 提供设置按钮,用于打开设置面板
  • 提供退出按钮,用于弹出退出确认界面
  • 提供方法供外部调用,如加分、更新血条等

创建控件根部和游戏主界面空物体,拼接游戏界面


创建游戏主面板脚本

//游戏主面板
public class GamePanel : BasePanel<GamePanel>
{
    //获取控件 关联场景上的 控件对象 之后好控制
    
    //分数
    public CustomGUILabel labScore;
    //时间
    public CustomGUILabel labTime;
    //退出按钮
    public CustomGUIButton btnQuit;
    //设置按钮
    public CustomGUIButton btnSetting;
    //血量图
    public CustomGUITexture texHP;
    
    //血条控件的宽
    public float hpW = 350;
    
    //在外部要调用,但是不想在Inspector窗口显示
    
    //用于记录该玩家的当前分数
    [HideInInspector]
    public int nowScore = 0;
    
    //用于记录该玩家的完成时间
    [HideInInspector]
    public float nowTime = 0;
    private int time;
        
    void Start()
    {
        //监听界面上的一些控件操作事件
        btnSetting.clickEvent += () =>
        {
            //目前没有设置面板 暂时空着
            //打开设置面板
            SettingPanel.Instance.ShowMe();
    
            //改变时间 缩放值 为0就是时间停止
            Time.timeScale = 0;
        };
        
        btnQuit.clickEvent += () =>
        {
            //返回我们的游戏界面
            //弹出一个确定退出的按钮 
            QuitPanel.Instance.ShowMe();
    
            //改变时间 缩放值 为0就是时间停止
            Time.timeScale = 0;
        };
    }
}

提供一些方法给外部调用

/// <summary>
/// 提供给外部的加分方法
/// </summary>
/// <param name="score"></param>
public void AddScore(int score)
{
    nowScore += score;
    //更新界面显示
    labScore.content.text = nowScore.ToString();
}

/// <summary>
/// 更新血条的方法
/// </summary>
/// <param name="maxHP"></param>
/// <param name="HP"></param>
public void UpdateHP(int maxHP, int HP)
{
    texHP.guiPos.width = (float)HP / maxHP * hpW;
}

在Update方法内完成时间的更新记录显示

void Update()
{
    //完成时间的更新记录显示
    
    //通过帧间隔时间 进行累加 会比较准确
    nowTime += Time.deltaTime;
    
    //把秒 转换成我们的 时 分 秒
    time = (int)nowTime;
    labTime.content.text = "";
    //得到 几个小时
    // 8432s  60*60 = 3600
    //8432 / 3600 ≈ 2时
    if (time / 3600 > 0)
    {
        labTime.content.text += time / 3600 + "时";
    }
    //8432-7200 余 1232s
    // 1232s / 60 ≈ 20分  
    if (time % 3600 / 60 > 0 || labTime.content.text != "")
    {
        labTime.content.text += time % 3600 / 60 + "分";
    }
    //1232s-1200 余 32秒
    labTime.content.text += time % 60 + "秒";
}

15.2 知识点代码

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

//游戏主面板
public class GamePanel : BasePanel<GamePanel>
{
    //获取控件 关联场景上的 控件对象 之后好控制

    //分数
    public CustomGUILabel labScore;
    //时间
    public CustomGUILabel labTime;
    //退出按钮
    public CustomGUIButton btnQuit;
    //设置按钮
    public CustomGUIButton btnSetting;
    //血量图
    public CustomGUITexture texHP;

    //血条控件的宽
    public float hpW = 350;

    //在外部要调用,但是不想在Inspector窗口显示

    //用于记录该玩家的当前分数
    [HideInInspector]
    public int nowScore = 0;

    //用于记录该玩家的完成时间
    [HideInInspector]
    public float nowTime = 0;
    private int time;
    
    void Start()
    {
        //监听界面上的一些控件操作事件
        btnSetting.clickEvent += () =>
        {
            //目前没有设置面板 暂时空着
            //打开设置面板
            SettingPanel.Instance.ShowMe();

            //改变时间 缩放值 为0就是时间停止
            Time.timeScale = 0;
        };

        btnQuit.clickEvent += () =>
        {
            //返回我们的游戏界面
            //弹出一个确定退出的按钮 
            QuitPanel.Instance.ShowMe();

            //改变时间 缩放值 为0就是时间停止
            Time.timeScale = 0;
        };
    }
    
    void Update()
    {
        //完成时间的更新记录显示

        //通过帧间隔时间 进行累加 会比较准确
        nowTime += Time.deltaTime;

        //把秒 转换成我们的 时 分 秒
        time = (int)nowTime;
        labTime.content.text = "";
        //得到 几个小时
        // 8432s  60*60 = 3600
        //8432 / 3600 ≈ 2时
        if (time / 3600 > 0)
        {
            labTime.content.text += time / 3600 + "时";
        }
        //8432-7200 余 1232s
        // 1232s / 60 ≈ 20分  
        if (time % 3600 / 60 > 0 || labTime.content.text != "")
        {
            labTime.content.text += time % 3600 / 60 + "分";
        }
        //1232s-1200 余 32秒
        labTime.content.text += time % 60 + "秒";
    }

    /// <summary>
    /// 提供给外部的加分方法
    /// </summary>
    /// <param name="score"></param>
    public void AddScore(int score)
    {
        nowScore += score;
        //更新界面显示
        labScore.content.text = nowScore.ToString();
    }

    /// <summary>
    /// 更新血条的方法
    /// </summary>
    /// <param name="maxHP"></param>
    /// <param name="HP"></param>
    public void UpdateHP(int maxHP, int HP)
    {
        texHP.guiPos.width = (float)HP / maxHP * hpW;
    }
}


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

×

喜欢就点赞,疼爱就打赏