Рисуем с физикой Unity5

unity-iconВ прошлый раз мы рисовали и делали линии физическим телом, используя haxeflixel. Сегодня сделаем почти тоже самое используя Unity5. Но повторятся мы не будем и набросаем прототип бесконечного раннера.

circleСоздаем героя.

Не будем усложнять и сделаем нашего героя доблестным кругом с тремя отметками, дабы чувствовалась скорость вращения. (Добавляем Sprite Renderer с нашим мега-крутым кругом)

Добавим герою компоненты RigidBody2d и CircleCollider2d. И вот этот простой скрипт, задающий скорость вращения:

Теперь немного доработаем камеру. Добавим скрипт

Это простейший скрипт слежения за объектом с сохранением относительного расположения (чтобы герой был не по центру экрана, а в том месте, где мы его располагаем изначально). Не забываем в инспекторе перетянуть нашего героя в поле Hero.

Теперь создаем объект, в котором мы будем рисовать.

2015-03-15 19-45-29 Main.unity - DrawLineExample - WebGL (Personal)Здесь нам понадобятся:

— компонент LineRenderer , для которого необходимо создать материал. Материалу можно не задавать текстуру, а шейдер выставить Particles/Additive.

— компонент EdgeCillider2d — который и будет отвечать за нашу физику.

Настройки можно посмотреть на скриншоте. Поэкспериментировать самим — тоже не будет лишним.

Если в двух словах, то скрипт ждет пока кнопка мыши будет нажата, после этого каждый кадр записывает координаты мыши. По этим координатам отрисовывается линия. Так же эти точки передаются в edge collider, где по ним создается физика.

При беглом осмотре кода в глаза бросаются бесконечно растущие значения координат и разрастающиеся листы и массивы — все это в боевом проекте, при длительных игровых сессиях, приведет к неприятным последствиям. Но мы не забываем. что это прототип. Переписывать и оптимизировать будем когда начнем писать игру =)

Собственно это все, что я хотел рассказать.

Также я добавил на камеру bloom из standart assets (кстати, они в unity 5 бесплатные). И объект пола привязанный к камере, что бы наш доблестный герой не проваливался. Посмотреть, что получилось можно здесь WebGL (советую поставить Daft Punk на фоне =) )

UPD: У некоторых возникли проблемы с WebGL , вот билд с использованием UnityPlayer.

Проект на github’е