C# UNITY3D?中的排行榜

monwx1rj  于 2023-01-31  发布在  C#
关注(0)|答案(2)|浏览(172)

我需要开发排行榜的存储细节(意味着分数)的球员在游戏中。只是显示球员在排行榜上的分数UNITY3D.so请帮助我我没有任何想法。在下面的代码社会平台命名空间是有,但我不知道如何开始和如何实现在unity3d排行榜。

using UnityEngine;
  using System.Collections.Generic;
  using UnityEngine.SocialPlatforms;

  public class LBoard : MonoBehaviour 
   {
        ILeaderboard leaderBoard;  
       // Use this for initialization
      void Start () 
        {
            leaderBoard = Social.CreateLeaderboard();
         }

      // Update is called once per frame
      void Update ()
       {

       }

   }
ljsrvy3e

ljsrvy3e1#

您需要创建一个IComparable类,并添加名称和分数等详细信息,按分数进行比较。

public class PlayerScore : IComparable<PlayerScore>

    public string name;
    public int score;

    public int CompareTo(PlayerScore other)
    {
    return this.score.CompareTo(other.score);
    }

你还需要一份名单

public static List<PlayerScore> scoreIndex = new List<PlayerScore>(5);

您需要某种方式从用户那里获取输入以添加名称。
添加分数时,创建iComparer类的对象,并设置名称、分数等。

PlayerScore a = new PlayerScore();//create instance
    a.name = PlayerStats.playerName;//set name
    a.score = PlayerStats.score;//and score

    scoreIndex.Add(a);

然后向List中添加新对象并对列表进行排序List.Sort();.如果你想反转,然后添加reverse().

scoreIndex.Sort ();                     
    scoreIndex.Reverse ();

将列表保存为播放器首选项,例如

PlayerPrefs.SetString("name0" , scoreIndex[0].name);
PlayerPrefs.SetInt("score0" , scoreIndex[0].score);
PlayerPrefs.SetString("name1" , scoreIndex[1].name);
PlayerPrefs.SetInt("score1" , scoreIndex[1].score);

要显示姓名和分数,请为姓名/分数创建3dText对象,并放置如下脚本

public class PlayerNameHS : MonoBehaviour 

public int pos;

void Start () 
{
    renderer.material.color = Color.black;

    TextMesh t = (TextMesh)gameObject.GetComponent(typeof(TextMesh));
        t.text =  PlayerPrefs.GetString("name" + pos);

}

void Update () 
{
}

}
为每个对象设置位置。用分数脚本为分数做同样的事情。
在游戏开始时添加球员首选项到列表中,否则你会得到一个错误,当试图检索名称/分数。需要与列表大小相同的数量。

PlayerScore a = new PlayerScore();
    a.name = PlayerPrefs.GetString("name0");
    a.score = PlayerPrefs.GetInt("score0");
    yourScript.scoreIndex.Add(a);

    PlayerScore b = new PlayerScore();
    b.name = PlayerPrefs.GetString("name1");
    b.score = PlayerPrefs.GetInt("score1");
    yourScript.scoreIndex.Add(b);

不知道我是否解释得很好,但你基本上需要添加playerprefs到列表,添加可比较的分数到列表,排序列表,保存列表,显示保存的列表。)

j7dteeu8

j7dteeu82#

如果您将排行榜视为本地高分表,则需要两个函数:AddScore和一个获得高分的函数。(注意这个例子是用C#编写的)

function AddScore(string name, int score){
   int newScore;
   string newName;
   int oldScore;
   string oldName;
   newScore = score;
   newName = name;
   for(int i=0;i<10;i++){
      if(PlayerPrefs.HasKey(i+"HScore")){
         if(PlayerPrefs.GetInt(i+"HScore")<newScore){ 
            // new score is higher than the stored score
            oldScore = PlayerPrefs.GetInt(i+"HScore");
            oldName = PlayerPrefs.GetString(i+"HScoreName");
            PlayerPrefs.SetInt(i+"HScore",newScore);
            PlayerPrefs.SetString(i+"HScoreName",newName);
            newScore = oldScore;
            newName = oldName;
         }
      }else{
         PlayerPrefs.SetInt(i+"HScore",newScore);
         PlayerPrefs.SetString(i+"HScoreName",newName);
         newScore = 0;
         newName = "";
      }
   }
}

接下来是高分:

void GetHighScores()
{
    for(int i = 0; i < 10; i++)
    {
        Debug.Log(PlayerPrefs.GetString(i + "HScoreName") + " has a score of: " +  PlayerPrefs.GetInt(i + "HScore"));
    }
}

如果你想创建一个网络/在线排行榜,你需要使用类似GameFly的东西(看看那个例子)。

相关问题