Unity GameOver Screen - PullRequest
       23

Unity GameOver Screen

0 голосов
/ 12 мая 2019

Я просто пытаюсь активировать игру поверх экрана, когда активация игрока установлена ​​на «ложь». Там нет анимации, только

Есть 3 объекта, которые должны быть активными, и я добавил скрипт к этим 3 объектам, но экран не появляется.

Как я могу это исправить?

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

public class GameOverManager : MonoBehaviour
{
    public GameObject _player;

    void Start()
    {
        _player = GameObject.FindGameObjectWithTag("Player");
    }

    void Update()
    {
        if (_player.activeInHierarchy == false)
        {
            gameObject.SetActive(true);
        }

        else
        {
            gameObject.SetActive(false);
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 12 мая 2019

Мое подозрение следующее. Когда Gameobject не включен, его код не запускается. Проверьте это, добавив сообщение Debug.Log ("test").

Если сообщение не появляется, вы можете быть уверены, что эта проверка никогда не проверяется. Чтобы обойти это, просто добавьте скрипт, который привязан к активному игровому объекту. Создайте новый пустой игровой объект на сцене. И добавьте что-то вроде этого:

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

public class GameOverManager : MonoBehaviour
{
    public GameObject _player;
    public GameObject _endscreen;

    void Update()
    {
        if (_player.activeInHierarchy == false)
        {
            _endscreen.SetActive(true);
        }

        else
        {
            _endscreen.SetActive(false);
        }
    }
}

Назначьте переменные в Инспекторе, перетащив объект в пустые поля. Никогда не используйте GameObject.Find Методы.

Если вам нужна дополнительная помощь, скажите мне:)

0 голосов
/ 12 мая 2019

Основываясь на ответе Франца, я сделал некоторые изменения в коде.Вам не понадобится оператор if else, если вы используете ярлык.

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

public class GameOverManager : MonoBehaviour
{
    public GameObject _player;
    public GameObject _endscreen;

    void Update()
    {
    _endscreen.SetActive(!_player.activeInHierarchy);
    }
} 
0 голосов
/ 12 мая 2019

В данный момент вы находите один GameObject и проверяете, активен он или нет.

Было бы более разумным и более оптимизированным, если бы каждый объект игрока добавлялся в список всех игроков, когда он появлялся. Затем вы можете просмотреть этот список, чтобы проверить всех игроков.

Еще лучший способ был бы, если бы вы вызывали эту проверку «GameOver» только после смерти игрока. Поэтому, когда вы вызываете тот метод, который его убивает.

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