Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

- Зачем ты показываешь свой код всем идиот, твою игру взломают !?
- Ахаха, если взломают — значит игра хоть чуть-чуть, но успешна и стоит усилий взлома!

- Статистика страницы игры в Steam в конце статьи.

Более 10 дней прошло с момента написания прошлой статьи, хотя планировал писать каждые 2 дня по факту процесса разработки. Все эти дни был максимально погружен в редизайн и механики игры — чтоб не быть похожим. Так сделал работу над ошибками и изучил способ разделение кода скрипта на составляющие дабы не плодить 20+ тысяч строк.

В том числе старался больше работать потому, что игра должны была выйти в Steam еще 19го марта. А вспомнил я об этом только 18го марта днем — как же я пере**ался. В панике начал писать в поддержку с просьбой отодвинуть срок выпуска, особо без надежды, так как отвечает поддержка не всегда сразу. Однако мне повезло и мне ответили через 4 часа с одобрением на перенос срока выпуска игры. Было бы довольно плохо, если люди купили игру, а там одно меню и все...

И так. Что мы имеем спустя 10 дней «работы»:

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

Что касается части механик игры:

1) Строительство объектов вынесено из диалогов в отдельный пункт меню «Строительство». Чтоб не отвлекать игрока от основного повествования.

2) Добавлен новый ресурс и способ добычи — Камень. Необходим для ремонта поселений, а так же для строительства особой защиты от бури.

3) На рассмотрение добавлен новый ресурс — войска/стражники. Для совершения нападений на соседние королевства, а так же для разбавления механики защиты короля от покушений (если мало защитников осталось после войн — защитить короля они не смогут в определенных случаях)

3) 2 варианта защиты от непогоды — постоянная и дорогая, одноразовая и дешевая (вместо одного).

4) Сокращение вариантов погодных факторов до 1 (буря с ветром и дождем), но буря может начаться совершенно неожиданно и только эффект дождя в текущий день будет намеком на бурю следующей ночью.

5) Рандомизация добычи ресурсов — игрок получает не фиксированное количество ресурсов с добычи каждый день — где-то больше, где-то меньше. В одну игру может повезти и хватить на все, в другую игру придется сильно экономить и чем-то жертвовать (ибо игрок должен страдать)

6) Возможность разрушения построек с целью получения золота. (Единственный возможный вариант конвертации ресурсов в золото)

7) Возможность ремонта поселений после разрушения бурями.8) Исключение из интерфейса каких либо подсказок и перенос их в диалог с советником, где он рассказывает — сколько стоит построить шахту или как вообще начать строить. Как мне кажется — для большего погружения в игру.

9) Возможность строительства объектов добычи еды и воды внутри селений для исключения затрат ресурсов на строительство объектов добычи за пределами селений и / или увеличения объема добычи.

10) Ограниченный выбор на добычу камня или золота — всего 5 шахт, но что они будут добывать, зависит от выбора игрока.

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

Так выглядит игровой интерфейс в итоговом варианте:

Так же, слегка изменилась цветовая палитра. Добавлено два полутона для большего разбега в детализации (самому смешно) объектов. Точками помечены новые цвета в палитре.

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

Кстати, по какой-то причине меняется гамма при сохранении изображений в Photoshop. Два одинаковых дома покрашены одинаково и выведены в PNG, но при повторном открытии файла и повторном перекрашивании этими же цветами — гамма отличается в итоге (более бледной становится).

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик
Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

Вот список всех используемых наборов «асетов» в игре с ссылками на них:

1) Дома, лесопилки, горки камня и слитков у рудников, тележки рудников, мельницы, колодцы, мосты, рыбные станции, лодки, трава, дороги — PixelHole https://pixelhole.itch.io/pixelholes-overworld-tileset

2) Факелы в поселениях — OcO https://oco.itch.io/medieval-fantasy-props-pack

3) Заборы поселений — rowdy41 https://rowdy41.itch.io/small-forest

4) Скалы, шахты, ступеньки — finalbossblues https://finalbossblues.itch.io/dark-dimension-tileset

5) Защита от бури постоянная — Jestan https://jestan.itch.io/classic-rpg

6) Защита от бури временная — Arktentrion https://arktentrion.itch.io/2d-rpg-kit-the-game

8) Вода — Szadi art. https://szadiart.itch.io/craftland-demo

9) Портреты персонажей — Exuin https://emily2.itch.io/pixel-portraits-32x32

10) Эффект строительства — ansimuz https://ansimuz.itch.io/explosion-animations-pack

11) Иконки ресурсов — Kyrise https://kyrise.itch.io/kyrises-free-16x16-rpg-icon-pack и vectorpixelstar https://vectorpixelstar.itch.io/food

12) Кирпичная кладка по контуру диалога — Alcoholism https://alcoholism.itch.io/dark-castle-tileset

13) Шрифт (на данный момент) — Poppy Works https://poppyworks.itch.io/silver

Все остальное (очень малое) было собственноручно и мучительно прорисовано и анимировано.

Еще, постигла печальная участь всю сюжетную часть игры. Miro мне знатно так подкинул кучу за шиворот. Решив делить один огромный скрипт на части — я его просто стал вырезать куски и подвязывать с другими файлами скриптов соответственно удалив весь текст кроме стартового диалога. И вот открываю я Miro чтоб начать переносить диалоги по новой как вижу…

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

Окей думаю я, вперед, обновляйся.
Обновился…

