我只是想在玩家的激活为“ 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);
}
}
}
答案 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);
}
}