Спящее кинематическое жесткое тело не вызывает OnCollisionStay

#unity3d #game-physics

#unity3d #игра-физика

Вопрос:

У меня есть система взаимодействия, которая полагается на событие OnCollisionStay, вызываемое на время перекрытия.

Физическая система переводит жесткое тело в спящий режим, и следующее не имеет никакого эффекта:

  • вызов rigidbody.WakeUp()
  • настройка rigidbody.sleepThreshold = 0;
  • вызов rigidbody.AddForce(Vector3.zero);

Ответ №1:

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

 void FixedUpdate()
{
    rigidbody.MovePosition(rigidbody.position);
}
 

Имейте в виду, что это обходит встроенную оптимизацию, поэтому используйте только при необходимости.