Почему gameobject не null после удаления?

Делаю игру - бесконечный раннер с видом сбоку. Платформы, по которым бежит игрок, движутся влево и когда касаются объекта где-то за экраном, то платформа, которая коснулась его, уничтожается, после чего создаётся новая. Всего есть 2 платформы (в коде platform1 и platform2), которые идут друг за другом соответственно, когда срабатывает OnTriggerEnter на объекте Destroyer (который за экраном), то платформа уничтожается (по идее platform1 становится null), и я ожидаю срабатывания условия, после чего platform1 начинает ссылаться на platform2, а platform2 в свою очередь становится новым объектом.

[SerializeField] GameObject prefabPlatform;
[SerializeField] GameObject platform1;
[SerializeField] GameObject platform2;

private void OnTriggerEnter(Collider other)
{
    Destroy(other.gameObject);

    if (platform1 == null)
    {
        platform1 = platform2;
        platform2 = Instantiate(prefabPlatform, platform1.transform.position + new Vector3(0, 0, 4.8f), Quaternion.identity);
    }
}

OnTriggerEnter срабатывает, объекты, коснувшиеся его уничтожаются, но почему-то не срабатывает условие, хотя в Inspector'е platform1 считается Missing (GameObject) (рис. 1).

Рис. 1

Вставлял это условие в FixedUpdate и Update, всё работает. Подскажите, где почитать об этом или что сделать.


Ответы (1 шт):

Автор решения: Alemkhan Utepkaliev

Значение становиться null после удаления, в инспекторе отображается Missing, потому что это поле с ссылкой, и ссылка пропала (Missing), Вы уничтожаете объект (хотя стоит завести туда проверку, чтобы не уничтожать наверное все коллайдеры вошедшие в триггер), но он не успел обработать это, но это гарантирует удаление, выполняйте действие дальше

И чтобы избежать ошибок не используйте ссылку на объект который собираетесь удалить в виде platform.transform из вашего кода. Сохраните значение до начало его удаления

private void OnTriggerEnter(Collider other)
{
    if(other.GetComponent<Platform>()) // Необходима проверка что в триггер вошёл именно платформа, для этого используйте что нибудь характерное для вашей платформы, я указал пример
    {
        Vector3 oldPlatformPosition = platform1.transform.position;

        Destroy(other.gameObject);

        platform1 = Instantiate(prefabPlatform, oldPlatformPosition + new Vector3(0, 0, 4.8f), Quaternion.identity);
    }
}
→ Ссылка