2016-11-26 5 views
0

My GameObject начинает отдыхать на полу. isKinematic имеет значение true, а триггер установлен на true на коллайдере окна.GameObject не обнаруживает столкновение с полом

Когда игрок касается коллайдера. Он перемещает GameObject ниже, чтобы полать. Затем я устанавливаю isKinematic равным false, а триггер - false. Это заставляет игровой объект падать, пока он не достигнет пола и не остановится. Моя проблема заключается в том, что игровой объект попадает в пол и останавливается. Я не могу заставить GameObject признать, что он столкнулся с полом. У меня есть команда Debug.Log в OnCollisionEnter2D и OnCollisionStay2D. Debug.Log не появляется на консоли при касании. Почему это?

В GameObject есть ригидный корпус и коллайдер. На полу есть коробчатый коллайдер и Rigidbody.

void OnTriggerEnter2D(Collider2D other) 
{ 
    if (other.gameObject.tag == "Player") 
    { 
     Debug.Log ("Player is touching the section"); 
     //sectionRigidbody.isKinematic = true; 
     if (readyToDrop == false) 
      //moves player 
     transform.position += newPosition; 
     readyToDrop = true; 
     sectionRigidbody.isKinematic = false; 
     sectionBoxCollider.isTrigger = false; 
     sectionRigidbody.collisionDetectionMode = CollisionDetectionMode2D.Continuous; 
     //sectionRigidbody.isKinematic = true; 
    } 
} 

void OnCollisionEnter2D(Collider2D col) 
{ 
    if (col.gameObject.tag == "Floor") 
    { 
     Debug.Log ("section is touching the floor"); 
    } 
} 

void OnCollisionStay2D(Collider2D col) 
{ 
    if (col.gameObject.tag == "Floor") 
    { 
     Debug.Log ("section is touching the floor"); 
    } 
} 

enter image description here enter image description here

+0

Поместите весь свой Debug.Log за пределы инструкции тега if, затем проверьте снова – Programmer

+0

переместил его на улицу и все еще ничего @Programmer –

+0

Опубликовать screeenshot компонентов, прикрепленных к объекту GaemObject. – Programmer

ответ

0

Обратите внимание при использовании функции обратного вызова столкновений с параметром.

OnTriggerEnter2D принимает Collider2D как параметр. Вы получили это право.

OnCollisionEnter2D и OnCollisionStay2D принимает Collision2D как параметр NOT Collider2D. Здесь вы потерпели неудачу.

Collider2D и Collision2D звучит так симлар, но не то же самое.

Они не будут вызываться, если вы ошиблись в их параметре.

В последней версии Unity при внесении этой ошибки в Редакторе будет выброшена ошибка. Это выглядит примерно так:

Script error: OnCollisionEnter2D This message parameter has to be of type: The message will be ignored.

и

Script error: OnCollisionStay2D This message parameter has to be of type: The message will be ignored.

Решение:

Replace

void OnCollisionEnter2D(Collider2D col) и void OnCollisionStay2D(Collider2D col)

с

void OnCollisionEnter2D(Collision2D col) и void OnCollisionStay2D(Collision2D col).