unity本地分数排⾏榜简单解决⽅案(Json)
具体效果
⼤体⽅法:创建⼀个分数类Score和⼀个分数类的容器List
菜单时读取txt将分数全部读到list中,当⽤户点击排⾏榜显⽰按钮时从list中加载出来;在游戏中结算分数时实例化⼀个分数类并Add到List
中,并排⼀下序,把分数最⼩的元素Remove掉(⼀拍⼤腿,为什么不⽤优先队列呢!!不过那得⾃⼰实现),并输出到⽂本中。什么时候读
和输出其实可以很随意,能实现效果就好,毕竟运算的元素不多。
⽅法
准备⼯作:先创建⼀个所有分数的⽗物体Item,在上⾯挂上GridLayoutGroup
这个是⽤来让分数Prefab⾃动排版,设置参数如图
然后制作⼀个分数Prefab,⼀个空物体下⾯有3个text⼦物体分别对应Number,Name,Score
准备⼯作完事,然后是代码
List
当⽤户进⼊游戏i主界⾯时
StreamReadersr=newStreamReader(th+"/Resources/");
stringnextLine;
while((nextLine=ne())!=null)
{
(on
}
();//将所有存储的分数全部存到list中
当游戏结束分数结算时
(newScore(Name,numScore));//分数名字直接调变量,不⽤给出细节
分数名字直接调变量,不⽤给出细节
当⽤户点击排⾏榜按钮时
();
StreamWritersw=newStreamWriter(th+"/Resources/");
if(>10)for(inti=10;i<;i++)At(i);
for(inti=0;i<;i++)
{
ine((scoreList[i]));
(scoreList[i].ToString());
}
();
这样,list中就存了最多10条分数记录了,排序⽅法需要实现接⼝。下⾯是Score类的定义
publicclassScore:rable
{
publicstringname;
publicintscore;
publicScore(stringn,ints){name=n;score=s;}
publicintCompareTo(Scoreother)
{
if(other==null)
return0;
intvalue=;
returnvalue;
}
publicoverridestringToString()//debug⽤
{
returnname+":"+ng();
}
}
list的部分就⼤功告成了,最后是加载Prefab
for(inti=0;i<;i++)
{
GameObjectitem=Instantiate(ject);
ive(true);
ent(,fal);
("Number").GetComponent
("Name").GetComponent
("Score").GetComponent
}
主要是⽤到了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,还可以实现很多功能,⼤坑啊。
本文发布于:2022-12-08 10:04:26,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/65356.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |