2016-10-08 8 views
0

Итак, как следует из названия, мой OnCollisionEnter не вызывается. Я не знаю, почему. Объекты отскакивают от поверхностей, с которыми они контактируют.OnCollisionEnter() не работает с жестким телом и непрерывным обнаружением при подпрыгивании ..?

Вот соответствующий код:

static Rigidbody m_ProjectileRigidbody; 
internal void FireProjectile(GameObject projectile, float speed) 
{ 
    projectile.transform.position = 
     State.PlayerTransform.position + State.PlayerTransform.forward; 
    projectile.transform.rotation = State.PlayerTransform.rotation; 

    m_ProjectileRigidbody = projectile.GetComponent<Rigidbody>(); 
    m_ProjectileRigidbody.AddForce 
     (State.PlayerTransform.forward * speed, ForceMode.Impulse); 

    if (State.PlayerState.Consumes) 
    { 
     State.PlayerState.ConsumeCellEnergy(EnergyConsumption); 
     State.PlayerState.GenerateCellHeat(HeatProduction); 
    } 
} 

void OnCollisionEnter(Collision collision) 
{ 
    Debug.Log("Collided With: " + collision.gameObject.name); 
} 

enter image description here

+0

Примечания: События коллизии отправляются только в том случае, если один из коллайдеров также прикреплен без кинематической жесткости. «Вы знаете об этом? –

+0

Яр. Вот почему я поставил скриншот сборника. Это не кинематика. –

+0

Вы работаете с 2D-коллайдером? Можем ли мы увидеть объект, с которым он сталкивается? – Matriac

ответ

3

Если вы работаете с 2D colliders и rigidbodies, используйте OnCollisionEnter2D вместо OnCollisionEnter.

И удостоверьтесь, что в таблице Edit -> Project Settings -> Physics правильно установлена ​​матрица столкновений.

А также, дважды проверьте, что:

  1. Оба объекта имеют collider, rigidbody правильно настроить.
  2. Оба объекта активны.
  3. Вы не случайно отключите collider, rigidbody или установите isKinematic, isTrigger из вашего сценария.
+0

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