Цикл "Разработка игры Maps":
• Часть 1
• Часть 2 (вы здесь)
Приветствую сограждан и не только! Разработка игры идет полным ходом вот уже неделю и я хотел бы поделиться успехами в этом деле. Сегодня речь пойдет о путях, по которым игрок может перемещаться.
Как вы знаете из прошлой статьи, перемещение должно осуществляться по нарисованным путям (пунктирные линии на картинке в той статье). Я решил начать со следующего: есть несколько узлов (места, где пути пересекаются, или просто где происходят какие-то события), при нажатии на соседний узел игрок переходит на него, перемещаясь вдоль кривой. И думалось мне, что это будет не очень сложно. Ага, щас...
Начать стоит с того, что в Unity (а делаю игру я именно в ней) по умолчанию нет нормальных средств работы с кривыми. Поняв это, полез в ютуб, а затем в документацию юньки. В итоге нашел то, что мне показалось подходящим - встроенный пакет Splines. Подключив пакет к проекту, я приступил к его изучению. К слову, на начальном этапе мне очень помог обыкновенный индус с ютуба.
Поначалу пакет Splines мне очень понравился. С его помощью можно легко расставлять узлы на сцене, создавать новые сплайны, соединять друг с другом, генерировать объекты вдоль сплайнов... В общем, песня. Используя генерацию вдоль сплайна, я стал создавать те самые пунктирные линии - пути. Вот как это выглядит:
Относительно визуализации путей возникла проблема - они плохо рисовались в местах пересечения разных сплайнов. Под "плохо" я подразумеваю плохо с визуальной точки зрения.
Однако решение этой проблемы, к счастью, отыскалось довольно быстро. Когда уже понятно, что пути редактироваться не будут, сгенерированные на сплайнах объекты можно запечь - фактически отвязать от сплайнов и сделать их самостоятельными объектами. Таким образом, я научился строить и визуализировать пути. Настало время для следующего этапа - написания скрипта движения персонажа по этим самым путям.
Как вы понимаете, чтобы писать скрипты, нужно было разобраться в данном пакете, к чему я и приступил. С одной стороны, я читал документацию, с другой - смотрел исходники с кодом. И знаете что? Это было больно. Правда. Я читал все это и очень хотелось взглянуть на разработчика пакета... Вот только не затем, чтобы отблагодарить.
Начнем с того, что документация написана криво. В одних местах узлы называются knots, уже на следующей строке пишется о bezier knots, а это то же самое. Непонятно работающие методы с непонятными параметрами, отсутствие базовых вещей типа метода Contains() для некоторых коллекций узлов... Короче говоря, разбираться мне пришлось прилично и временами наступал маленький геноцид нервных клеток
В общем пописал немного тестовые скрипты, поразбирался и наконец более-менее освоил инструментарий. У кого-то может возникнуть вопрос, почему же я использовал этот пакет, если понял, что он плох? А лучше-то и нет скорее всего. По крайней мере в области бесплатных ассетов - как уже упоминалось в первой статье, покупать что-то на данном этапе я не готов. Можно конечно написать свой пакет... Только вот это гораааздо дольше написания логики всей игры. Так что приходится мириться!
Что же вышло в итоге? Я хотел реализовать следующий функционал - изначально игрок стоит. Как только он кликает мышкой на узел, происходит проверка на соседство текущего узла и узла-цели. Если узел соседний - мы двигаемся, если между данными узлами есть еще какой-то - не двигаемся. Если освоить пакет, то реализовать такое не особо тяжело, просто надо посидеть и покумекать в некоторых моментах. Кому будет интересно взглянуть на кодовую часть - в конце статьи я оставлю ссылку на репозиторий GitHub. Кодеры смогут заценить мемность Splines ну и моего кода конечно же.
Не вдаваясь больше во всякие технические подробности, скажу, что сей функционал я реализовал. Возникали всякие проблемы по типу того, что во время движения нельзя было кликать на другой узел, иначе все ломалось, движение было неравномерным и оттого некрасивым и парочка других. В числе них была еще фекальная архитектура, но после завершения написания передвижения я немного прибрался в коде, хотя проблемы безусловно остались.
Собственно, опосля всех моих мучений вы можете лицезреть то, что получилось в итоге. То, что мы имеем на данный момент. Кому лень смотреть тридцатисекундное видео - зеленая колбаса (игрок) движется от одного узла (красной точки) к другому - вариант телепортационный (был промежуточным) и непрерывный.
Видео:
• Перемещение телепортом (тестовое)
• Перемещение непрерывное
Теперь я намерен добавить немного красок и смысла в игру - нарисую несколько спрайтов и реализую диалоговую систему. Рисовать будем, товарищи! Поэтому уже в следующей статье вы скорее всего увидите небольшой кусок первой карты с геймплеем. А на этом я с вами прощаюсь, увидимся в следующей части!
ВК: https://vk.com/lithemross
Репозиторий на GitHub: https://github.com/LithemRoss/Maps.git