Массив пределов перед уничтожением Unity3D GameObject - PullRequest
0 голосов
/ 11 января 2019

Я ожидал, что этот объект уничтожит себя, как только он превысит количество массива, однако он выбрасывает 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 голосов
/ 11 января 2019

Вы пытаетесь получить доступ к массиву, прежде чем проверять, больше ли 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 было перевернуто; Он будет выполнять код только внутри блока if, когда spriteNumber на меньше , чем длина массива. Предусмотрено также условие else, которое будет создавать экземпляр монеты и уничтожать объект, когда это предыдущее условие больше не выполняется (оно выходит за пределы массива).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...