2016-02-11 1 views
0

У меня есть объект внутри границы, и я стреляю в объект (чтобы понять мой код, см. Этот урок: https://unity3d.com/learn/tutorials/projects/space-shooter/creating-hazards?playlist=17147). Shell (bullet) должен быть уничтожен после столкновения с объектом, но не мгновенно - после некоторой задержки (т. Е. Они сталкиваются и после некоторого количества секунд исчезает оболочка). Коллайдер Shell должен быть с триггером, но из-за этого она пролетает через объект. Shell должна исчезнуть после того, как она затронет объект. Я сделал задержку, чтобы успеть повлиять. Но если есть способ, он может мгновенно исчезнуть, тогда это здорово. Я просто хотел дать время оболочке, чтобы применить силу.Как заставить оболочку вытолкнуть объект после саморазрушения с задержкой (Unity3D)

 void OnTriggerEnter(Collider other) { 
    if (other.tag == "Boundary") 
    { 
     return; 
    } 
    //Destroy (gameObject); 
    StartCoroutine(WaitAndDestroy()); 
    } 
    IEnumerator WaitAndDestroy() { 
     yield return new WaitForSeconds(2); 
     Destroy (gameObject); 
    } 
+1

Что такое пуля? Что бы это ни было, вам нужно отключить его в этом состоянии. – trojanfoe

+0

@Scott Chamberlain сделано –

+0

Насколько велики коллайдеры для этих объектов? Иногда объекты могут «проскальзывать» друг с другом, не обнаруживаясь, если коллайдеры недостаточно велики. –

ответ

1

Попробуйте двигаться StartCoroutine(WaitAndDestroy()); над return заявление.

+1

Замечательно, что вы заметили проблему. Но, пожалуйста, ** существует огромная проблема с беспорядком здесь на SO с тегом Unity3D **. Результат будет заключаться в том, что на Unity3D не будет ответа на все вопросы - каждый будет игнорировать тег как мусор. Этот вопрос, безусловно, должен быть закрыт (лучше всего подходит «простая типографская ошибка»).Одна идея с таким тривиальным QA просто упоминает проблему в комментарии и нажимает «Закрыть». Вы получаете баллы за закрытие вопросов, которые должны быть закрыты. – Fattie

+0

Хорошо, я запомню. –

+0

@Pawel Marecki Кажется, вы не представляете, как работает этот код, потому что ваше предложение не имеет смысла. Но тем не менее я пытался - как я ожидал, ничего полезного не имеет. –

0

Необходимо использовать OnCollisionEnter(Collision other) и положить в него Destroy(other.gameObject). И коллайдеры должны быть без триггеров - на обоих взаимодействующих объектах.

+0

Вы все еще можете использовать один коллайдер, просто переместите свой код с 'OnTriggerEnter' на' OnColliderEnter' и убедитесь, что ваш коллайдер НЕ находится в режиме триггера. –

+0

@Scott Chamberlain действительно спасибо, напишите новый ответ или я должен добавить это мне? –

+0

Просто добавьте его на свой номер –

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

  • Нет связанных вопросов^_^