具体效果

大体方法:创建一个分数类Score和一个分数类的容器List<Score>,和一个json.txt用来存储所有的分数(最多显示10条分数)。进入主菜单时读取txt将分数全部读到list中,当用户点击排行榜显示按钮时从list中加载出来;在游戏中结算分数时实例化一个分数类并Add到List中,并排一下序,把分数最小的元素Remove掉(一拍大腿,为什么不用优先队列呢!!不过那得自己实现),并输出到文本中。什么时候读和输出其实可以很随意,能实现效果就好,毕竟运算的元素不多。

方法

准备工作:先创建一个所有分数的父物体Item,在上面挂上GridLayoutGroup

这个是用来让分数Prefab自动排版,设置参数如图

然后制作一个分数Prefab,一个空物体下面有3个text子物体分别对应Number,Name,Score

准备工作完事,然后是代码

  List<Score> scoreList = new List<Score>(); //创建list,用来存Score

当用户进入游戏i主界面时

StreamReader sr = new StreamReader(Application.dataPath + "/Resources/RankingList.txt");string nextLine;while ((nextLine = sr.ReadLine()) != null){scoreList.Add(JsonUtility.FromJson<Score>(nextLine));} sr.Close();//将所有存储的分数全部存到list中

当游戏结束分数结算时

        scoreList.Add(new Score(Name, numScore));//分数名字直接调变量,不用给出细节分数名字直接调变量,不用给出细节

当用户点击排行榜按钮时

        scoreList.Sort();StreamWriter sw = new StreamWriter(Application.dataPath + "/Resources/RankingList.txt");if (scoreList.Count > 10) for (int i = 10; i < scoreList.Count;i++ ) scoreList.RemoveAt(i);for (int i = 0; i < scoreList.Count; i++) { sw.WriteLine(JsonUtility.ToJson(scoreList[i]));Debug.Log(scoreList[i].ToString());}sw.Close();

这样,list中就存了最多10条分数记录了,排序方法需要实现接口。下面是Score类的定义

public class Score : System.IComparable<Score>
{public string name;public int score;public Score(string n, int s) { name = n; score = s; }public int CompareTo(Score other){if (other == null)return 0;int value = other.score - this.score;return value;}public override string ToString()//debug用{return name + " : " + score.ToString();}
}

list的部分就大功告成了,最后是加载Prefab

for (int i = 0; i < scoreList.Count; i++){GameObject item = Instantiate(Item.gameObject);item.gameObject.SetActive(true);item.transform.SetParent(Item.parent, false);item.transform.Find("Number").GetComponent<Text>().text = (i + 1).ToString();item.transform.Find("Name").GetComponent<Text>().text = scoreList[i].name;item.transform.Find("Score").GetComponent<Text>().text = scoreList[i].score.ToString();}

主要是用到了unity自己的JsonUtility,将类输出成json的字符串,同样还能将json的字符串转化成类,非常方便。

{"name":"hjkhjk","score":26}
{"name":"zzz","score":15}
{"name":"213","score":9}
{"name":"ad","score":6}
{"name":"g","score":6}
{"name":"3333","score":3}
{"name":"9","score":0}
{"name":"qwe","score":0}
{"name":"l","score":0}
{"name":"9","score":0}

通过JsonUtility,还可以实现很多功能,大坑啊。

unity本地分数排行榜简单解决方案(Json)相关推荐

  1. Pytorch加载torchvision从本地下载好的预训练模型的简单解决方案

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.喜 ...

  2. Unity 工具类 之 Excel 转换为 json、csv、xml、lua格式

    Unity 工具类 之 Excel 转换为 json.csv.xml.csv 格式 目录 Unity 工具类 之 Excel 转换为 json.csv.xml.csv 格式 一.介绍 二.操作原理 三 ...

  3. Beanshell解析json-解析简单复杂json数据

    Beanshell解析json-解析简单&复杂json数据 1.概述 如果在beanshell中解析json数据,那么这篇文章你get到了重点.不仅给出了解决方案,同时还理清了解决的思路. 2 ...

  4. 【Unity3D 灵巧小知识点】 ☀️ | Unity中几个简单又常见的报错异常

    Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 . 包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助 Unity 将创意 ...

  5. 工控软件/PLC的信息远传的简单解决方案

    工控软件/PLC的信息远传的简单解决方案 针对现在的物联网趋势,很多小伙伴想迈出工控信息远传这一步,但是又会出于对软件行业的陌生而望而却步.本人有10年工控经验以及物联网平台开发.对接经验,这里分享一 ...

  6. Unity 工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等

    Unity  工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等 目录 Unity  工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等 一.方法提要: 二.使用注意: 三.json ...

  7. Unity 之 Excel表格转换为Unity用的文件格式 -- ScriptableObject,Json,XML 全部搞定

    Unity 之 Excel表格转换为Unity用的文件格式 -- ScriptableObject,Json,XML 全部搞定 前言 一,准备工作 1.1 确认表格表头 1.2 读取Excel 1.3 ...

  8. 关于使用eclipse maven UpdateProject时报错,无法更新本地仓库的问题解决方案

    关于使用eclipse maven UpdateProject时报错,无法更新本地仓库的问题解决方案 参考文章: (1)关于使用eclipse maven UpdateProject时报错,无法更新本 ...

  9. vue-router同路由$router.push不跳转一个简单解决方案

    vue-router同路由$router.push不跳转一个简单解决方案 vue-router跳转一般是这么写: toCurrentPage: function(thisId){ this.$rout ...

最新文章

  1. Go 学习笔记(55)— Go 标准库 sql (初始化数据库、插入、更新、删除数据库表、单行查询、多行查询、事务处理)
  2. 深度丨AI 与区块链:两大热门技术,会碰撞出什么样的火花?
  3. 关闭Bind 递归查询功能
  4. selenium用法详解
  5. 前端学习(1935)vue之电商管理系统电商系统之实现权限的默认勾选功能
  6. ubuntu server安装hadoop和spark,并设置集群
  7. mysql rpm server_记录一次最新版MySQL-server-5.6.20-1.el6.x86_64.rpm的安装
  8. cmake导入so库_cmake编译.so库体积非常大,求解答
  9. H - Going in Cycle!! (UVA - 11090)
  10. 写了一套优雅接口之后,领导让我给大家讲讲这背后的技术原理
  11. win10系统无法自动修复启动解决方案
  12. TSX指令集之RTM无锁并发能加快速度吗?与mutex加锁比较
  13. android ndk下载安装教程,安装android NDK详细步骤
  14. Knowledge Tracing 资源帖2
  15. OEL8上VNC无法访问图形界面的解决方法
  16. 【java实现定时自动发送QQ消息】
  17. excel中设置每行等高
  18. Markdown插入url图片
  19. Linux文件删除但空间不释放问题篇
  20. 以太坊客户端mist和geth加快区块同步速度的方法

热门文章

  1. IE 和 标准盒模型 floa浮动 清除浮动 定位
  2. 搭建个人深度学习工作站
  3. 《PTA——拼题A》之第1016题
  4. Java | 参数(Parameter)
  5. 【数据结构】二叉搜索树的上/下界
  6. 阿里云和腾讯云免费SSL证书 专题
  7. CentOS 安装Vim 编辑器
  8. 【零散技术】微信小程数组排序
  9. 用GRUB2来实现——坎特伯雷项目 The Canterbury Project
  10. 三阶段--017Day 模块 Requirejs