Есть ли способ проверить, был ли GameObject уничтожен? - PullRequest
0 голосов
/ 03 ноября 2019

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

Я пробовал разные подходы, но, похоже, ни один из них не делает то, что я хочу

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DeadOrAlive : MonoBehaviour
{

    public GameObject Player;
    public GameObject deadPanel;

    void Update()
    {
        if (!GameObject.FindWithTag("Player"))
        {
            deadPanel.SetActive(true);
        }
    }


}

Ответы [ 2 ]

3 голосов
/ 03 ноября 2019

Чтобы проверить, был ли объект уничтожен, вы должны использовать MonoBehavior's OnDestroy, например, так:

// Attach this script to the player object
public class DeadOrAlive : MonoBehaviour
{
    public GameObject deadPanel;

    void OnDestroy()
    {
        deadPanel.SetActive(true);
    }
}

Вы также можете вместо того, чтобы уничтожать объект игрока, установить его активным / неактивным, ночтобы проверить, является ли игрок мертвым или живым таким образом, вам понадобится отдельный объект, который проверяет активное состояние:

//Attach this to a object which isn't a child of the player, maybe a dummy object called "PlayerMonitor" which is always active
public class DeadOrAlive : MonoBehaviour
{
    public GameObject deadPanel;

    void Update()
    {
        if (!GameObject.FindWithTag("Player"))
        {
            deadPanel.SetActive(true);
        }
    }
}

Некоторое время не использовал единицы и забыл, как странно это может получиться.

0 голосов
/ 03 ноября 2019

Спасибо @VincentBree, вот как я это сделал

  void Update()
{
    if (!Player.activeSelf)
    {
        deadPanel.SetActive(true);
    }
}
...