本次制作的为固定人数排行榜,并且未涉及存储信息,只是简单的模板
1.首先新建一个空物体,改名为RankingPanel
2.在空物体下新建一张图片,改名为Scoll View,添加scroll Rect组件
因为做的是垂直排行榜,所有把scroll Rect组件上的Horizontal取消勾选
2.在Scoll View下新建一张和Scoll View一样大小的图片改名为Viewport,添加Mask组件,取消勾选Show Mask Graphic
3.在Viewport下新建图片并改名为Connect,点击锚点,ctrl+alt,定位为top,right
把Pivot改为0.5,1改为居头部,添加Vertical Layout Group组件和Content Size Fitter组件
注意:必选先在Content下新建要添加的子物体后再把Content Size Fitter的Vertical Fit改为Preferred Size
4.在Content下新建排名子物体,名字为Rank_RankItem,新建图片改为Content等比大小,颜色自行更改,在Rank_RankItem下新建三个text文本,Rank_RankItem为排名,Name_RankItem为名称,Score_RankItem为分数
制作完成后把Viewport和Connect拖入Scroll View的Scroll Rect组件里,然后Ctrl+d复制RankItem,想复制多少个随你
5.最后一步,新建一个脚本,挂载在空物体RankingPanel上,把Content拖入脚本公开的参数里,下面放代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class RankManger : MonoBehaviour
{
public GameObject RankContent;
private List<RankItem> rankItems = new List<RankItem>();
private class RankItem
{
public Transform transform;
public Text scoreText;
public Text rankingText;
public int rankingNum;
public int score;
}
void Start()
{
StartCoroutine(RankRefresh());
}
private void InitializeRankItems()
{
for (int i = 0; i < RankContent.transform.childCount; i++)
{
Transform child = RankContent.transform.GetChild(i);
Text scoreText = child.Find("Score_RankItem").GetComponent<Text>();
Text rankingText = child.Find("Rank_RankItem").GetComponent<Text>();
rankItems.Add(new RankItem { transform = child, scoreText = scoreText, rankingText = rankingText, rankingNum = 0, score = 0 });
}
}
IEnumerator RankRefresh()
{
InitializeRankItems();
while (true)
{
if (RankContent.transform.childCount > 0)
{
for (int i = 0; i < rankItems.Count; i++)
{
int randomScore = Random.Range(0, 100);
rankItems[i].score = randomScore;
rankItems[i].scoreText.text = randomScore.ToString();
}
rankItems.Sort((a, b) => b.score.CompareTo(a.score));//数据比较交换
for (int i = 0; i < rankItems.Count; i++)
{
RankItem item = rankItems[i];
item.rankingNum = i + 1;
item.rankingText.text = item.rankingNum.ToString();
item.transform.SetSiblingIndex(i);//页面实际交换
}
}
yield return new WaitForSeconds(5);
}
}
}
实际上的排行榜应该根据玩家数量来生成对应的子物体,并且根据玩家在游戏中获得的分数来更改在排行榜的名次和分数,
单机游戏的排行榜需要存储到本地,重复游玩时根据分数刷新历史排名