首先找一些排行榜的背景图片当作排行榜的背景,也可以添加前三名的排名图片,将前三名的排名变成图片显示出来,我这里没做注解。也可以在建立的空UI中添加Rect Transform可以让排行榜有一个滑动效果,注意添加这个组件一定要添加Image组件。

源代码:

RankItem 类代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class RankItem : MonoBehaviour
{
    private Text pm = null;
    private Text xm = null;
    private Text fs = null;
  
    public void Init(int rank,string name,string score)
    {  
        pm = transform.Find("pm").GetComponent<Text>();
        xm = transform.Find("xm").GetComponent<Text>();
        fs = transform.Find("fs").GetComponent<Text>();
        pm.text = "第" + rank + "名";
        xm.text = name;
        fs.text = " " + score;
    }

}

RankListPanel 类源代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class RankListPanel : MonoBehaviour
{
    private RankItem  RankItemmould; //模板
    private Transform RankItemparent;   //父亲
    private List<RankItem > RankItemList ;   //列表
    void Start()
    {
        //初始化
        RankItemmould = transform.Find("rankItem").GetComponent<RankItem >();
        RankItemparent = transform.Find("scrollView/viewPort/content/grip");               
        RankItemList = new List<RankItem>();
        RankItemmanage.Instance.save("张三", 27000);
        RankItemmanage.Instance.save("王二",28000);
        RankItemmanage.Instance.save("赵六", 26000);
        RankItemmanage.Instance.save("拉拉啦",31000);
        RankItemmanage.Instance.save("李四儿", 34000);
        RankItemmanage.Instance.save("孙六", 32000);

Init();
    }

public void Init()
    {
        List<Rank> _allRankInfoList = RankItemmanage .Instance.get ();
        if(_allRankInfoList.Count <= 0)
        {
            return;
        }
        for (int i = 0; i < _allRankInfoList.Count; i++)
        {
            RankItem rankItem = GetARankItem ();
            rankItem.Init(i+1, _allRankInfoList[i].name, ""+ _allRankInfoList[i].score );  
        }
    }
    //新的排行项目
    RankItem CreateANewRankItem()
        {
            GameObject go = Instantiate(RankItemmould.gameObject) as GameObject;    //复制排行相对应
        RankItem Newpaihang = go.GetComponent<RankItem>();
        Newpaihang.transform.SetParent(RankItemparent);
        RankItemList.Add(Newpaihang);
            return Newpaihang;
        }

RankItem  GetARankItem()
        {
        RankItem newrankItem = CreateANewRankItem ();
            return newrankItem;
        }

}

RankItemmanage类源代码:

using System.Collections.Generic;
using UnityEngine;

//排行信息管理
public class Rank
{
    public string name = "";
    public int score = 0;
}
public class RankItemmanage
{
    private List <Rank > Linelist=null;  //
    private static RankItemmanage Xpaihang = null;
    private int max=10;
    public static RankItemmanage Instance
    {
        get
        {
            if (Xpaihang == null)
            {
                Xpaihang = new RankItemmanage();
            }
            return Xpaihang;
        }
    }
    //存储信息
  public void save(string name,int score)
    {
        Analyze();
        //最新信息加入列表
        Rank rankInfo = new Rank();
        rankInfo.name = name;
        rankInfo.score = score ;
        Linelist.Add(rankInfo);

//新加入的信息进行排序
        //对超过排名的信息进行抹去
        Linelist.Sort(CompareSpeedFromBigToSmall); 
        if (Linelist.Count > max)
        {
            Linelist.RemoveAt(Linelist.Count - 1);
        }

string Memory = "";   //所有排行信息
        for(int i=0;i< Linelist.Count; i++)  
        {
            //每一个排行信息
            string HMemory = "";
            HMemory += Linelist[i].name;
            HMemory += "+";
            HMemory += Linelist[i].score;
            if (i != (Linelist.Count - 1))
            {
                HMemory += "|";
            }
            Memory += HMemory;
        }
        //存储排行信息
         PlayerPrefs.SetString("RankInfo", Memory);
    }
    //获得排行信息
    public List<Rank> get()
    {
        Analyze();
        return Linelist;
    }
    //分离解析存储的排行信息
    private void Analyze()
    {
        Linelist = new List<Rank>();
        string rankString = PlayerPrefs.GetString("RankInfo");
        //如果存储有信息进行解析
        if(!string.IsNullOrEmpty (rankString))
        {
            string[] rankItemArray = rankString.Split('|');
            for(int i=0;i<rankItemArray.Length; i++)
            {
                string[] rankItem = rankItemArray[i].Split('+');
                Rank rankInfo = new Rank();
                rankInfo.name = rankItem[0];
                rankInfo.score = int.Parse(rankItem[1]);
                Linelist.Add(rankInfo);
            }
        }
        if (Linelist.Count > 0)
        {
            Linelist.Sort(CompareSpeedFromBigToSmall);
        }
    }
    //冒泡排序
    private int CompareSpeedFromBigToSmall(Rank rank1, Rank rank2)
    {
        double a = rank1.score;
        double b = rank2.score;
        if (a==b)
        {
            return 0;
        }
        else if (a>b)
        {
            return -1;
        }
        else
        {
            return 1;
        }
    }
}

