NullReferenceException [РЕШЕНО]

Программирование на Юнити.

NullReferenceException [РЕШЕНО]

Сообщение Fredo 08 янв 2011, 21:02

Здраствуйте, помогите пожалуйста решить проблему. Возникает исключение NullReferenceException на 19 строчке GameField. Если строку закоментировать все работает, самое интересное что в инициализации GameCell метод ChangeType работает нормально.

Вот ошибка
Код: Выделить всё
NullReferenceException
GameCell.ChangeType (CellType ct) (at Assets/GameCell.cs:64)
GameField.Start () (at Assets/GameField.cs:19)


GameField
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class GameField : MonoBehaviour
{
        private GameObject[,] gameField;
        private int[,] gameFieldLines;
               
        // Инициализация
        void Start ()
        {
                gameField = new GameObject[10,10];
                LoadLevel();
                for(int i = 0; i < 10; i++)
                {
                        for(int j = 0; j < 10; j++)
                        {
                                gameField[i,j] = (GameObject)Instantiate(Resources.Load("Game Cell/Cell"));
                                gameField[i,j].GetComponent<GameCell>().ChangeType((CellType)gameFieldLines[i,j]);
                                gameField[i,j].transform.Translate(i,0,j);
                        }
                }
        }
       
        // Обновление
        void Update ()
        {
                //gameField[5,5].transform.Translate(Vector3.forward * Time.deltaTime);
        }
       
        public void LoadLevel()
        {
                gameFieldLines = new int[10,10];
               
                for(int i = 0; i < 10; i++)
                {
                        for(int j = 0; j < 10; j++)
                        {
                                gameFieldLines[i,j] = 2;
                        }
                }
        }
}
 


GameCell
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public enum CellType                            // Типы ячеек игрового поля
{
        VOID,                                                   // Пустое место
        BRICKS,                                                 // Кирпичи
        BORDER                                                  // Неразрушимые блоки
}

public class GameCell : MonoBehaviour
{
        #region Public Fields

        public int x;                                   // Индекс ячейки по x
        public int y;                                   // Индекс ячейки по y
        public CellType cellType;               // Тип ячейки
       
        #endregion
       
        #region Private Fields
       
        private GameObject bricksCell;
        private GameObject borderCell;
       
        #endregion
       
        // Инициализация
        void Start ()
        {
                // Получаем ссылки на дочерние обьекты-типы ячейки
                bricksCell = transform.Find("Bricks Cell").gameObject;
                borderCell = transform.Find("Border Cell").gameObject;
               
                // Скрываем дочерние обьекты
                ChangeType(CellType.VOID);
               
                // TEMP
                ChangeType(CellType.BORDER);
        }
       
        // Обновление
        void Update ()
        {

        }
       
        public void ChangeType(CellType ct)
        {
                cellType = ct;
                switch(cellType)
                {
                case CellType.VOID:
                        bricksCell.renderer.enabled = false;
                        borderCell.renderer.enabled = false;
                        break;
                       
                case CellType.BRICKS:
                        bricksCell.renderer.enabled = true;
                        borderCell.renderer.enabled = false;
                        break;
                       
                case CellType.BORDER:
                        bricksCell.renderer.enabled = false;
                        borderCell.renderer.enabled = true;
                        break;
                }
        }
}
 


У меня возникают подозрения что я как то неправильно вызываю ChangeType из GameField.
Последний раз редактировалось Fredo 09 янв 2011, 09:43, всего редактировалось 1 раз.
Аватара пользователя
Fredo
UNITрон
 
Сообщения: 213
Зарегистрирован: 06 янв 2011, 05:37

Re: NullReferenceException

Сообщение Fredo 09 янв 2011, 08:59

Проблема решена путем замены Start() на Awake() в GameCell. Правда я не понимаю каким образом это помогло в данном контекте, разве что могу предположить что Start() функции исполняются по очереди и в го которые я клонировал инстантом, start() не срабатывал до окончания start() в GameField.
Аватара пользователя
Fredo
UNITрон
 
Сообщения: 213
Зарегистрирован: 06 янв 2011, 05:37


Вернуться в Скрипты

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

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