Я пытаюсь создать игру, в которой объекты можно перетаскивать, но у меня проблемы с физикой. С твердыми телами, которые имеют одинаковые массы, они иногда проталкивают друг друга при перетаскивании и вызывают нежелательные движения. Вот демо .
Я хотел бы сделать это, используя только встроенную физику Unity 3D .
В демоверсии вы можете использовать мышь для перетаскивания объектов. Все цилиндры имеют коробчатые коллайдеры и массы 10000. Они также имеют различные ограничения в зависимости от их ориентации (ни один не может вращаться, и все ограничены по x или y). Сфера имеет массу 1, коллайдер и ограничение az.
Сфера и цилиндры хорошо взаимодействуют. Однако перетаскивание цилиндров друг на друга вызывает пересечение. Я не хочу это!
Цилиндры имеют интерполяцию, установленную на «Интерполировать», а обнаружение столкновений установлено на «Непрерывный». Я бросил скрипт DontGoThroughThings на все цилиндры, но он, похоже, ничего не делает. Что касается установки скорости твердых тел, я использовал обе эти следующие строки с в основном одинаковым результатом:
rb.AddForce(speed * diff * Time.deltaTime - rb.velocity, ForceMode.VelocityChange);
//rb.velocity = speed * diff * Time.deltaTime;
Без написания собственного кода обнаружения столкновений у меня заканчиваются идеи. Есть простая настройка или я что-то пропустил?
С объяснением контекста, вот более точный вопрос: «Как я могу заставить цилиндры в моей демонстрации не перемещаться друг через друга?»