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