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