Описание
Включено спекулятивное непрерывное обнаружение столкновений для статических и динамических геометрий
Это режим обнаружения столкновений, который можно использовать как для динамических, так и для кинематических объектов. Как правило, это дешевле, чем в других режимах ПЗС. Он также намного лучше справляется с угловым движением. Однако в некоторых случаях высокоскоростные объекты могут по-прежнему проходить через другие геометрические формы.
//Этот скрипт позволяет вам переключать режим обнаружения столкновений нажатием клавиши пробела и перемещать ваш GameObject. Он также выводит возникающие коллизии на консоль.
//Прикрепите этот скрипт к GameObject и убедитесь, что он имеет компонент Rigidbody
//Если у него нет компонента Rigidbody, щелкните GameObject, перейдите к его инспектору и щелкните Добавить компонент. Затем перейдите в раздел Физика>Rigidbody.
//Создаем еще один GameObject. Убедитесь, что у него есть коллайдер, чтобы вы могли проверить коллизии между ними.
using UnityEngine;
public class Example : MonoBehaviour
{
Rigidbody m_Rigidbody;
void Start()
{
//Attach this script to a GameObject. Ensure that it has a Rigidbody component.
m_Rigidbody = GetComponent<Rigidbody>();
}
void Update()
{
//Press the space key to switch the collision detection mode
if (Input.GetKeyDown(KeyCode.Space))
SwitchCollisionDetectionMode();
}
//Switch between the different Collision Detection Modes
void SwitchCollisionDetectionMode()
{
switch (m_Rigidbody.collisionDetectionMode)
{
//If the current mode is continuous, switch it to continuous dynamic mode
case CollisionDetectionMode.Continuous:
m_Rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;
break;
//If the current mode is continuous dynamic, switch it to continuous speculative
case CollisionDetectionMode.ContinuousDynamic:
m_Rigidbody.collisionDetectionMode = CollisionDetectionMode.ContinuousSpeculative;
break;
// If the curren mode is continuous speculative, switch it to discrete mode
case CollisionDetectionMode.ContinuousSpeculative:
m_Rigidbody.collisionDetectionMode = CollisionDetectionMode.Discrete;
break;
//If the current mode is discrete, switch it to continuous mode
case CollisionDetectionMode.Discrete:
m_Rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
break;
}
}
}