0

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

有 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);
        }
    }
}
4

3 回答 3

2

我的怀疑如下。每当未启用游戏对象时,其代码就不会运行。通过添加 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 方法。

如果您需要任何进一步的帮助,请告诉我 :)

于 2019-05-12T08:02:35.477 回答
0

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

如果每个玩家对象在他生成时将自己添加到所有玩家的列表中,这将更有意义,也更优化。然后,您可以遍历该列表来检查所有玩家。

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

于 2019-05-12T08:09:06.260 回答
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);
    }
} 
于 2019-05-12T10:23:45.123 回答