销毁Unity3D GameObject之前的Arrayoutofbounds

时间:2019-01-11 20:11:35

标签: c# unity3d

我希望这个对象一旦超过Array的数量,便会自行销毁,但是,它将抛出ArrayOutOfBounds。我想知道是否可以解决这个问题。

我也尝试过:

if (ObjectSprite[spriteNumber + 1] == null)

我希望这能行得通,但是我是开发新手,所以我被困在这里

public class DestroyableObject : MonoBehaviour {

    public GameObject coin;
    public int spriteNumber = 0;
    public Sprite[] ObjectSprite;

    void Update () 
    {
        SpriteUpdate();
    }

    void SpriteUpdate()
    {
        this.GetComponent<SpriteRenderer>().sprite = ObjectSprite[spriteNumber];

        if (spriteNumber > ObjectSprite.Length)
        {
            Instantiate(coin, this.transform.position, Quaternion.identity);
            Destroy(this.gameObject);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您正在尝试访问数组,然后检查spriteNumber是否大于数组。您应该首先检查spriteNumber是否超出范围,然后尝试访问ObjectSprite

void SpriteUpdate()
{
    // if we're within the bounds of the array
    if (spriteNumber < ObjectSprite.Length)
    {
        this.GetComponent<SpriteRenderer>().sprite = ObjectSprite[spriteNumber];
    }
    // if we're outside the bounds of the array
    else
    {
        Instantiate(coin, this.transform.position, Quaternion.identity);
        Destroy(this.gameObject);
    }
}

请注意,if语句中的条件已被翻转;仅当spriteNumber小于数组长度时,才会在if块内执行代码。还提供了一个else子句,当先前的条件不再成立(它不在数组的范围内)时,它将实例化硬币并销毁对象。