Ошибка цикла. NullReferenceException

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Ошибка цикла. NullReferenceException

Сообщение mepihin 24 июн 2013, 01:06

Пишу скрипт на уничтожение всех объектов, после выполнения задания. Но когда я выполняю задание и условие удовлетворяет заданным правилам, то выдает ошибку на цикл внутри условия.
NullReferenceException: Object reference not set to an instance of an object

Почему и как исправить.
Спасибо.
Синтаксис:
Используется csharp
private void Update () {
                blocks = GameObject.FindObjectsOfType(typeof(EventPick)) as GameObject[];
                if(isWhite == true && curWhiteBlocksLength == whiteBlocksLength) {
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        isWhite = false;
                        NewQuest();
                }
                if(isBlack == true && curBlackBlocksLength == blackBlocksLength) {
                        isBlack = false;
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        NewQuest();
                }
                if(isGreen == true && curGreenBlocksLength == greenBlocksLength) {
                        isGreen = false;
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        NewQuest();
                }
                if(isYellow == true && curYellowBlocksLength == yellowBlocksLength) {
                        isYellow = false;
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        NewQuest();
                }
                if(isRed == true && curRedBlocksLength == redBlocksLength) {
                        isRed = false;
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        NewQuest();
                }                      
        }
Аватара пользователя
mepihin
UNIверсал
 
Сообщения: 418
Зарегистрирован: 01 янв 2013, 20:58
Откуда: Россия - Москва
Skype: live:snukler

Re: Ошибка цикла. NullReferenceException

Сообщение wirexia 24 июн 2013, 01:13

Незнаю правильно ли я перевёл:
"не задана ссылка на экземпляр объекта"
FantasyGame(c)2013
Аватара пользователя
wirexia
UNец
 
Сообщения: 39
Зарегистрирован: 20 май 2013, 00:54
Skype: strelok46000
  • ICQ

Re: Ошибка цикла. NullReferenceException

Сообщение waruiyume 24 июн 2013, 01:40

Не используйте оператор "as", если не собираетесь проверять результат на null. Если тип не может измениться, лучше использовать (), тогда исключение укажет на место, непредвиденного преобразования, а не вылезет непонятно где.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Ошибка цикла. NullReferenceException

Сообщение mepihin 24 июн 2013, 02:10

waruiyume писал(а):Не используйте оператор "as", если не собираетесь проверять результат на null. Если тип не может измениться, лучше использовать (), тогда исключение укажет на место, непредвиденного преобразования, а не вылезет непонятно где.

Переписал немного, теперь вот такая ошибка:
InvalidCastException: Cannot cast from source type to destination type.

Синтаксис:
Используется csharp
private void Update () {
                blocks = (GameObject[])GameObject.FindObjectsOfType(typeof(EventPick));
                curBlocks = blocks.Length;
                if(isWhite == true && curWhiteBlocksLength == whiteBlocksLength) {
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        isWhite = false;
                        NewQuest();
                }
                if(isBlack == true && curBlackBlocksLength == blackBlocksLength) {
                        isBlack = false;
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        NewQuest();
                }
                if(isGreen == true && curGreenBlocksLength == greenBlocksLength) {
                        isGreen = false;
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        NewQuest();
                }
                if(isYellow == true && curYellowBlocksLength == yellowBlocksLength) {
                        isYellow = false;
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        NewQuest();
                }
                if(isRed == true && curRedBlocksLength == redBlocksLength) {
                        isRed = false;
                        for (int i = 0; i < blocks.Length; i++) {
                                Destroy(blocks[i]);    
                        }
                        NewQuest();
                }                      
        }
Аватара пользователя
mepihin
UNIверсал
 
Сообщения: 418
Зарегистрирован: 01 янв 2013, 20:58
Откуда: Россия - Москва
Skype: live:snukler

Re: Ошибка цикла. NullReferenceException

Сообщение seaman 24 июн 2013, 07:40

FindObjectsOfType возвращает Object[] Ну а так как Вы ищете EventPick, по сути возвращает EventPick[]. Это в GameObject[] преобразовать нельзя.
Преобразуйте в EventPick[], а в Destroy получайте из EventPick нужный gameObject.
ЗЫ: ну а так - почитайте про ООП, наследование, типы и преобразование типов.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40