В общем я приуныл. Но ничего, все равно с учетом новых механик нужно диалоги переписывать. Ищем во всем хорошее.

Теперь о коде игры. Господа программисты и разработчики, вэлком унижать автора: )

Все таки начал делить один большой скрипт на составляющие. И теперь это аж 11 файлов скриптов: )

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

Но по порядку с главного меню:

В самом меню ничего сверхъестественного несколько кнопок и простых анимаций движения объектов и один скрипт на весь функционал.

И соответственно скрипта с методами с запуском этих анимаций в событии нажатия соответствующих кнопок. А так же для кнопок выхода из игры метод Application.Quit(); и для запуска игры в методе Update условие — при появлении панели на позиции 0, запуск сцены игры методом SceneManager.LoadScene();

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

Если кому-то будет нужна / интересна информация о создании кнопок, простых анимаций изменения состояния, добавления функций при нажатии кнопок — напишите, я распишу отдельно подробно.

Основной код в скрипте главного меню отведен для меню настроек — выбор языка, разрешения экрана, громкости музыки и эффектов. По этому пункту очень подробно расписано тут https://www.red-gate.com/simple-talk/dotnet/c-programming/how-to-create-a-settings-menu-in-unity/ В принципе весь код для меню настроек я взял оттуда, только еще не разобрался — почему в списке всех доступных разрешений, все пункты дублируются. Есть мысль попробовать перенести цикл в метод Awake() вместо Start(), но это позже.

Теперь то, что успел накодить с игровым процессом

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

2) Кнопки справа от диалога — Строительство, новый день, настройки и выход. Если кнопки настройки и выход плюс-минус понятны из предыдущего абзаца, то кнопка нового дня так же как в главном меню — запускает анимацию шторки и отнимает единицу от счетчика дней внизу-справа экрана. А вот кнопка строительства уже интереснее — она вызывает меню строительства объектов добычи ресурсов и собственно этот же скрипт отвечает за все строительство.

Однако код так же просто и содержит так же одни "ИФЫ" :). Все объекты добычи в игре объявлены и пронумерованы в этом скрипте и изначально при старте отключены в иерархии юнити. При нажатии на кнопку с определенным объектом скрипт проверяет по порядку каждый объект этого типа (всего 5 для каждого из ресурсов) и при нахождении какого-либо в выключенном состоянии — включает его. А в методе Update() происходит покадровая проверка для дизактивации кнопки при обнаружении отсутствия отключенных в иерархии объектов этой кнопки, а так же при недостаточном количестве ресурсов для постройки.

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

3) Разрушение объектов обрабатывается через 2 скрипта — один отвечает за подсветку объекта при наведении на него и открытии меню объекта при нажатии, второй за нажатие на кнопку и отключение объекта

С кнопкой отключения / разрушения объекта все очень просто — 2 метода OnMouseEnter и OnMouseExit для смены спрайта кнопки при наведении мыши и метод OnMouseDown для отключения объявленного в скрипте объекта и самой кнопки из иерархии.

С кнопкой подсветки и появления меню строения я помучился, а именно над подсветкой. Unity почему-то никак не хотел принимать new Color(), а начал адекватно работать только с new Color32 — информацию по этому нашел тут https://answers.unity.com/questions/1017582/hex-colors-in-unity.html (подкрашивается цвет спрайта поверх него). И те же самые методы OnMouse

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

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

5) Имеется в запасе скрипт для тултипов ресурсов — при наведении на кнопку строительства объекта над цифрой ресурсов появляется подсказка о стоимости постройки

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

Скрипт сделан похожим на OnMouseEnter, только через Event Trigger. В инспекторе объекта нажимать Add Component — Event Trigger — Add New Event Type — PointerEnter и Pointer Exit и далее так же как с кнопкой — пишем метод на включение и метод на отключение объекта в иерархии и выбираем в Event Trigger скрипт и соответствующий метод (если нужно кому-то подробнее, то я так же распишу как и с кнопками, и анимациями).

Но так же я нашел очень подробный видео урок как сделать тултипы в более правильном их формате тут https://www.youtube.com/watc? v=HXFoUGw7eKk

6) Ну и скрипт для дрожания камеры при начале бури. Скрипт взят из видео урока тут https://www.youtube.com/watc? v=9A9yj8KnM8c

P.S. Для тех кому интересно как обстоят дела со страницей игры в магазине. Ситуация так себе. Чуть более чем за месяц, страницу показало 41,991 человек. Из них посетило страницу 4,655 человек, что соответствует 11.09% переходов. В список желаний игру добавили 156 человек

Как я разрабатываю игру без опыта #5. Переработка дизайна и механик

На этом пожалуй всё. Все что вспомнил описал, что вспомню еще — опишу в следующей статье по факту дальнейшей разработки

Спасибо вам большое, за то, что прочитали этот бред рукожопа: )

5858
25 комментариев

Комментарий недоступен

3
Ответить

Придется ещё раз поглубже опуститься разработку) хотя вот к 30му наконец Стим должен сделать выплату за первую игру 100%, покушаем хоть :)

1
Ответить

Комментарий недоступен

2
Ответить

Да, я по старой привычке жму горячими save to web. Как... Бть где Вам отлайкать?

1
Ответить

Считаю твои статьи максимально полезными для новичков(как я), спасибо!

1
Ответить

Спасибо!

Ответить

Комментарий недоступен

Ответить