C# 错误CS0021:无法将带[]的索引应用于“UnityEngine.GameObject”类型的表达式

C# 错误CS0021:无法将带[]的索引应用于“UnityEngine.GameObject”类型的表达式,c#,unity3d,C#,Unity3d,我试图使用Unity预制件进行简单的爆炸,但它一直在说 错误CS0021:无法将带[]的索引应用于“UnityEngine.GameObject”类型的表达式 我检查了代码,没有发现问题。以下是我尝试过的: public GameObject[] ParticlePrefab; public int amountOfPartcles = 3; // Use this for initialization void Start () { for(i

我试图使用Unity预制件进行简单的爆炸,但它一直在说

错误CS0021:无法将带[]的索引应用于“UnityEngine.GameObject”类型的表达式

我检查了代码,没有发现问题。以下是我尝试过的:

public GameObject[] ParticlePrefab; 
public int amountOfPartcles = 3; 

// Use this for initialization  
void Start () 
{               
    for(int i = 0; i<amountOfPartcles; i++) 
    {
        GameObject ParticlePrefab = Instantiate(ParticlePrefab[Random.Range(0,amountOfPartcles)]);
        ParticlePrefab.transform.position = transform.position;
    }
}

问题是您使用相同名称ParticlePrefab两次

此外,是否确实要更改粒子数量变量以选择粒子。按照这种方式,如果性能差异小于所需的粒子数量,它可能会随机崩溃

以下是如何使用启动方法:

void Start () 
{    
    const int numberOfPrefabs = ParticlePrefab.Length;           
    for(int i = 0; i<amountOfPartcles; i++) 
    {
        GameObject particle = Instantiate(ParticlePrefab[Random.Range(0,numberOfPrefabs)]);
        particle.transform.position = transform.position;
    }
}

核心问题是你有两件事叫做ParticlePrefab——改变其中一件的名字。你为什么要重新声明ParticlePrefab?您在顶部将其声明为数组,现在又将其声明为开始中的局部变量。感谢它解决了索引问题,但现在它显示为Assets/Explosion。cs12,46:错误CS0133:分配给'NumberOfPrefables'的表达式必须是constantRemove常量。