2016-05-02 3 views
2

Я пытаюсь создать общую игру «Змея», используя Unity, чтобы укрепить мои знания основ C# и Unity.Unity OnTriggerEnter2D CompareTag || CompareTag inconsistency

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить игрока играть в Game Over при столкновении с телом. В настоящее время у меня есть чек столкновения настроить так:

void OnTriggerEnter2D(Collider2D other) 
{ 
    if (other.gameObject.CompareTag("Border") || other.gameObject.CompareTag("Body")) //if the player collides with a Border tag or Body tag... 
    { 
     //Game Over Sequence 
     GameOver(); 
    } 
    else if (other.gameObject.CompareTag("Collectable")) //otherwise if the player collides with a Collectable tag... 
    { 
     //Snek needs to grow! 
     shouldGrow = true; 
    } 
} 

Вот картина сборного инспектора змея тела, а также. Я проверил, чтобы тег был установлен в Body.

Граница столкновения работает нормально, и странная часть установки объекта границы с тегом «Body» также работает нормально, так что я не знаю, почему сегменты тела не вызывает Последовательность игры.

Я новичок в программировании, поэтому извиняюсь, если этот вопрос очевиден, но я не понимаю, почему это не работает.

Заранее благодарен!

EDIT: По желанию программиста, вот образ одного из инспекторов Пограничных в:

+0

'||' означает, что если он сталкивается с Border ** или ** Body, оператор if будет true. Поместите 'Debug.Log (« hit »);' перед вызовом функции GameOver(); 'и дайте мне знать, видите ли вы сообщение, когда вы коллайдер с Border или Body. – Programmer

+0

Сообщение появляется при столкновении с границей, а также при столкновении с спрайтом Border при настройке его типа на «Тело» (в качестве дополнительной проверки). Это не ** появляется ** при столкновении с сегментами тела змеи. Кажется, что тег «Body» и оператор If работают корректно, но по какой-то причине сам сборщик не запускает столкновение. Я также дважды проверял объект Snake_Body (Copy) во время выполнения, а на пороге - тег Body, поэтому я все еще потерян. – SolAureus

+0

Единственный способ узнать, верно ли то, что вы сказали, это удалить 'other.gameObject.CompareTag (« Border ») ||' на данный момент и просто проверить для «Body» в это время. Если он все еще не работает, измените свой вопрос, выберите «Граница» в единстве, сделайте снимок экрана и настройки и загрузите его здесь тоже так же, как и для тела. – Programmer

ответ

4

Tick «является Trigger» на коробке коллайдера в Snake_Body в. Без этого функция OnTriggerEnter2D не вызывается. Вы сделали это правильно на коллайдере с рамкой.

+0

Да, вот и все. С обеих картин, которые он загрузил. +1 – Programmer

+0

Да, я должен признаться, я смотрел на это в течение 20 минут, прежде чем я увидел это! Вторая фотография инспектора сделала это очевидным. –

+2

Ну.Я чувствую себя немного глупо, потому что это было что-то настолько простое и очевидное, хаха ... хорошо спасибо вам обоим за вашу помощь! – SolAureus

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