Unity制作简单的排行榜

本次制作的为固定人数排行榜,并且未涉及存储信息,只是简单的模板
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);
        }
    }
}

实际上的排行榜应该根据玩家数量来生成对应的子物体,并且根据玩家在游戏中获得的分数来更改在排行榜的名次和分数,
单机游戏的排行榜需要存储到本地,重复游玩时根据分数刷新历史排名

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值