繁体   English   中英

销毁Unity3D GameObject之前的Arrayoutofbounds

[英]Arrayoutofbounds before destroying Unity3D GameObject

我期望这个对象一旦超过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);
        }
    }
}

您正在尝试访问数组,然后检查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子句,当先前的条件不再成立时(它将超出数组的范围),它将实例化硬币并销毁对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM