Выход из .activeInHierarchy по-прежнему истина, когда объект отключен Unity - PullRequest
0 голосов
/ 07 марта 2019

В настоящее время я изучаю основы 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 голосов
/ 07 марта 2019

В вашем коде две проблемы

1-) Вы присваиваете значение eActive в Start и никогда не обновляете его, когда объект отключен. Так что это всегда так, потому что никогда не обновляется.

2-) Используйте GameObject.activeSelf вместо activeInHierarchy, поскольку вы просто включаете и отключаете объект, и у вашего объекта нет родителей! . Также вам не нужна логическая переменная для хранения activeSelf или ее обновления. Unity делает это для вас, просто используйте это.

Итак, ваш Destroy метод должен выглядеть следующим образом:

void Destroyed()
{
    if (!enemy.activeSelf)
    {
        Debug.Log("Enemy is not active");
    }
}

Удачи!

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