C# Unity:离线前10名排行榜
我有一个问答游戏,在游戏结束时,我想展示一个前10名的排行榜,上面有他们的名字和分数,例如:Ioue 500 现在,每次用户得分时,我都会添加分数,并检查高分。然而,我不知道如何做排行榜。有人能指引我吗 这个脚本是用户注册的地方,它是一个不同的场景C# Unity:离线前10名排行榜,c#,unity3d,C#,Unity3d,我有一个问答游戏,在游戏结束时,我想展示一个前10名的排行榜,上面有他们的名字和分数,例如:Ioue 500 现在,每次用户得分时,我都会添加分数,并检查高分。然而,我不知道如何做排行榜。有人能指引我吗 这个脚本是用户注册的地方,它是一个不同的场景 using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using System.Linq; using System.Text.RegularExpre
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System.Linq;
using System.Text.RegularExpressions;
using System.IO;
using System;
public class Registration : MonoBehaviour
{
public Text name;
public static Registration _instace;
private void Awake()
{
_instace = this;
}
/// <summary>
/// Performs data validation and registers user
/// </summary>
public void Register()
{
string data;
string currentUser = string.Empty;
string userName;
data = GetData(name);
if (data == null || string.IsNullOrEmpty(data))
{
Recolor(name, errorColor);
return;
}
else
{
userName = data;
currentUser += data + ";";
}
string previousDirectory = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(Application.persistentDataPath);
if (File.Exists("Users.csv"))
{
string[] users = File.ReadAllLines("Users.csv");
foreach (string user in users)
{
string[] parts = user.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
}
}
File.AppendAllText("Users.csv", currentUser + Environment.NewLine);
Directory.SetCurrentDirectory(previousDirectory);
SceneManager.LoadScene(nextScene);
}
// Gets input data from control group provided
string GetData(Graphic group)
{
InputField inputField = group.GetComponentInChildren<InputField>();
if (inputField != null)
{
return inputField.text;
}
return null;
}
// Gets input data from control group provided
string GetDataD(Graphic group)
{
Dropdown inputField = group.GetComponentInChildren<Dropdown>();
if (inputField != null)
{
return inputField.captionText.text;
}
return null;
}
}
这是我比较新旧分数的地方:
public void submitNewPlayerScore(int newScore)
{
if (newScore > playerProgress.highestScore)
{
playerProgress.highestScore = newScore;
SavePlayerProgress();
}
}
现在我需要的是,我将有许多用户在玩,我只想显示排名前10位的用户及其姓名和高分。谢谢大家! 好的第一件事:为什么离线时还需要注册? 您可以省略注册,在测验结束后只需询问玩家姓名(如果您想获得离线高分) 由于您已经有了某种程度的
最高分
,您可以使用Linq
订购它。我假设您的代码可以访问所有播放器(因为它位于csv文件中),因此我建议您执行以下操作:
List<Player> playerList = new List<Player>();
foreach(string user in File.ReadAllLines("Users.csv"))
{
playersList.Add(Player.Parse(user)); // If you have such method...
}
highestX
目前拥有10项得分最高的记录。你可以反复浏览它们,并显示详细信息,如highestX.ElementAt(0).Name
或类似的内容。用户及其分数保存在文件中?有点离题,但该项目是否来自教程?我最近看到了很多关于具有类似命名变量的智力竞赛游戏的问题。是的,它来自Unity live会话教程。文件中只保存了一个用户。分数是使用PlayerPerf保存的。我需要注册,因为我需要收集用户信息。是的,它是离线的。我不太理解int x部分和higestX部分,你能演示更多吗?@Alex我可以演示更多,但你展示的大部分是代码中不相关的部分。这种注册很容易“黑客”,你的.exe文件所在的文件夹中有纯文本文件,因此我不会基于此进行任何数据挖掘。idc关于任何黑客行为现在。。。没有人会破解它。。这只是为了一件小事,不是为了发表。。我只需要展示前10名的排行榜。。。
List<Player> playerList = new List<Player>();
foreach(string user in File.ReadAllLines("Users.csv"))
{
playersList.Add(Player.Parse(user)); // If you have such method...
}
int x = 10; // how many records to take
IEnumerable<Player> highestX = playerList.OrderBy(player => player.highestScore).Take(x);