Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity:离线前10名排行榜_C#_Unity3d - Fatal编程技术网

C# Unity:离线前10名排行榜

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

我有一个问答游戏,在游戏结束时,我想展示一个前10名的排行榜,上面有他们的名字和分数,例如:Ioue 500

现在,每次用户得分时,我都会添加分数,并检查高分。然而,我不知道如何做排行榜。有人能指引我吗

这个脚本是用户注册的地方,它是一个不同的场景

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);