最近,我尝试更改我正在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);
}
}
没有引发异常
答案 0 :(得分:2)
我认为这里的问题是您所引用的索引不存在。
您在此处创建ColouredBallPositions
:
List<float> ColouredBallPositions = new List<float>();
下次使用它在这里:
ColouredBallPositions[x - 1] = (float)spawnPosX;
尽管ColouredBallPositions
已初始化,但它是空。实际上,您实际上没有使用索引x - 1
创建任何内容,因此该索引超出范围。