注:每次运行都会存储一遍游戏者的信息。这个排行需要和游戏类结合,这边我为了测试直接输入信息并直接调用了 Init()函数。

Unity游戏开发之排行榜(采用PlayerPrefs存储)相关推荐

  1. Unity3D游戏开发之数据持久化PlayerPrefs的使用

    unity3d提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值.     PlayerP ...

  2. unity 角度限制_喵的Unity游戏开发之路 推球:游戏中的物理

    前言很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本 ...

  3. 喵的Unity游戏开发之路 - 推球:游戏中的物理

    很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...

  4. unity游戏开发-socket网络通信

    本篇主要是分享基于unity的客户端socket网络通信方案.关于服务器的c#-socekt搭建放在了这里<基于C#的Tcp服务端通信>.其中关于socekt粘包断包的处理放在这里分享了& ...

  5. Unity游戏开发之游戏存档方式

    目录 1.Unity自带存储方式PlayerPrefs 2.XML存储方式 3.Json类型存储方式 1.Unity的序列化问题 2.Unity中支持序列化的类 3.Unity中Json的使用方法 4 ...

  6. 喵的Unity游戏开发之路 - 对象持久化

    原文: https://mp.weixin.qq.com/s/NNLHFLEBJE_UIksBtDcglA 前言         很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此 ...

  7. 喵的Unity游戏开发之路 - 复杂重力

    转载(拷贝)自微信公众号(u3dnotes),图片和视频请查看原文: https://mp.weixin.qq.com/s?__biz=MzUxMDM3MTYwNQ==&mid=2247493 ...

  8. Unity游戏开发大师班

    大小解压后:8.63G 持续时间19h 包含项目文件 1280X720 MP4 语言:英语+中英文字幕(根据原英文字幕机译更准确) Unity游戏开发大师班 信息: 要求 –没有课程要求,展示了开发过 ...

  9. Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动

    Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动 使用cookie类型的纹理模拟云层的移动 现实生活中,当阳光直射大地,而天空中又有很多云时,云层的影子总是会投射在大地上,风吹着 ...

最新文章

  1. 宝塔的服务忽然挂掉解决方法
  2. Lyft估值目标近200亿美元 有望成今年来美国最大IPO
  3. javascript自动跳转
  4. Java线程的生命周期及线程的几种状态
  5. ace+arm+linux,用NDK编译ACE在Android上运行
  6. [蓝桥杯][2014年第五届真题]排列序数(思维)
  7. 计算机操作系统生产者和消费者模型的简单介绍
  8. CRMEB知识付费系统v1.4.4源码
  9. 硅谷历史_使其新颖:硅谷设计的历史
  10. matlab里两个for怎么跳出循环,急急急!matlab含有两个for循环,程序不知道哪儿错了,求指教!...
  11. 晚上运动对身体好吗?
  12. 联想拯救者 R720-15ikbn 安装黑苹果 MAC Mojave 10.14.4 efi
  13. chrome 打开百度报安全警告
  14. Selenium - What will happen behind the scenes when running client code
  15. 用fact函数算阶乘
  16. 房屋租赁合同法律规定是怎样的
  17. beyondCompare this license key has been revoked密钥被撤销
  18. to写日志or not to写日志,is a question.-.-
  19. 2023年全国最新会计专业技术资格精选真题及答案15
  20. 数学基础从高一开始1、集合的概念

热门文章

  1. AR模型中的自相关系数和偏自相关系数
  2. 零基础非金融专业分享:怎么高效的复习备考FRM?
  3. 讲道理,你真的懂浏览器原理吗?
  4. oracle定时任务时间表达式,quartz定时任务数据库需要的表)
  5. 星火国际《隐私政策》
  6. android之状态栏提示
  7. 13个制造业数字化转型案例场景,覆盖95%行业痛点,附55页ppt
  8. 基于python的pyshp库读取.shp数据来获取中国城市边界的经纬度数据,并生成hdf文件
  9. php token验证例子,phptoken使用与验证示例【测试可用】[原创]
  10. 全网搜php,ThinkPHP-FM全网自动采集聚合影视搜索源码