Ответ 1
У меня была та же проблема, что OnCollisionEnter
не OnCollisionEnter
, и нашел этот вопрос.
Для меня проблема заключалась в том, что я делал 2D-игру, поэтому ответом является использование функции OnCollisionEnter2D
.
У меня есть объект с коллайдером сетки и сборный с коллайдером сферы. Я хочу, чтобы экземпляр сборного дома был уничтожен, если они столкнутся.
Я написал следующее в сценарии:
private void OnCollisionEnter(Collision c)
{
if (c == target)
Destroy(transform.gameObject);
print("something"); // Doesn't get printed
}
Но это не работает. Я попытался переключить isTrigger
на обоих объектах.
У меня была та же проблема, что OnCollisionEnter
не OnCollisionEnter
, и нашел этот вопрос.
Для меня проблема заключалась в том, что я делал 2D-игру, поэтому ответом является использование функции OnCollisionEnter2D
.
Посмотрите на этот стол
Если вы хотите, чтобы ваш OnCollisionEnter
вызывался, убедитесь, что:
(а) К обоим объектам прикреплен коллайдер.
(b) Ни один из объектов не является триггером-триггером (это вызовет функцию OnTrigger, а не OnCollisionEnter)
(c) Один из объектов (не имеет значения, какой из них) является жестким, не кинематическим и нестатическим объектом (второй не обязательно должен быть твердым телом).
(d) Из-за вычислительных трудностей MeshCollider может столкнуться с трудностями при столкновении с другими мешами, используйте их с осторожностью.
(д) Убедитесь, что оба объекта находятся в одном слое.
Убедитесь, что у одного из них имеется некинематический жесткий диск. Взято из документов Unity:
Когда возникает столкновение между двумя коллайдерами и , если хотя бы один из них имеет прикрепленный Rigidbody, три сообщения о столкновении отправляются к прикрепленным к ним объектам. Эти события могут обрабатываться в сценариях и позволяют создавать уникальное поведение с использованием или без использования встроенного ядра NVIDIA PhysX.
Отсюда: Unity3D MeshCollider
Вы пытались использовать класс OnTriggerEnter() и устанавливали коллайдер объекта на триггер?
Если ему не нужно сообщать, с чем он сталкивается, вы можете сделать простой
void OnTriggerEnter(){
Destroy(transform.gameObject);
}
Edit:
Также я сделал OnCollision, как этот
private string hitobject;
void OnCollisionEnter(UnityEngine.Collision hit)
{
hitobject = hit.gameObject.tag;
if(hitobject == "Plane")
{
isgrounded = true;
}
}
Ни один из объектов не является триггером, и им не нужны рабочие тела, чтобы работать.
У меня была похожая проблема. Коробчатый коллайдер был не таким большим, как объект столкновения. Установка значений x и z на 2 единицы устранила проблему!