Начало работы с физикой в Unity
Моим самым слабым предметом в школе была физика, и она стала причиной многих ночных кошмаров по мере приближения экзаменов. Много Много Много…….. лет спустя физика все еще не моя сильная сторона, и поэтому я решил построить машину Руба Голдберга.
Для тех, кто не знает, что это такое, вот объяснение из Википедии:
Машина Руба Голдберга — это машина, специально разработанная для выполнения простой задачи косвенным и сверхсложным образом. Часто эти машины состоят из ряда простых устройств, связанных друг с другом для создания эффекта домино, в котором каждое устройство запускает следующее, а первоначальная цель достигается только после многих шагов.
Вот мой опыт его создания, и он оказался не таким простым, как я думал, хотя это буквально просто физические компоненты, которые применяются к игровым объектам, без какого-либо кодирования!
Настройка проекта и идеи Unity
- Создал новый 3D проект.
- Создал новую сцену
- Создал свои различные папки (мой ocd, чтобы все было на своих местах)
- Затем я нарисовал на старой доброй коре дерева (бумаге) то, каким должен быть узор.
- Каких реакций я хочу,
- Как я хочу, чтобы мяч струился,
- Как мяч должен стартовать и выйти на сцену и,
- Каким должен быть конечный результат.
- Я также использовал некоторые ресурсы 21-го века и погуглил несколько идей о том, как я хочу, чтобы моя машина Руба Голдберга работала.
- Итак, в теории это было моим представлением о том, как я хотел, чтобы моя машина работала:
- Мяч падает и приземляется на наклонную платформу
- Мяч скатывается вниз и приземляется на следующий откидной плоский уровень.
- Теперь здесь мяч может катиться вправо и удариться о навесную стену.
- Толкание блока вверху стены
- Толкание второго мяча с уровня
- Спуск на несколько уровней
- Удар по предыдущему навесному плоскому уровню
- Скатывается вниз и падает на последний уровень
- Скатывается в домино, из-за чего домино падает
- А потом падает на землю
- ИЛИ ЖЕ
- Навесная стена для инвалидов
- Мячи катятся вниз по уровню
- Опускается на более низкий уровень
- Скатывается вниз и падает на последний уровень
- Скатывается в домино, из-за чего домино падает
- А потом падает на землю
- Теперь здесь мяч может катиться вправо и удариться о навесную стену.
Создайте сцену
- Имея свой рисунок, я теперь мог планировать, какие активы и игровые объекты мне нужны.
- Получение разных уровней друг над другом, установка стен, наклонных уровней и т. д. заняло у меня большую часть времени, которое я использовал для создания этого тестового проекта.
- Вся сцена буквально состоит из плоскостей, кубов и сфер.
- Я сделал это очень простым, так как хотел сосредоточиться на физической части.
- Я создаю новый материал для каждого объекта:
- Щелчок правой кнопкой мыши в любом месте области проекта
- Нажмите «Создать».
- Нажмите на материал
- Для этого упражнения я буквально просто меняю цвет альбедо на основных картах.
- Перетащил недавно созданный материал на мой игровой объект в компоненте Mesh Renderer.
- Так выглядела грубая построенная идея
Добавление физики шарнирного соединения
- Первое, что понадобилось физике, — это шары.
- Я добавил Rigidbody к каждому мячу и оставил настройки по умолчанию.
- Я поднял мяч в воздух и нажал кнопку воспроизведения, чтобы проверить, работает ли физика мячей.
- Затем я выбрал, на каком игровом объекте я хотел бы иметь компонент шарнирного соединения, который был самым длинным уровнем в этой сцене.
- Я добавил компонент
- Выбрал объект
- нажал добавить компонент
- Тип шарнирного соединения
- Выбрал его.
- Я снова проверил, какой будет эффект……. ничего такого……. ничего не происходило.
- Поиграв некоторое время с настройками шарнирного соединения, я понял, что значение оси, по которой должен двигаться шарнир, было неправильным.
- Установка для оси Z значения 1, а для X и Y значения 0 создала эффект качелей, к которому я стремился.
- Все остальные настройки я оставил по умолчанию.
- Пока у меня есть мяч, падающий на уровень, скатывается вниз и затем падает на мой шарнирный уровень.
- Проблема заключалась в том, что мои качели опускались влево, когда мне нужно было, чтобы они упали вправо, чтобы мяч не улетел за край, и полностью не попал в целевые костяшки домино.
У меня есть ощущение, что это связано с тем, что вес моих игровых объектов (уровня) не распределяется одинаково, как хорошо сбалансированные весы, но я не хотел тратить слишком много времени на устранение неполадок.
- Поэтому в качестве быстрого решения я добавил куб справа от уровня качелей, чтобы сбалансировать вес и заставить мой мяч катиться вправо.
- В то время как мяч катится вправо, он становится тяжелее справа, и поэтому качели открывают пространство между кубом, стеной и следующим уровнем, через которое мяч может упасть.
- Наконец, мяч катится на самый низ и ударяется о костяшки домино, прежде чем упасть на землю.
Добавление компонента Hinge к «Hammer Wall»
- Другой вариант, с которым я экспериментировал, заключался в том, чтобы удалить шарнирное соединение с самого длинного уровня и добавить его к желтой стене.
- На приведенной ниже диаграмме вы увидите, что эта стена имеет «головку молота» вверху, а перед ней расположен еще один шар (компонент твердого тела).
- Мяч 1 падает с неба,
- Он скатывается на один уровень,
- Сбегает на следующий уровень,
- Ударяется о желтую стену,
- Отталкивает стену
- Толкает молот вперед
- Сталкивание мяча 2 с верхнего уровня
- Мяч катится по всем уровням
- Добирается до земли
- Мяч 1 все еще катится, в то время как мяч 2 делает свое дело, и ударит по домино плоской стороной, как в примере 1.
Добавление соединения Spring в GameObject
- Пока возился, я решил изменить способ опускания моего шара и хотел проверить пружинный шарнир.
- Я создал коробку для мяча с кубиками
- Я добавил компонент пружинного соединения к игровому объекту коробки.
- К этому игровому объекту добавлен компонент твердого тела.
- Я оставил все настройки по умолчанию, кроме замораживания вращения:
- В настройках компонента твердого тела
- Ограничения
- Отметьте все 3 поля для оси XYZ рядом с вращением
- Теперь он подпрыгивает, как пружина
- Я повернул всю коробку немного вперед, чтобы мяч отскакивал при старте на платформу.
- Чем выше вы поместите свой мяч, тем большую силу он приложит к коробке, и, следовательно, эффект пружины будет больше и будет выше или выше.
Возникшие проблемы
Не работает физический компонент
- Проверьте, на какой оси вы отмечаете как 1
- Убедитесь, что объект, к которому присоединен физический компонент, не находится в прямом контакте с другим телом (что-то с границей сетки). Это приведет к тому, что ваш объект, к которому прикреплен физический компонент, будет вести себя очень странно, например, мой неконтролируемо трясется.
С того момента, как сцена началась, физика начала имитировать, а не только имитировать при прикосновении.
- снимите флажок гравитации на твердотельном компоненте. Это заставит объект реагировать только тогда, когда с ним взаимодействуют.
Игровой объект с шарниром Spring подпрыгивал повсюду
- Заморозить вращение по осям XY и Z.
- Эффект отскока будет больше похож на пружину, а не на эластичный шнур.
Мяч скатывается с краев уровней
- У меня не было краев на моих уровнях. Я добавил несколько ребер, чтобы мяч не сбивался с пути, если он отклонится от платформы.
Завершение
Во время написания этого блога я продолжал настраивать вещи здесь и там, поскольку, похоже, мне нравится эта задача гораздо больше, чем я ожидал. Я добавил еще несколько ящиков, пружин и выступов, сгладил некоторые эффекты и добавил больше костяшек домино.
Вот мой окончательный результат, который я не перестану улучшать, так как у меня большие планы на то, что начиналось как небольшой проект.