我需要开发LeaderBoard来存储Games.Just中球员的详细信息(意味着分数),在UNITY3D.so中显示球员在LeaderBoard上的分数,请帮助我我没有任何想法。在下面的代码中,社交平台NameSpace是存在的,但我不知道如何开始,以及如何在unity3d中实现LeaderBoard。
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 ()
{
}
}发布于 2013-10-15 21:47:24
您需要创建一个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.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 ()
{
}}
将每个object.Do的位置设置为与分数脚本相同的分数。
在游戏开始时,将玩家首选项添加到列表中,否则在尝试检索姓名/分数时会出现错误。需要与列表大小相同的数量。
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);不知道我是否很好地解释了这一点,但您基本上需要将playerpref添加到列表中,将可比较的分数添加到列表中,对列表进行排序,保存列表,显示保存的列表。我对此还是个新手,所以请轻松接受批评;)
发布于 2013-07-16 13:03:10
如果你指的是像本地高分表那样的排行榜,你需要两个函数: 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这样的东西(看看这个例子)。
https://stackoverflow.com/questions/17667948
复制相似问题