2014-09-30 6 views
0

Хорошо, у меня есть 2 монеты в моей сцене, как из них под названием «Монета», если судно Срабатывает монету монеты Destroy по телефонуUnity Как проверить, если объект не существует

Destroy(this.gameObject); 

У меня также есть который не активирован (путем снятия отметки рядом с именем объекта в инспекторе)

Так что мне нужно монеты, когда обе монеты уничтожены. Я хочу, чтобы посадочный модуль был активным. Я сделал это и работа этого кода в скрипте монеты:

var landing : GameObject; 

function OnTriggerEnter2D (other : Collider2D) { 

    Destroy(this.gameObject); 
    if(Coin){ 

     Debug.Log("Object exist"); 

    }else{ 

     landing.SetActive(true); 

    } 

} 

результат меня в том, что монета разрушает, когда я попал в первую монету (То, что должно произойти), но когда я попал в следующую монету это разрушает, но не делает посадочный модуль активным, так как я могу сделать посадочный модуль активным только в том случае, если на месте нет монеты.

+0

Где находится "Монета"? Я подозреваю, что это может указывать на ваш сборник, который всегда будет существовать. Вам нужно что-то, что смотрит на * всю сцену * для соответствующих GameObjects. Итак, возможно, GameObject.Find («Coin»), но это дорого стоит, поэтому вы не должны часто это использовать, если можете этого избежать. –

ответ

1

Я отредактировал вопрос, насколько я мог, так что он может работать, но оставаться таким простым, как вы, кажется, пытаетесь Оставь это. Я не тестировал его с тех пор, как я работаю прямо сейчас. Я думаю, что это должно работать с головы, если не ошибаюсь. Дай мне знать.

Также, если бы я сделал это для общего использования, я сделаю «Монитор игр для монет» и наполним массив или еще лучше, перечислим монеты и просто скажу, что менеджер вычитает монеты до тех пор, пока окончательное условие не будет встретил. Тогда он будет работать правильно для N монет.

Еще один способ - пометить Монеты, а затем выполнить поиск gameobject в начале() вашего gameObject, но если бы это был я, я бы предпочел решение менеджера и был намного более мощным и гибким, так как вы можете расширить это сделать кучу дополнительных вещей, связанных с монетами в вашей игре.


Это происходит потому, что вы разрушаете() монета _before активации landing.SetActive(), просто двигаться Destroy() линию до конца, после того, как если (Coin) заканчивается, он должен это исправить.

// Coin gameObject script - This sample code requires that you Tag your Ship gameObject: "Ship" 
 

 
// Note this is not too efficient as you have to assign trough the Inspector! 
 
public var landing : GameObject; 
 
public var myOtherCoin : GameObject; 
 

 
function OnTriggerEnter2D (other : Collider2D) { 
 

 
    if (other.tag == "Ship") 
 
    { 
 
     if (myOtherCoin != null) 
 
     { 
 
     Debug.Log("There's still another coin, Self destructing..."); 
 
     Destroy(this.gameObject); 
 
     } 
 
     else 
 
     { 
 
     Debug.Log("There's no other coins.. Activating Landing!"); 
 
     landing.SetActive(true); 
 
     Debug.Log("Landing Active... Self destructing now!"); 
 
     Destroy(this.gameObject); 
 
     } 
 
    } 
 
    
 
}

+0

По-прежнему посадочная машина никогда не станет истинной – user3182651

+0

У меня есть две монеты, имеющие один и тот же сценарий и одноименное имя. – user3182651

0

Если бы я тебя, я бы создать еще один GameObject в сцене, арбитратор сортов, которые будут иметь сценарий, содержащий количество существующих монет (2 в начале) и способ уменьшения этого счетчика. Затем, прежде чем уничтожить свою монету, вы вызовете этот метод в арбитре. Кроме того, в методе декремента вы можете проверить количество монет, и если вы только что уменьшили его до 0, автоматически активируйте посадочную площадку. Это определенно дешевле, чем периодически проверять всю сцену для монет.

Смежные вопросы