Не регистрировать удаленный дочерний объект - PullRequest
0 голосов
/ 19 января 2020

Я работаю над системой инвентаризации для Unity 3D. После того, как я уничтожил дочерний объект, я хочу проверить, все еще ли он там.

Проблема: Когда я запускаю программу, она напрямую не регистрирует, что ребенок был удален. Есть кто-то еще с такой же проблемой?

Код Добавить здоровье:

Slot1Child = slot1.transform.childCount; publi c bool Slot1 = true;

        if (Slot1Child == 0 & Slot1 == false)
        {

            Slot1 = true;
            Debug.Log("slot 1 is empty");
            break;
        }

И это вызов из этой функции:

    FindObjectOfType<Health>().SetHealthPus();
    Destroy(gameObject);
    FindObjectOfType<Inventory>().InventoryReset();

Когда игрок берет любой предмет, Slot1 устанавливается в True и Slot1Child устанавливается на количество дочерних элементов в слоте (в данном случае это только один). Проблема в том, что Slot1Child не меняется до того, как я запускаю команду if.

Спасибо за помощь.

1 Ответ

0 голосов
/ 20 января 2020

Привет, попробуйте использовать обходные пути, чтобы уничтожить, а затем подождать, а затем вызвать функцию, которая сначала проверяет, есть ли какие-либо дочерние элементы в «преобразовании», потому что позже у вас может быть несколько различных слотов ... затем, если еще есть дочерние элементы, проверьте их, чтобы увидеть, если там есть другое имя здоровья ... вы можете просто использовать первый if [if (transform.childCount> 0)], если у вас нет нескольких слотов

private IEnumerator DestroyThenWait(float waitTime){ 
       Destroy(gameObject);
       yield return new WaitForSeconds(waitTime);
       CheckSlot();
    }
public void CheckSlot(){
 if(transform.childCount > 0) //there is a child
 {
   for (var child : Transform in transform) {
    // do whatever you want with each child transform here
    // if your have multiple slots check if the health slot is among them
       if(child.name == "health"{
             //child with name health hasnt been removed maybe destroy again?
        }else{
             //child with name health has beed removed
           }
        }
 }else{
    //there is no children, every thing removed
 }
}

Как позвонить:

FindObjectOfType<Health>().SetHealthPus();
coroutine = DestroyThenWait(0.3f);//Set time to a third of a second enougth time to destroy
StartCoroutine(coroutine);
FindObjectOfType<Inventory>().InventoryReset();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...