禁用对象时,来自.activeInHierarchy的输出仍为true Unity

时间:2019-03-07 13:27:32

标签: c# unity3d

我目前正在学习Unity的基础知识,像往常一样,当人们在学习新东西时,我有点受阻。

有一个下降的多维数据集与某物体碰撞时被设置为不活动状态。我打算制作一个父脚本,以检查多维数据集是否处于活动状态。当它处于非活动状态时,它将在控制台中输出布尔值eActive的状态。

但是,只要下降的多维数据集与某些东西发生碰撞,它就会消失,但是布尔值的输出仍然为真。

两个脚本:

Enemy.cs

using UnityEngine;

public class Enemy : MonoBehaviour {

GameObject enemy;

// Use this for initialization
void Start () 
{
    enemy = GameObject.Find("Enemy");
    enemy.SetActive(true);
}

public void OnCollisionEnter(Collision collision)
{
    enemy.SetActive(false);
}
}

EnemySpawn.cs

using UnityEngine;

public class EnemySpawn : MonoBehaviour {

GameObject enemy;
public bool eActive ;

// Use this for initialization
void Start () 
{
    enemy = GameObject.FindWithTag("Enemy");
    eActive = enemy.activeInHierarchy;
    Debug.Log(eActive);
}

// Update is called once per frame
void Update () 
{
    Destroyed();
}

void Destroyed()
{
    if (!eActive)
    {
        Debug.Log(eActive);
    }
}
} 

很想听听我做错了什么,如果有更好的方法可以在Unity中做这些事情!

非常感谢:)

1 个答案:

答案 0 :(得分:0)

您的代码中有两个问题

1-)您为size()中的eActive分配了一个值,并且在禁用对象时从不更新它。因此永远都是正确的,因为它永远不会更新。

2-)使用Start代替GameObject.activeSelf,因为您只是启用和禁用了该对象,并且该对象没有父母!。另外,您不需要布尔变量来保存activeInHierarchy或关心更新它。 Unity只需使用它即可为您完成。

因此您的activeSelf方法应如下所示:

Destroy

祝你好运!