2013-12-13 2 views
7

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

здесь является частью того, что не дозвонились:

void OnCollisionEnter(UnityEngine.Collision col) { 
     Debug.Log("collision!!!"); 
     foreach(ContactPoint contact in col.contacts) { 
      //checking the individual collisions 
      if(contact.Equals(this.target)) 
      { 
       if(!attacking) { 
        Debug.Log("hitting target"); 
       } else { 
        Debug.Log("dying"); 
        //engage death sequence 
       } 
      } 
     } 
    } 

Даже не «столкновение !!!» появится сообщение. Я понимаю, что неправильное использование, или я что-то забыл?

+0

также компоненты, прикрепленные к объекту: transform; визуализатор спрайтов; box collider 2D; кольцевой коллайдер 2D; вражеский контроллер (скрипт); твердотельный 2D; Аниматор; –

+1

Пожалуйста, отредактируйте ваше сообщение] (http://stackoverflow.com/posts/20567692/edit), чтобы добавить эту информацию, не добавляйте ее в качестве комментария, поскольку она может быть пропущена. – Dave

+0

OnCollisionEnter не будет вызываться, если вы 'using characterController. У этого есть свой собственный метод столкновений (я не могу найти его сейчас, чтобы связать его). –

ответ

32

Вы используете 2D коллайдеров и rigidbodies ??. Если так использовать эту функцию вместо OnCollisionEnter

void OnCollisionEnter2D(Collision2D coll) 
    { 
     Debug.Log(coll.gameObject.tag); 

    } 
+0

СПАСИБО ВАМ ТАК ЭТО! – Torch2424

+0

Огромное спасибо человеку! – dharmesh

1

Вы должны убедиться, что матрица столкновений (Edit-> Project Settings-> Physics) не исключает столкновений между слоями, к которым принадлежат ваши объекты.

Unity Docs

Вы также должны убедиться, что другой объект имеет: коллайдер, Rigidbody и что сам по себе или любым из этих компонентов объект не отключен.

+4

Я, в конце концов, понял, что для 2D-коллизий вам нужно использовать метод OnCollisionEnter2D (Collision2D col). –

+0

Да, это тоже: D – Alex

1

Вот что я делаю:

  1. Убедитесь, что объект, который вы хотите столкнуться с мишенью имеет не-кинематической Rigidbody и сетки коллайдер. Мой объект нападающего является кубом и просто меняет его коллайдер на сетчатый коллайдер.
  2. На инспекторе цепочки мешков убедитесь, что вы включили выпуклый. Подробнее см. Подробный инспектор цеха косилки here

Теперь ваш OnCollisionEnter работает. Я надеюсь, это поможет вам.

0

потому что вы ошибочно указали название класса параметра. это не делает ошибок, также не работает. например:

OnCollisionEnter(Collider other) //this is wrong 
OnCollisionEnter(Collision other) //this is correct 
0

Вам просто нужно прикрепить скрипт к тому же объекту, чья потребность обнаруживает столкновение.

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