Unity GameOver屏幕

时间:2019-05-12 07:42:25

标签: c# visual-studio unity3d

我只是想在玩家的激活为“ false”时通过屏幕激活游戏。没有动画,只有

需要激活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 个答案:

答案 0 :(得分:2)

以下是我的怀疑。每当未启用Gameobject时,其代码都不会运行。通过添加Debug.Log(“ test”)消息进行测试。

如果未显示任何消息,则可以确定此检查不会评估。要解决此问题,只需添加绑定到活动gameObject的脚本。在场景中创建一个新的空游戏对象。并添加如下内容:

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方法。

如果您需要其他帮助,请告诉我:)

答案 1 :(得分:0)

您当前正在做的是找到一个GameObject并检查它是否处于活动状态。

如果每个玩家对象在生成时将自己添加到所有玩家的列表中,那将更有道理,并且会得到优化。然后,您可以遍历该列表来查看所有玩家。

一种更好的方法是,如果您仅在玩家死亡后才调用“ GameOver”检查。因此,当您调用任何一种方法杀死他时。

答案 2 :(得分:0)

基于Franz Answer,我对代码进行了一些修改。如果使用快捷方式,则不需要任何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);
    }
}