NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта Unity2D - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь собрать систему оружия на единстве, используя c#. Я пытаюсь изменить значение из сценария в другое, но у меня возникли некоторые проблемы. Я пытаюсь изменить номер оружия на 1.

using UnityEngine;

public class Pew : MonoBehaviour
{
public int weapon = 0;
}

Итак, я использую эту строку кода

using UnityEngine;

public class PickUpBow : MonoBehaviour
{

    public void OnCollisionEnter2D(Collision2D collision)
    {
    GameObject thePlayer = GameObject.Find("ThePlayer");
    Pew pew = thePlayer.GetComponent<Pew>();
    pew.weapon = 1;
    }
}

Но когда я касаюсь объекта, он дает мне следующая ошибка: «Ссылка на объект не установлена ​​на экземпляр объекта Unity», в следующей строке: Pew pew = thePlayer.GetComponent<Pew>();

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Я предполагаю, что столкновение произошло с игроком.

Проблема в том, что GameObject.Find ("ThePlayer") ищет в иерархии любой игровой объект с именем точно . Возможно, в названии есть пробел. Не рекомендуется использовать этот метод, потому что он может вызвать проблемы такого рода.

Итак, вместо:

GameObject thePlayer = GameObject.Find("ThePlayer");
Pew pew = thePlayer.GetComponent<Pew>();

Будьте лучше, как:

GameObject thePlayer = collision.gameObject;
Pew pew = thePlayer.GetComponent<Pew>();

Проблема с этим новым кодом состоит в том, что мы предполагаем, что столкновение происходит с игроком, но что если враг?

Хорошее решение - использовать Теги , а теперь:

if(collision.gameObject.CompareTag("Player") 
{
    GameObject thePlayer = collision.gameObject;
    Pew pew = thePlayer.GetComponent<Pew>();
}
0 голосов
/ 09 апреля 2020

Это означает, что thePlayer равно null.

Это означает, что назначение не сработало: GameObject thePlayer = GameObject.Find("ThePlayer");

, убедитесь, что это работает: GameObject.Find("ThePlayer");

Документы: https://docs.unity3d.com/ScriptReference/GameObject.Find.html

Эта функция возвращает только активные объекты GameObject. Если GameObject с именем не может быть найден, возвращается ноль.

Убедитесь, что имена совпадают правильно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...