2015-06-11 6 views
0

Участник класса MonoBehaviour теряет свое значение. Вот мой код, чтобы объяснить.значение переменной становится нулевым

У меня есть класс для хранения данных:

public class Tile 
{ 
    public string name; 
    public string id; 
} 

Существует второй класс, где я использую Tile класс:

public class TilesManager : MonoBehaviour 
{ 
    private List<Tile> tiles; 

    public void Awake() 
    { 
     tiles = new List<Tile>() 
     { 
      new Tile() { name="A", id="A" }, 
      new Tile() { name="B", id="B" }, 
      new Tile() { name="C", id="C" }, 
     }; 

     // here i set break point and the tiles has value and contains 3 items 
    } 

    public Tile GetTileAtIndex(int index) 
    { 
     if(index < 0) index = 0; 
     if(index > 2) index = 2; 

     // here i set break point the tiles value is null ! 
     return tiles[index]; 
    } 
} 

Я называю метод «GetTileAtIndex» из другого сценария. и он дает мне нулевое исключение ссылки в строке «return tiles [index];».

+0

Вы получаете доступ к экземпляру класса с помощью GetComponent в GameObject, который добавлен в иерархию, или вы создаете объект TilesManager с использованием нового оператора? –

ответ

0

плитки явно нулевые до тех пор, пока вы не пройдете метод Awake(). Назовите это первым, чтобы создать фрагменты.

+0

Этот скрипт связан с игровым объектом. Awake автоматически вызывается. Я использую точку останова, чтобы убедиться, что она вызвана, и плитки получили действительное значение. –

Смежные вопросы