当不应该有一个范围异常的论据时继续接收?

时间:2019-06-20 16:15:35

标签: c# list unity3d outofrangeexception

最近,我尝试更改我正在Unity中开发的一款游戏脚本的代码,并且不断获取关于ColouredBallPositions[x - 1]值的参数超出范围的异常错误消息正在添加我的for循环。但是,对此的论点不应超出范围。

这是在统一控制台中显示的确切错误消息:

  

ArgumentOutOfRangeException:索引超出范围。一定是   非负数且小于集合的大小。

     

参数名称:索引   System.ThrowHelper.ThrowArgumentOutOfRangeException   (System.ExceptionArgument参数,System.ExceptionResource资源)   (位于<23c160f925be47d7a4fd083a3a62c920>:0)   System.ThrowHelper.ThrowArgumentOutOfRangeException()(在   <23c160f925be47d7a4fd083a3a62c920>:0)   System.Collections.Generic.List`1 [T] .set_Item(System.Int32索引,T   值)(在<23c160f925be47d7a4fd083a3a62c920>:0处)SpawnPoint.Start()   (位于Assets / SpawnPoint.cs:43)

我试图遍历StackOverflow和互联网,以获取为什么我可能会收到此错误消息的答案,但是我没有找到为什么我的代码会产生此错误消息的答案。

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

    public class SpawnPoint : MonoBehaviour
    {

        public Transform SpawnPoints;
        List<float> StarPositions = new List<float>();
        List<float> ColouredBallPositions = new List<float>();
        List<float> ColouredBallRanges = new List<float>();
        int Interact, randomSpawnPoint;
        public static bool spawnAllowed;
        ObjectPooler objectPooler;
        int index = 1;


        public void Start()
        {
            objectPooler = ObjectPooler.Instance;

            if (ScoreScript.scoreValue < 5)
            {

                Vector2 pos =                         
             Camera.main.WorldToViewportPoint(transform.position);


                for (int x = 1; x < 5; x++) // Change this to get rid of the need to generate spawnpoints
        {
            //Vector3 SpawnPos = spawnPoints[d].position;
            int NrSpawnpoints = 4;
            int NrSpaces = NrSpawnpoints + 1;
            double Xlegnth = 1.0;
            double spawnPosX = x * Xlegnth / NrSpaces;
            pos.x = (float)spawnPosX;
            pos.y = 1.3f;
            ColouredBallPositions[x - 1] = (float)spawnPosX;
            Vector2 Posi = Camera.main.ViewportToWorldPoint(pos);
            Instantiate(SpawnPoints, Posi, Quaternion.identity);

           // Debug.Log(Posi);

        }

        spawnAllowed = true;
        InvokeRepeating("SpawnAInteract", 0f, 1f);
    }

}

没有引发异常

1 个答案:

答案 0 :(得分:2)

我认为这里的问题是您所引用的索引不存在。

您在此处创建ColouredBallPositions

List<float> ColouredBallPositions = new List<float>();

下次使用它在这里:

ColouredBallPositions[x - 1] = (float)spawnPosX;

尽管ColouredBallPositions已初始化,但它是。实际上,您实际上没有使用索引x - 1创建任何内容,因此该索引超出范围。