Как сделать маленькую игру - 3

Время 5 утра, самое время написать третий отчёт о проделанной работе.

v9f2FXv

Новая версия корабля, аватар и пересозданная (пятый раз?) стартовая локация…

Интерфейс всё ещё в работе, как и предполагалось, с ним придётся повозиться. Из-за своих «хотелок» приходится платить временем, но продвижение есть. Наконец разобрался с охранением и загрузкой игры. Переписал часть старого кода, всё ещё говнокод, но стараюсь максимально его улучшить.

Больше писать особо и нечего, видимых изменений почти нет. Поэтому расскажу как собираю локации. Для начала рисую эскиз локации, где и что находится — ключевые объекты.

L3U7h0H

Детальный скетч + отрисованный корабль

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

JBZ2BVu

Нарезанный арт

Закидываем всё в движок, и начинается «веселье». Первым делом расставляю уникальные объекты. Некоторые, такие как корабль, делаю отдельным объектом, в котором настраиваю коллайдер — чтоб не проходить сквозь него, тень — чтобы всегда отрисовывалась на нижнем слое.

4rUjW1F

Основные объекты, делающую локацию — уникальной и может запоминающейся?

Растения на скалах сразу разбиваю на группы, создаю объекты и делаю анимацию.

a1ruSnZ

Простенький редактор анимации справляется с покачиванием растений

После начинается расстановка большого количества средних объектов, которые формируют «форму локации», здесь — это деревья. Так как таких объектов очень много, разбиваю их на группы: сверху, снизу, слева, внутри… как-то так.

2ZOUxCv

Посаженные вручную деревья

Когда только начал работу над стилистикой, думал что игра будет только чёрно белой. Но когда разместил первые деревья, корабль, персонажа, понял что не хватает теней — перехода между чёрным и белым. Потом серый цвет стал не только тенями, но и пятнами на земле, пылью из-под ног персонажа. Как лучше сделать эту «землю», думаю до сих пор. С одной стороны хочется просто отрисовать большие картинки и поставить на фон — так я наверное потом и сделаю, но пока… Нарисовал вот такой спрайт:

TYzj4WF

Спрайтлист земли

И дальше заполнял этими спрайтами всю локацию. Начиная заливкой больших прямоугольных участков, под горами, в лесу. Потом «сглаживал углы» самыми большими «узорными» спрайтами и добавлял все меньше и меньше пятна и детали.

rmQS7Xi

Этапы работы над землей и разбивка на слои

Скорее всего это сильно ударит по производительности, но сейчас, когда локации постоянно меняются, этот способ позволяет быстро все менять.

Так же расставляю кустики травы и мелкие камешки, строго на серых участках земли.

gcB6zrY

Финальный вид локации

Трава — интерактивна, проходя по ней, она шевелится (простая анимация). Там где игрок не сможет ходить, интерактив отключается галочкой в свойствах объекта (да, иногда думаю об «оптимизации»…).

Когда все статичные объекты расставлены, «рисую» полигоны-коллайдеры там, где персонаж никогда не сможет ходить. И расставляю мелкие коллайдеры у оснований деревьев и крупных камней, чтоб персонаж не проходил сквозь деревья и камни.

Wi3vL9z

Коллайдеры

Финальные штрихи: расставить птичек, точки старта, порталы и диалоговые триггеры. И дерево сцены выглядит примерно так:

AxcHr4b

Дерево локации

По построению локации у меня вроде всё. Сейчас буду заниматься доработкой диалогов и сохранению переменных. Пока это устроенно так: есть объект триггер, форму которого можно сделать любой. На нем висит скрипт в котором: массив с фразами, аватар собеседника (если нужно). Нужно как-то сообразить, как сделать изменение глобальных переменных после диалога, и работу триггера в зависимости от глобальных переменных. В теории понимаю как. Но на реализацию универсального объекта понадобиться время. Не знаю как это делается у нормальных программистов.

В этот раз всё. Уже 7:36 утра, пора спать. До следующего понедельника.