列表C#(Unity) - 无法添加浮点值。

时间:2017-03-12 15:22:32

标签: c# list unity3d

我正试图在GameView中显示最佳分数,但我这样做并不奏效。

我有一个必须避开障碍的球员,但是当他没有这样做时,他将无法再移动,并且计分将被终止。然后,我想把这个特定的分数添加到我的List

但是,在我的代码中,没有添加任何分数,因为每当我开始游戏时,我都会收到"Argument out of range"错误,如果我运行Debug.Log,我可以看到我的列表中没有任何项目。< / p>

这是我的代码。 (在此代码中,我只想打印第一个索引上的分数,稍后我会添加if conditions以获得真正的最佳分数。您应该主要关注void Start()和前几行void Update()

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;

public class ScoreManager : MonoBehaviour {

    private float score = 0.0f;
    private int difficultyLevel = 1;
    private int scoreIncrementor = 1;
    private int maxdifficultyLevel = 10;
    private int scoreToNextLevel = 10;
    private bool isDead = false;
    private List<float> scoreBox;

    public Text scoreText;
    public Text bestScoreText;

    void Start(){
        scoreBox = new List<float> ();
        for(float i = 0; i <= scoreBox.Count; i++)
            bestScoreText.text = ("Best Score:  " + ((int)scoreBox [0]).ToString ());

    }


    void Update () {
        if (isDead) {
            scoreBox.Add (score);
            return;

        }
        if (score >= scoreToNextLevel)
            LevelUp ();
        score += Time.deltaTime;
        scoreText.text = ("Score: " + " "+ ((int)score).ToString ());
    }

    void LevelUp(){
        if (difficultyLevel == maxdifficultyLevel)
            return;

        scoreToNextLevel *= 2;
        difficultyLevel++;

        GetComponent<PlayerMovement> ().SetSpeed (scoreIncrementor);
    }

    public void OnDeath(){
        isDead = true;

    }
}

1 个答案:

答案 0 :(得分:6)

问题在于Start()方法。

void Start(){
    scoreBox = new List<float> ();
    for(float i = 0; i <= scoreBox.Count; i++)
        bestScoreText.text = ("Best Score:  " + ((int)scoreBox [0]).ToString ());
}

您正在创建一个没有元素的新列表,然后您尝试显示结果:但是不存在位置0的元素,因此您得到IndexOutOfRange例外。

<=更改为<(请记住,索引从0开始。但长度从1开始),scoreBox[0]应为scoreBox[i]

此外,如果您将列表转换为float,我可以问您为何将列表设为int吗?