Unity AddComponent возвращает ноль - PullRequest
0 голосов
/ 09 марта 2020

У меня Monobehavior с или без компонента Rigidbody2D. Я хочу получить или создать его, если необходимо.

AddComponent , возвращает ноль в моей игре. Часто, не каждый раз, появляется журнал.

Использование:

  • Unity 2019.2.19
  • Android Платформа
void Start()
{
    Rigidbody2D rb = gameObject.GetComponent<Rigidbody2D>() ?? 
        gameObject.AddComponent<Rigidbody2D>();

    if (rb == null)
    {
        Debug.LogError("No way to be here!");
    }
}

Я могу удалить ?? и сделать это в несколько строк, это не изменит ошибку.

У вас есть решение, чтобы получить компонент Rigidbody2D?

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Попробуйте сделать это так:

void Start()
{
    Rigidbody2D rb = gameObject.GetComponent<Rigidbody2D>();
    if(rb == null)
    {
        rb = gameObject.AddComponent<Rigidbody2D>();
    }

    //this check is redundant cause the null check is done previously, but is done to maintain your structure
    if (rb == null)
    {
        Debug.LogError("No way to be here!");
    }
}

Примечание: Также имейте в виду, что Components является производным от UnityEngine.Object, который не поддерживает нуль-коалесцирующий оператор .

0 голосов
/ 10 марта 2020

Я нашел решение. Оператор объединения не работает с MonoBehavior и . Мне нужно получить Компонент в третий раз, чтобы он заработал. Кажется, что AddComponent не работает с Rigidbody2D.

Этот код работает:

Rigidbody2D  rb = gameObject.GetComponent<Rigidbody2D>();

if (rb == null)
{
    rb = gameObject.AddComponent<Rigidbody2D>();
}

if (rb == null)
{
    rb = gameObject.GetComponent<Rigidbody2D>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...