您需要创建一个 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 ()
{
}
}
为每个对象设置位置。使用分数脚本对分数执行相同操作。
在游戏开始时将玩家偏好添加到列表中,否则在尝试检索名称/分数时会出错。需要与列表大小相同。
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 添加到列表中,将可比较的分数添加到列表中,对列表进行排序,保存列表,显示保存的列表。我是新手,所以请放轻松批评;)