Unity游戏开发之排行榜(采用PlayerPrefs存储)
首先找一些排行榜的背景图片当作排行榜的背景,也可以添加前三名的排名图片,将前三名的排名变成图片显示出来,我这里没做注解。也可以在建立的空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存储)相关推荐
- Unity3D游戏开发之数据持久化PlayerPrefs的使用
unity3d提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值. PlayerP ...
- unity 角度限制_喵的Unity游戏开发之路 推球:游戏中的物理
前言很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本 ...
- 喵的Unity游戏开发之路 - 推球:游戏中的物理
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
- unity游戏开发-socket网络通信
本篇主要是分享基于unity的客户端socket网络通信方案.关于服务器的c#-socekt搭建放在了这里<基于C#的Tcp服务端通信>.其中关于socekt粘包断包的处理放在这里分享了& ...
- Unity游戏开发之游戏存档方式
目录 1.Unity自带存储方式PlayerPrefs 2.XML存储方式 3.Json类型存储方式 1.Unity的序列化问题 2.Unity中支持序列化的类 3.Unity中Json的使用方法 4 ...
- 喵的Unity游戏开发之路 - 对象持久化
原文: https://mp.weixin.qq.com/s/NNLHFLEBJE_UIksBtDcglA 前言 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此 ...
- 喵的Unity游戏开发之路 - 复杂重力
转载(拷贝)自微信公众号(u3dnotes),图片和视频请查看原文: https://mp.weixin.qq.com/s?__biz=MzUxMDM3MTYwNQ==&mid=2247493 ...
- Unity游戏开发大师班
大小解压后:8.63G 持续时间19h 包含项目文件 1280X720 MP4 语言:英语+中英文字幕(根据原英文字幕机译更准确) Unity游戏开发大师班 信息: 要求 –没有课程要求,展示了开发过 ...
- Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动
Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动 使用cookie类型的纹理模拟云层的移动 现实生活中,当阳光直射大地,而天空中又有很多云时,云层的影子总是会投射在大地上,风吹着 ...
最新文章
- 宝塔的服务忽然挂掉解决方法
- Lyft估值目标近200亿美元 有望成今年来美国最大IPO
- javascript自动跳转
- Java线程的生命周期及线程的几种状态
- ace+arm+linux,用NDK编译ACE在Android上运行
- [蓝桥杯][2014年第五届真题]排列序数(思维)
- 计算机操作系统生产者和消费者模型的简单介绍
- CRMEB知识付费系统v1.4.4源码
- 硅谷历史_使其新颖:硅谷设计的历史
- matlab里两个for怎么跳出循环,急急急!matlab含有两个for循环,程序不知道哪儿错了,求指教!...
- 晚上运动对身体好吗?
- 联想拯救者 R720-15ikbn 安装黑苹果 MAC Mojave 10.14.4 efi
- chrome 打开百度报安全警告
- Selenium - What will happen behind the scenes when running client code
- 用fact函数算阶乘
- 房屋租赁合同法律规定是怎样的
- beyondCompare this license key has been revoked密钥被撤销
- to写日志or not to写日志,is a question.-.-
- 2023年全国最新会计专业技术资格精选真题及答案15
- 数学基础从高一开始1、集合的概念
热门文章
- AR模型中的自相关系数和偏自相关系数
- 零基础非金融专业分享:怎么高效的复习备考FRM?
- 讲道理,你真的懂浏览器原理吗?
- oracle定时任务时间表达式,quartz定时任务数据库需要的表)
- 星火国际《隐私政策》
- android之状态栏提示
- 13个制造业数字化转型案例场景,覆盖95%行业痛点,附55页ppt
- 基于python的pyshp库读取.shp数据来获取中国城市边界的经纬度数据,并生成hdf文件
- php token验证例子,phptoken使用与验证示例【测试可用】[原创]
- 全网搜php,ThinkPHP-FM全网自动采集聚合影视搜索源码