11.开始场景-排行榜界面
11.1 知识点
创建排行榜面板空物体,拼接控件
在Unity中创建一个空物体,并在其下添加排行榜面板所需的控件,如标签、按钮等。
创建排行榜面板脚本
//排行榜面板
public class RankPanel : BasePanel<RankPanel>
{
//关闭按钮控件对象
public CustomGUIButton btnClose;
//创建排行榜遍历相关的list
private List<CustomGUILabel> labName = new List<CustomGUILabel>();
private List<CustomGUILabel> labScore = new List<CustomGUILabel>();
private List<CustomGUILabel> labTime = new List<CustomGUILabel>();
void Start()
{
//遍历添加子对象的GUI脚本到list中
for (int i = 1; i <= 10 ; i++)
{
//Find不特殊处理的话只能找到下一层的子对象
//小知识应用 找子对象的子对象 可以通过 斜杠来区分父子关系
labName.Add(this.transform.Find("Name/labName" + i).GetComponent<CustomGUILabel>());
labScore.Add(this.transform.Find("Score/labScore" + i).GetComponent<CustomGUILabel>());
labTime.Add(this.transform.Find("Time/labTime" + i).GetComponent<CustomGUILabel>());
}
//处理事件监听逻辑
btnClose.clickEvent += () =>
{
HideMe();
BeginPanel.Instance.ShowMe();
};
//开始时隐藏排行榜面板
HideMe();
}
//重写显示面板函数,更新排行榜信息
public override void ShowMe()
{
base.ShowMe();
UpdatePanelInfo();
}
//更新排行榜信息函数
public void UpdatePanelInfo()
{
//待补充刷新排行榜逻辑
}
}
关闭按钮的点击事件会隐藏排行榜面板并显示开始面板。UpdatePanelInfo
函数用于更新排行榜信息,待补充具体逻辑。
11.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//排行榜面板
public class RankPanel : BasePanel<RankPanel>
{
//关闭按钮控件对象
public CustomGUIButton btnClose;
//创建排行榜遍历相关的list
//因为控件较多 拖的话 工作量太大了 我们直接偷懒 通过代码找
private List<CustomGUILabel> labName = new List<CustomGUILabel>();
private List<CustomGUILabel> labScore = new List<CustomGUILabel>();
private List<CustomGUILabel> labTime = new List<CustomGUILabel>();
void Start()
{
//遍历添加子对象的GUI脚本到list中
for (int i = 1; i <= 10 ; i++)
{
//Find不特殊处理的话只能找到下一层的子对象
//小知识应用 找子对象的子对象 可以通过 斜杠来区分父子关系
labName.Add(this.transform.Find("Name/labName" + i).GetComponent<CustomGUILabel>());
labScore.Add(this.transform.Find("Score/labScore" + i).GetComponent<CustomGUILabel>());
labTime.Add(this.transform.Find("Time/labTime" + i).GetComponent<CustomGUILabel>());
}
//处理事件监听逻辑
btnClose.clickEvent += () =>
{
HideMe();
BeginPanel.Instance.ShowMe();
};
//加入的测试代码 看看数据添加成功与否
//GameDataMgr.Instance.AddRankInfo("测试数据", 100, 8432);
//开始时隐藏旁边面板
HideMe();
}
//重写显示面板函数,更新排行榜信息
public override void ShowMe()
{
base.ShowMe();
UpdatePanelInfo();
}
//更新排行榜信息函数
public void UpdatePanelInfo()
{
//处理根据排行榜数据 更新面板
//获取 GameDataMgr中的排行榜列表 用于在这里更新
//得数据
List<RankInfo> list = GameDataMgr.Instance.rankData.list;
//根据列表更新面板数据
for (int i = 0; i < list.Count; i++)
{
//名字
labName[i].content.text = list[i].name;
//分数
labScore[i].content.text = list[i].score.ToString();
//时间 存储的时间单位是s
//把秒数 转换成 时 分 秒
int time = (int)list[i].time;
labTime[i].content.text = "";
//得到 几个小时
// 8432s 60*60 = 3600
//8432 / 3600 ≈ 2时
if ( time / 3600 > 0 )
{
labTime[i].content.text += time / 3600 + "时";
}
//8432-7200 余 1232s
// 1232s / 60 ≈ 20分
if ( time % 3600 / 60 > 0 || labTime[i].content.text != "")
{
labTime[i].content.text += time % 3600 / 60 + "分";
}
//1232s-1200 余 32秒 直接取余60即可
labTime[i].content.text += time % 60 + "秒";
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com