Рисуем с физикой 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’е 

  • WeDoYouPlay

    работает норм

    • AGulev

      Отлично! =)

  • Ruslan Romanovich

    Здравствуйте Алексей. А можете объяснить как реализовать рисование физики с 3d объектами. То есть чтобы линия которую мы рисуем имела объем и влияла а физические тела (например столкновение с шаром). Очень хотелось бы получить помощи. Решил заняться разработкой, очень много идей. Но с реализацией совсем у меня не очень. Хотя бы подскажите в каком направлении копать. Какими компонентами это можно реализовать. Пока надумал только LineRender, а к нему Collaider и FixedJoint. Но пока не могу все это расписать в скрипте. Буду рад любой помощи.

    • День добрый.
      Я не задавался вопросом рисования в 3d. Мои эксперименты ограничились 2d.
      Поэтому извините, могу попытаться помочь беглым гуглением:
      http://www.theappguruz.com/blog/draw-line-mouse-move-detect-line-collision-unity2d-unity3d
      https://www.youtube.com/watch?v=GCOb4mI3u1E

      Надеюсь там будет что-то полезное.

      • Ruslan Romanovich

        Огромное спасибо за ссылки. А то как я не вписывал запрос в гугле. максимум находил только 2d пространство. Теперь есть где копать. Еще раз спасибо. Вы спасли меня.