Понедельник, 11 Ноября 2024, 12:37

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помогите NullReferenceException
SmallNibblerДата: Суббота, 25 Июля 2015, 10:13 | Сообщение # 1
частый гость
Сейчас нет на сайте
Пожалуйста помогите, я не понимаю в чем проблема, почему вылетает ошибка?

Код
using UnityEngine;
using System.Collections;

public class GameController : MonoBehaviour {
   
  public GameObject hookPrefab;

  Grid grid;

  void Start ()  
  {
   grid = GetComponent<Grid>();
   CreateHook();
  }
   
  public void CreateHook()
  {
   int action = Random.Range (0, 2);
   Hook hook = Instantiate (hookPrefab, new Vector3((action * -21) + 16, 8, 0), Quaternion.identity) as Hook;
   hook.SetParams(5, action);
  }
}


NullReferenceException: Object reference not set to an instance of an object
GameController.CreateHook () (at Assets/Scripts/GameController.cs:25)
GameController.Start () (at Assets/Scripts/GameController.cs:18)
KamiRoninДата: Суббота, 25 Июля 2015, 10:46 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
для хорошего тона программирования всегда нужно проверять: if(hook != null) hook.SetParam(...);
а так, тут нарушена логика.
hook - это наверняка скрипт-компонент. Инстансится геймообъект или UI объект, скрипт не инстансится, он должен быть прикреплен к геймобъекту.
Поэтому:
1. 24 строка должна быть GameObject hookObj = Instantiate(...) as GameObject;
2. 25 строка должна быть Hook hook = hookObj.GetComponent<Hook>();
и только потом if(hook != null) hook.SetParams(...);


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Суббота, 25 Июля 2015, 10:47
YellowAfterlifeДата: Суббота, 25 Июля 2015, 10:51 | Сообщение # 3
Сейчас нет на сайте
А переменная hookPrefab задана (через интерфейс или иначе)? Потому что если нет, Instantiate на null вернет null, и впоследствии программа попытается вызвать SetParams у null, что и вызовет данную ошибку.

SmallNibblerДата: Суббота, 25 Июля 2015, 10:54 | Сообщение # 4
частый гость
Сейчас нет на сайте
Да, всё верно. Просто я думал что если написать при создании объекта так, как написал я, то в переменную заносится ссылка на компонент. Спасибо!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг