2016-09-18 1 views
-2

Хорошо, ребята и девочки. У меня опять проблема с кодом. В принципе, как только я начинаю и он пытается создать пакет здоровья он бросает ошибку, что:Почему я получаю исключение NullReferenceException при попытке создать HealthPack в Unity C#?

NullReferenceException: Ссылка на объект не указывает на экземпляр объекта HealthSpawnerScript.Update() (на активы/Scripts/HealthSpawnerScript.cs: 31)

Ниже приведен код, в котором я запущен. Игровой объект PlayerController содержит метод, используемый для возврата в состояние здоровья игрока с именем PlayerHealth(). В бодрствовании я установил playerController для поиска сценария и метода, которым я пользуюсь. Затем в обновлении я пытаюсь вызвать метод и назначить его переменной для использования в скрипте позже. Я знаю, что это должно быть просто, но у меня есть мозговые пердуны.

public PlayerController playerController; 
private int healthHolder; 

void OnAwake() 
{ 
    playerController = GameObject.Find ("PlayerHealth").GetComponent<PlayerController>(); 

} 
// Use this for initialization 
void Start() 
{ 
    //set healthExist to false to indicate no health packs exist on game start 
    healthExist = false; 

    //playerController = GameObject.Find ("PlayerHealth").GetComponent<PlayerController>(); 
} 

// Update is called once per frame 
void Update() 
{ 
    healthHolder = playerController.PlayerHealth(); 

ответ

0

Нет функции обратного вызова Unity под названием OnAwake. Вероятно, вы ищете функцию Awake.

Если это исправлено и ваша проблема все еще существует, вы должны разделить свой код на части и выяснить, что происходит.

playerController = GameObject.Find ("PlayerHealth").GetComponent<PlayerController>(); 

должен быть изменен на

void Awake() 
{ 
    GameObject obj = GameObject.Find("PlayerHealth"); 
    if (obj == null) 
    { 
     Debug.Log("Failed to find PlayerHealth GameObject"); 
     return; 
    } 

    playerController = obj.GetComponent<PlayerController>(); 
    if (playerController == null) 
    { 
     Debug.Log("No PlayerController script is attached to obj"); 
    } 
} 

Итак, если GameObject.Find("PlayerHealth") выходит из строя, это означает, что нет GameObject с этим именем в сцене. Проверьте правильность написания.

Если obj.GetComponent<PlayerController>(); не работает, нет сценария под названием PlayerController, который прилагается к GameObject PlayerHealth. Упростите вашу проблему!

+0

Не совсем то, что мне было нужно, но я это понял, я вызывал метод PlayerHealth, прикрепленный к PlayerController, вместо того, чтобы определять фактический объект, который будет PlayerShip, на котором был скрипт PlayerController. – Phillipv20

+0

Хорошо. Как насчет функции «OnAwake»? Это было правильно? – Programmer