13.游戏场景-游戏界面
13.1 知识点
创建游戏场景Scene,添加一个特效。注意主摄像机改成纯色模式避免天空盒模式的游影响。创建NGUI根对象,设置好分辨率。
查看游戏面板要创建的控件
创建游戏面板Panel。添加一个返回按钮,一个标题Label,一个时间Label,十个血量块。血量块可以参考选角面板的属性块。检查不同分辨率下控件的位置,检查DrawCall
创建游戏面板GamePanel脚本。继承BasePanel。添加各个控件的变量挂载到游戏面板控件上并关联各控件。设置一个时间变量,在Update类更新时间,显示到时间Label上。封装一个提供给外部改变血量的方法,根据血量大小,显示或隐藏对应的血量对象块。初始化时给返回按钮添加监听,点击返回按钮应该暂时确认退出买面板,待补充。初始化时可以测试将默认血量设置为5,看看有没有问题,后面记得删除。
//游戏界面脚本类
public class GamePanel : BasePanel<GamePanel>
{
//返回按钮
public UIButton btnBack;
//时间标签
public UILabel labTime;
//血量所有对象的集合
public List<GameObject> hpObjs;
//当前游戏运行的时间
public float nowTime = 0;
public override void Init()
{
//为返回按钮添加点击事件
btnBack.onClick.Add(new EventDelegate(() => {
//点击 退出按钮后
//显示 确定退出面板
}));
//测试将默认血量设置为5
ChangeHp(5);
}
/// <summary>
/// 提供给外部 改变血量的 方法
/// </summary>
/// <param name="hp">要设置的新血量值</param>
public void ChangeHp(int hp)
{
for (int i = 0; i < hpObjs.Count; i++)
{
//根据血量大小,显示或隐藏对应的血量对象
hpObjs[i].SetActive(i < hp);
}
}
private void Update()
{
//更新游戏运行时间
nowTime += Time.deltaTime;
//将游戏运行时间以时、分、秒的格式显示在时间标签上
labTime.text = "";
//时(小时)
if ((int)nowTime / 3600 > 0)
labTime.text += (int)nowTime / 3600 + "h";
//分
if ((int)nowTime % 3600 / 60 > 0 || labTime.text != "")
labTime.text += (int)nowTime % 3600 / 60 + "m";
//秒
labTime.text += (int)nowTime % 60 + "s";
}
}
13.2 知识点代码
//引用命名空间
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//游戏界面脚本类
public class GamePanel : BasePanel<GamePanel>
{
//返回按钮
public UIButton btnBack;
//时间标签
public UILabel labTime;
//血量所有对象的集合
public List<GameObject> hpObjs;
//当前游戏运行的时间
public float nowTime = 0;
public override void Init()
{
//为返回按钮添加点击事件
btnBack.onClick.Add(new EventDelegate(() => {
//点击 退出按钮后
//显示 确定退出面板
}));
//测试将默认血量设置为5
ChangeHp(5);
}
/// <summary>
/// 提供给外部 改变血量的 方法
/// </summary>
/// <param name="hp">要设置的新血量值</param>
public void ChangeHp(int hp)
{
for (int i = 0; i < hpObjs.Count; i++)
{
//根据血量大小,显示或隐藏对应的血量对象
hpObjs[i].SetActive(i < hp);
}
}
private void Update()
{
//更新游戏运行时间
nowTime += Time.deltaTime;
//将游戏运行时间以时、分、秒的格式显示在时间标签上
labTime.text = "";
//时(小时)
if ((int)nowTime / 3600 > 0)
labTime.text += (int)nowTime / 3600 + "h";
//分
if ((int)nowTime % 3600 / 60 > 0 || labTime.text != "")
labTime.text += (int)nowTime % 3600 / 60 + "m";
//秒
labTime.text += (int)nowTime % 60 + "s";
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com