Как сделать коллизию в unity 2d

Обновлено: 06.07.2024

Alerr
> стукались об 2D collider
Проще на месте 2D коллайдера сделать еще один - 3D? с которым и будет коллизия у патиклов.

А прицепить свой никак. (

Alerr
> прицепить руками каждому партиклу колайдер
Патиклы генерятся динамически. КакВы собираетесь прицеплять к тому, что еще не существует?
Даже если Вам удастся такое чудо - это будет значительно более ресурсоемко.

Ну, дело такое. Я генерирую N партиклов.
Затем хочу прицепить к ним колайдер, а потом включить анимацию или что там еще. Не важно.
До партиклов я добрался через particleSystem, а вот как к ним прицепить колайдер 2D так и не понял(

Ну т.е. Вы собираетесь каждый кадр
- получать ParticleSystem.GetParticles
- проходить циклом по полученному массиву частиц. В цикле
- проверять, есть ли коллайдер у частицы. Если нет - добавлять.
- если есть - менять размер в соответствии с текущим размером частицы.
Это ОЧЕНЬ ресурсоемко. Не говоря уже о том, что много коллайдеров == тормоза.
Не удивительно что такой фичи нет.
PS: можете подождать пока Юнитеки сделают нормальную коллизию частиц с 2D колладером. Они это еще в 2013 году обещали

Ну да, я понимаю что это ОООЧЕНЬ ресурсоемкое дело(
Как смогу так и упрощу, но мне нужно просто понять как добавить колайдер партиулу.
Это задача номер 1. Может партикл это не GameObject?

Приветствую всех друзья! В прошлой статье я рассказал о настройках физики для 3D проектов в окне настроек проекта. Сегодня я продолжу цикл статей о настройках проекта, и на очереди у нас вкладка настройки физики для 2D проектов.

Используйте настройки 2D физики (находятся в окне настроек проекта по пути Edit\Project Settings , вкладка Physics 2D ), чтобы применить глобальные настройки для 3D физики.

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

  • Gravity - Установите величину силы тяжести, применяемой ко всем двумерным игровым объектам с компонентом Rigidbody2D . Как правило, вы устанавливаете гравитацию только для отрицательного направления оси Y .
  • Default Material - Установите ссылку на физический материал PhysicsMaterial2D для использования по умолчанию, если ни один из них не был назначен отдельному Collider2D .
  • Velocity Iterations - установите число итераций, выполняемых физическим движком для разрешения эффектов скорости. Более высокие числа приводят к более точной физике, но за счет процессорного времени.
  • Position Iterations - установите количество итераций, выполняемых физическим движком для разрешения изменений положения. Более высокие числа приводят к более точной физике, но за счет процессорного времени.
  • Velocity Threshold - установите пороговое значение для упругих столкновений. Unity рассматривает столкновения с относительной скоростью ниже этого значения как неупругие столкновения (то есть сталкивающиеся игровые объекты не отскакивают друг от друга).
  • Max Linear Correction - установите максимальную линейную коррекцию положения, используемую при решении ограничений (от 0,0001 до 1000000). Это помогает предотвратить промахи.
  • Max Angular Correction - установите максимальную угловую поправку, используемую при решении ограничений (от 0,0001 до 1000000). Это помогает предотвратить промахи.
  • Max Translation Speed - установите максимальную линейную скорость игрового объекта с компонентом RigidBody2D при любом обновлении физики.
  • Max Rotation Speed - установите максимальную скорость вращения игрового объекта с компонентом RigidBody2D при любом обновлении физики.
  • Baumgarte Scale – установите коэффициент масштаба, определяющий, как быстро Unity разрешает наложение коллизий.
  • BaumgarteTimeofImpactScale - установите коэффициент масштаба, определяющий, как быстро Unity разрешает перекрытия времени воздействия.
  • Time to Sleep - время (в секундах), которое должно пройти после того, как Rigidbody2D перестанет двигаться, прежде чем он заснет.
  • Linear Sleep Tolerance - установите линейную скорость, ниже которой Rigidbody2D переходит в спящий режим после истечения времени сна.
  • Angular Sleep Tolerance - Установите скорость вращения, ниже которой Rigidbody2D переходит в спящий режим после истечения времени сна.
  • Default Contact Offset - установите значение расстояния близости для коллайдеров, которые будут считаться контактирующими, даже если они фактически не находятся в контакте. Коллайдеры, расстояние между которыми меньше суммы их значений смещения контактов, генерируют контакты. Это позволяет системе обнаружения столкновений прогнозировать и применять ограничение контакта даже при незначительном разделении объектов. Слишком большое уменьшение этого значения может подорвать способность Unity вычислять непрерывные полигональные коллизии. И наоборот, слишком большое увеличение значения может создать артефакты для столкновения вершин.
  • Auto Simulation - включите этот параметр, чтобы автоматически запускать физическую симуляцию или разрешить явное управление ею.
  • Queries Hit Triggers - включите эту опцию, если вы хотите, чтобы Collider2D , отмеченный как триггер, возвращал попадание, когда любой физический запрос (например, LineCast или RayCast ) пересекается с ними. По умолчанию включено.
  • Queries Start In Colliders - включите эту опцию, если вы хотите, чтобы физические запросы, которые начинаются внутри Collider2D , обнаруживали коллайдер, в котором они начинаются.
  • Callbacks On Disable - включите эту опцию, чтобы производить обратные вызовы столкновений, когда коллайдер с контактами отключен.
  • Auto Sync Transforms - включите эту опцию, чтобы автоматически синхронизировать изменения преобразования ( Transform ) с физической системой.
  • Layer Collision Matrix - определите, как ведет себя система обнаружения столкновений на основе слоев. Выберите, какие слои матрицы столкновений взаимодействуют с другими слоями, проверив их.

Настройки Job options (Experimental).

Параметры данных настроек позволяют настроить использование системы Job System для настройки многопоточной физики.

🏓 Создаем 2D-игру на Unity: инструкция для новичка

Недавно мы рассказали о том, как научиться разработке игр на Unity . Продолжим тему на практике и покажем, как новичку создать на этой платформе первую 2D-игру.

Если вы хотите получить более систематическое образование в области разработки игр, мы рекомендуем рассмотреть факультет разработки игр онлайн-университета GeekBrains.

Двумерные игры сравнительно просты: для них не требуется сложных 3D-моделей, программный код по сравнению с 3D-проектами выглядит понятнее. Такие игры популярны как на десктопах, так и на мобильных устройствах. Unity также позволяет разрабатывать игры и для браузеров.

За последние годы вышло много популярных двумерных игр:

Программная реализация 2D-игр проще не только из-за отсутствия третьего измерения: на самой сцене меньше объектов, вместо трехмерных моделей плоские спрайты, вместо скелетной анимации – покадровая. А еще 2D-игры проще портировать на другие платформы – легче найти новую аудиторию.

Давайте создадим простую игру в жанре пинг-понг 🏓 . Перед тем как приступить к созданию игры, продумайте, какой именно результат хотите получить. На первых этапах рекомендуется использовать схематические шаблоны, чтобы быстрее получить работающий результат. В этой инструкции мы так и поступим. Графических ресурсов использовать не будем: и ракетки, и отбиваемый мяч будем пока отображать простыми белыми спрайтами.

Предварительно рассмотрим основные понятия Unity, без понимания которых будет проблематично создать игру:

Предполагаем, что вы уже установили редактор и создали аккаунт на портале Unity.

В первую очередь создадим новый проект и откроем его настройки (Edit → Project Settings). Во вкладке Editor установим параметр Default Behaviour Mode в значение 2D

Настройка проекта Детальная настройка проекта

Следующим шагом сохраним текущую активную сцену, назвав ее, например, Scene1. Теперь создадим основные игровые объекты: ракетку, мяч и менеджер игры, в котором будет храниться основная логика игры.

1. Создаем пустой объект, переименовываем в GameManager.

Создаем пустой объект

Создаем пустой объект

3. Создаем квадратный спрайт, называем его Pad (Assets → Create → Sprites → Square). Аналогично создаем круглый спрайт Ball (Assets → Create → Sprites → Circle). Масштабируем спрайт Pad со следующими параметрами – x:0.5, y:2.5, z:1.

Создаем спрайты

Создаем спрайты

4. Создаем префабы для Pad и Ball, после чего добавляем к ним компонент Box Collider 2D (включаем параметр Is Trigger) и компонент Rigidbody 2D (выставляем параметр Body Type в значение Kinematic).

Добавляем .компонент Box Collider 2D Настраиваем.компонент Box Collider 2D Добавляем компонент Rigidbody 2D Масштабируем спрайты

6. Заполняем скрипты следующим кодом.

GameManager.cs Ball.cs Pad.cs

6. Добавляем к префабу Ball и Pad теги с аналогичными именами. Выделив префабы, в инспекторе мы можем видеть выпадающий список тегов. Там же расположены и кнопки для добавления и редактирования тегов.

7. В настройках камеры выставляем параметр Projection в значение Orthographic, а параметр Clear Flag – в значение Solid Color.

Настройка камеры

Настройка камеры

8. Настраиваем кнопки, как показано на следующих скриншотах (Edit → Project Settings → Input Manager).

Настройка ввода, основное Настройка ввода, первый игрок Настройка ввода, второй игрок

Вот и всё, игра готова!

Пинг-понг, итоговый результат

Пинг-понг, итоговый результат

Билд для платформы Windows

1. Официальный туториал от Unity, где детально рассмотрен процесс создания roguelike RPG.

2. Youtube-канал Brackeys , где можно найти серию видеоуроков по созданию 2D-платформера.

3. Youtube-канал N3K EN содержит множество уроков как по отдельным компонентам Unity, так и полноценные серии уроков по созданию игр с нуля.

Если у вас мало опыта в разработке игр на Unity, мы рекомендуем обратить внимание на факультет разработки игр GeekBrains . Материал хорошо структурирован и содержит все необходимое для того, чтобы стать профессиональным Unity-разработчиком.

В числе прочего вы разработаете 2D-платформер с физическими загадками и динамическим освещением, научитесь портировать его на мобильные устройства. Кроме того, разработаете полноценную браузерную стратегию, а также игру в жанре двухмерных гонок.

По окончании обучения вы будете иметь портфолио из 4 игр, которое можно показать на собеседовании. Если же какая-то часть материала будет непонятна, вы всегда можете обратиться к персональному преподавателю.

Стрельба для двухмерной игры, платформера. Пример, прежде всего будет интересен начинающим игроделам, впрочем, не только, так как вариант уже готовый, бери и используй. Код достаточно простой, легко отредактировать если что. Стрельба реализована не через луч, а объектами. То есть, как в обычном платформере, чтобы пули были видимы. Подойдет для игры наподобие, как Contra или для управления какой-нибудь турелью. Реализовано вращение указанного объекта по оси Z, допустим, автомата. И предусмотрено ограничение на вращения. Настраиваются такие параметры как, скорость пули и скорострельность.

2D платформер, стрельба

Для организации стрельбы в платформере, нам понадобится спрайт оружия и пули.

Итак, добавляем на сцену пустой объект, и делаем спрайт оружия дочерним к нему. В дальнейшем, чтобы скрипт работало правильно, вращать мы будем именно дочерний спрайт оружия, но не родителя. Теперь, для спрайта оружия надо еще один пустой дочерний ему объект и пододвинуть его в то место, откуда будут вылетать пули. Важно помнить, что определяющая тут ось Х, проще говоря она должна "вылетать" из дула, в этом же направление будут потом лететь пули.


Далее, на родителя модельки нашего оружия вешаем скрипт FireScript2D:

Создадим модельку пули. Там дело на пару кликов. На спрайт пули вешаем компонент Rigidbody 2D и параметр Gravity Scale ставим на ноль, чтобы выключить гравитацию. Добавляем коллайдер и ставим галочку Is Trigger. И перетаскиваем объект в папку с префабами.

Читайте также: