Unity排行榜功能(使用MVC框架)
要求:实现如图所示UI界面,按下某一按键实现排行榜的更新
M:
//数据模型类 主要负责数据(玩家的数据)
public class RankModel
{//定义三个属性 姓名、分数、排名//定义构造函数public string Name{set;get;}public int Score{set;get;}public int Number{set;get;}public RankModel(string name,int score,int number){Name = name;Score = score;Number = number;}}
V:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//排行榜视图类:负责UI数据的显示,向外界提供UI数据初始化的方法
public class RankElementSc : MonoBehaviour
{private Text numberText;//显示排名的子物体的textprivate Text nameText;//显示名字的子物体的textprivate Text scoreText;//显示分数的子物体的textvoid Awake(){numberText = transform.Find("NumberText").GetComponent<Text>();nameText = transform.Find("NameText").GetComponent<Text>();scoreText = transform.Find("ScoreText").GetComponent<Text>();}//UI初始化public void Init(RankModel rank){Debug.Log(numberText + "" + rank.Number);numberText.text = rank.Number.ToString();nameText.text = rank.Name;scoreText.text = rank.Score.ToString();}}
C:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//排行榜控制类,负责数据的处理,游戏的逻辑
public class RankController : MonoBehaviour
{public GameObject rankElementPr;//排行榜元素预设体List<RankModel> rankModels;//数据的集合List<RankElementSc> elementScs;//单元格脚本的集合public int RANKNUMBER = 5;//显示排名的数量RankModel[] top5Arr;//存放前5名+1的数据private string playerData;private void Awake(){rankModels = new List<RankModel>();//初始化玩家列表elementScs = new List<RankElementSc>();//初始化单元格脚本列表top5Arr = new RankModel[RANKNUMBER + 1];//初始化前5名玩家数组}void Start(){LoadData();//加载初始数据SortRankdataOrScore();//对所有玩家进行排序//DisplayData();//更新所有玩家数据DisplayTop5Data();//更新前5名数据}//加载初始数据private void LoadData(){//创建一个数据//RankModel m1 = new RankModel("孙悟空", 99, 0);//rankModels.Add(m1);//RankModel m2 = new RankModel("李寻欢", 66, 0);//rankModels.Add(m2);//RankModel m3 = new RankModel("猪八戒", 70, 0);//rankModels.Add(m3);//RankModel m4 = new RankModel("沙僧", 89, 0);//rankModels.Add(m4);//RankModel m5 = new RankModel("傻吊", 30, 0);//rankModels.Add(m5);//RankModel m6 = new RankModel("测试玩家", 0, 0);//rankModels.Add(m6);//PlayerPrefs.DeleteAll();//初始数据//if (!PlayerPrefs.HasKey("RankData"))//{// playerData = "孙悟空 99 0\n李寻欢 66 0\n猪八戒 70 0\n沙僧 89 0\n傻吊 30 0\n测试玩家 0 0";// PlayerPrefs.SetString("RankData", playerData);//}解析数据//string Datas = PlayerPrefs.GetString("RankData");//string[] playerdatas = Datas.Split('\n');//foreach (string item in playerdatas)//{// string[] playerdata = item.Split(' ');// string modelName = playerdata[0];// string modelScore = playerdata[1];// string modelRank = playerdata[2];// RankModel model = new RankModel(modelName, int.Parse(modelScore), int.Parse(modelRank));// rankModels.Add(model);//}if (!PlayerPrefs.HasKey("RankData")){playerData = "孙悟空 99 0\n李寻欢 66 0\n猪八戒 70 0\n沙僧 89 0\n傻吊 30 0\n测试玩家 0 0";PlayerPrefs.SetString("RankData",playerData);}string Datas =PlayerPrefs.GetString("RankData");string[] playerdatas = Datas.Split('\n');foreach (string item in playerdatas){string[] playerdata = item.Split(' ');string modelName = playerdata[0];string modelScore = playerdata[1];string modelRank = playerdata[2];RankModel model = new RankModel(modelName, int.Parse(modelScore), int.Parse(modelRank));rankModels.Add(model);}//将6名玩家添加到排行榜前五名数组中top5Arr = rankModels.ToArray();//对前五名数组排序SortTop5Arr();}//刷新数据--创建UIprivate void DisplayData(){for (int i = 0; i < rankModels.Count; i++){//调用UI初始化方法,传递数据CreatElement().Init(rankModels[i]);}}//更新前5名数据void DisplayTop5Data(){for (int i = 0; i < top5Arr.Length - 1; i++){//调用UI初始化方法,传递数据CreatElement().Init(top5Arr[i]);}}//创建一个单元格RankElementSc CreatElement(){//创建UI排行榜元素GameObject element = Instantiate<GameObject>(rankElementPr);//设置父物体,自身缩放与父物体缩放无关element.transform.SetParent(transform, false);//添加组件RankElementSc ranksc = element.AddComponent<RankElementSc>();//将脚本添加到集合elementScs.Add(ranksc);return ranksc;}//对所有玩家进行排序private void SortRankdataOrScore(){for (int i = 0; i < rankModels.Count - 1; i++){bool k = false;for (int j = 0; j < rankModels.Count - 1 - i; j++){if (rankModels[j].Score < rankModels[j + 1].Score){RankModel temp;temp = rankModels[j];rankModels[j] = rankModels[j + 1];rankModels[j + 1] = temp;k = true;}}if (!k){break;}}//设置玩家排名for (int i = 0; i < rankModels.Count; i++){rankModels[i].Number = i + 1;}}//对前5名数组进行排序private void SortTop5Arr(){for (int i = 0; i < top5Arr.Length - 1; i++){bool k = false;for (int j = 0; j < top5Arr.Length - 1 - i; j++){if (top5Arr[j].Score < top5Arr[j + 1].Score){RankModel temp;temp = top5Arr[j];top5Arr[j] = top5Arr[j + 1];top5Arr[j + 1] = temp;k = true;}}if (!k){break;}}//排名for (int i = 0; i < top5Arr.Length; i++){top5Arr[i].Number = i + 1;}}//增加玩家int playerName = 0;public void AddPlayer(){//增模拟加一名新玩家playerName++;int score = Random.Range(0, 100);RankModel model = new RankModel("玩家" + playerName, score, 0);rankModels.Add(model);//创建单元格CreatElement();//重新排序SortRankdataOrScore();//刷新数据RefreshData();}//刷新数据void RefreshData(){for (int i = 0; i < rankModels.Count; i++){elementScs[i].Init(rankModels[i]);}}//刷新数据 -- 前五名数组void RefreshData(RankModel[] topArr){for (int i = 0; i < topArr.Length - 1; i++){elementScs[i].Init(topArr[i]);}}private void Update(){if (Input.GetKeyDown(KeyCode.Space)){//AddPlayer();//增模拟加一名新玩家playerName++;int score = Random.Range(0, 100);RankModel model = new RankModel("玩家" + playerName, score, 0);rankModels.Add(model);//替换掉原排名数组中第6人的名单top5Arr[RANKNUMBER] = model;//重新排序SortTop5Arr();//刷新数据RefreshData(top5Arr);}}
}
Unity排行榜功能(使用MVC框架)相关推荐
- MVC框架的优点-老外的原文翻译
来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=128 GPS平台.网站建设.软件开发.系统运维,找森大网络科技! http://cnsendnet ...
- Unity框架——MVC框架
前言--什么是MVC框架 MVC全名是Model View Controller, 是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据 ...
- 从零开始实现一个简易的Java MVC框架(六)--加强AOP功能
前言 在前面从零开始实现一个简易的Java MVC框架(四)--实现AOP和从零开始实现一个简易的Java MVC框架(五)--引入aspectj实现AOP切点这两节文章中已经实现了AOP功能并且引用 ...
- MVC框架实现用户的登录注册功能
MVC是什么? MVC,全称model view controller-模型,视图,控制器 model是将数据库中的表到Java中变成实体类 view是编写JSP页面 controller是用来业务逻 ...
- PHP简单实现MVC框架路由功能模式
说到使用PHP进行网站开发,自然离不开各种PHP的开发框架,开发框架为我们提供了灵活的开发方式,MVC层分离,业务解耦等等,让我们的开发更为快捷方便.但是很多人只是会使用框架,却从来不去了解框架的内部 ...
- Unity MVC框架之见解
Unity MVC框架之见解 MVC框架认识 构架图 案例 无框架,普通逻辑代码脚本 主UI脚本 角色UI脚本 摄像机显示脚本 脚本的放置 MVC框架的运用 Model脚本 View脚本 主界面的Vi ...
- 用unity和php实现一个排行榜功能(unity客户端篇)
注:此文章需配合以下文章一起使用 用unity和php实现一个排行榜功能(PHP服务端篇) unity客户端篇 目前我用的版本是unity2020,unity2019,这份代码应该也适用 排行榜显示部 ...
- MVC框架实现用户登录注册功能(连接数据库)
目录 一.简单理解MVC框架 二.项目结构 三.项目源码 3.1 User 3.2 UserDao 3.3 RegisterDao 3.4 servletControll 3.5 servletCon ...
- mvc的宿舍管理系统源码 基于jsp_[源码和文档分享]基于JSP的MVC框架实现的图书推荐系统展示平台网站...
推荐系统是目前互联网中最常见的一种智能产品形式.由于网络中信息量的快速增长以及图书出版行业出版量的攀升,人们需要一种办法,来解决信息过载的问题.此外,用户访问网络是为了获取信息,但并不是所有的访问都有 ...
最新文章
- 不改一行代码定位线上性能问题
- php mysqldb 数据库切换,Python MySQLdb模块连接操作mysql数据库实例
- 关于HTML5中的video和audio元素
- android中文api(85)——HorizontalScrollView
- WinForm 清空界面控件值的小技巧
- 常用JavaScript函数 31 - 46(自我总结)
- mysql只导出表数据_MySQL 如何只导出 指定的表 的表结构和数据 ( 转 )
- 【SENCHA TOUCH】Sencha Touch ExtJs 给 Button 添加图片(二)
- 对视频图像进行OSD叠加
- 基于MK802的应用开发和相关的工具
- pythonfor反向循环_Python for 循环语句
- Python 机器学习 唐宇迪泰坦尼克号【最新代码】
- python-20180103-1
- 编写类的步骤编写测试类
- 批量插入图片——《超级处理器》应用
- 横空出世。复盘B站面试坑我最深的Java并发:JDK源码剖析。B站五面面经(附过程、答案)
- 关于Type-C扩展坞干扰路由器交换机的解决方案
- 八月六日个人训练记录
- 构建U盘启动的嵌入式linux
- 业务层 、服务层、数据层、表现层
热门文章
- centos7安装mplayer解码器
- android 补丁包增量更新
- 加密脱胎于去中心化理想,但力求合规 细数各国政府态度之演变
- centos7 Minimal 虚拟机安装图文教程
- 《Fast Gradient Projection Method for Text Adversary Generation and Adversarial Training》论文学习笔记
- 如何获取可靠的国外服务器IP地址?
- Solaris11自带php配置,solaris11网络相关配置
- Java项目(毕设课设) 之 [含文档+PPT+任务书+中期检查表+源码等]基于S2SH的医院在线挂号系统
- Arch安装kde后图形软件商店无法使用解决方案
- 装完win11显示版本是win10怎么回事?