Как я разрабатываю игру без опыта #5. Переработка дизайна и механик
- Зачем ты показываешь свой код всем идиот, твою игру взломают!?
- Ахаха, если взломают - значит игра хоть чуть-чуть, но успешна и стоит усилий взлома!
Часть 1, Часть 2, Часть 3, Часть 4
- Статистика страницы игры в Steam в конце поста.
Более 10 дней прошло с момента написания прошлого поста, хотя планировал писать каждые 2 дня по факту процесса разработки. Все эти дни был максимально погружен в редизайн и механики игры - чтоб не быть похожим. Так сделал работу над ошибками и изучил способ разделение кода скрипта на составляющие дабы не плодить 20+ тысяч строк.
В том числе старался больше работать потому, что игра должны была выйти в Steam еще 19го марта. А вспомнил я об этом только 18го марта днем - как же я пере**ался. В панике начал писать в поддержку с просьбой отодвинуть срок выпуска, особо без надежды, так как отвечает поддержка не всегда сразу. Однако мне повезло и мне ответили через 4 часа с одобрением на перенос срока выпуска игры. Было бы довольно плохо, если люди купили игру, а там одно меню и все...
И так. Что мы имеем спустя 10 дней "работы":
Что касается части механик игры:
1) Строительство объектов вынесено из диалогов в отдельный пункт меню "Строительство". Чтоб не отвлекать игрока от основного повествования.
2) Добавлен новый ресурс и способ добычи - Камень. Необходим для ремонта поселений, а так же для строительства особой защиты от бури.
3) На рассмотрение добавлен новый ресурс - войска/стражники. Для совершения нападений на соседние королевства, а так же для разбавления механики защиты короля от покушений (если мало защитников осталось после войн - защитить короля они не смогут в определенных случаях)
3) 2 варианта защиты от непогоды - постоянная и дорогая, одноразовая и дешевая (вместо одного).
4) Сокращение вариантов погодных факторов до 1 (буря с ветром и дождем), но буря может начаться совершенно неожиданно и только эффект дождя в текущий день будет намеком на бурю следующей ночью.
5) Рандомизация добычи ресурсов - игрок получает не фиксированное количество ресурсов с добычи каждый день - где-то больше, где-то меньше. В одну игру может повезти и хватить на все, в другую игру придется сильно экономить и чем-то жертвовать (ибо игрок должен страдать)
6) Возможность разрушения построек с целью получения золота. (Единственный возможный вариант конвертации ресурсов в золото)
7) Возможность ремонта поселений после разрушения бурями.
8) Исключение из интерфейса каких либо подсказок и перенос их в диалог с советником, где он рассказывает - сколько стоит построить шахту или как вообще начать строить. Как мне кажется - для большего погружения в игру.
9) Возможность строительства объектов добычи еды и воды внутри селений для исключения затрат ресурсов на строительство объектов добычи за пределами селений и / или увеличения объема добычи.
10) Ограниченный выбор на добычу камня или золота - всего 5 шахт, но что они будут добывать, зависит от выбора игрока.
11) Добавлена возможность получения золота посредством взимания налогов с поселений, помимо его добычи в рудниках, взимания штрафов с преступников и пошлин с торговцев.
Так выглядит игровой интерфейс в итоговом варианте:
Так же, слегка изменилась цветовая палитра. Добавлено два полутона для большего разбега в детализации (самому смешно) объектов. Точками помечены новые цвета в палитре.
Кстати, по какой-то причине меняется гамма при сохранении изображений в Photoshop. Два одинаковых дома покрашены одинаково и выведены в PNG, но при повторном открытии файла и повторном перекрашивании этими же цветами - гамма отличается в итоге (более бледной становится).
Вот список всех используемых наборов "асетов" в игре с ссылками на них:
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
7) Деревья - ansimuz https://ansimuz.itch.io/patreons-top-down-collection
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
14) Музыка - Tim Beek https://timbeek.itch.io/royalty-free-music-pack
Все остальное (очень малое) было собственноручно и мучительно прорисовано и анимировано.
Еще, постигла печальная участь всю сюжетную часть игры. Miro мне знатно так подкинул кучу за шиворот. Решив делить один огромный скрипт на части - я его просто стал вырезать куски и подвязывать с другими файлами скриптов соответственно удалив весь текст кроме стартового диалога. И вот открываю я Miro чтоб начать переносить диалоги по новой как вижу...
Окей думаю я, вперед, обновляйся.
Обновился...
В общем я приуныл. Но ничего, все равно с учетом новых механик нужно диалоги переписывать. Ищем во всем хорошее.
Теперь о коде игры. Господа программисты и разработчики, вэлком унижать автора :)
Все таки начал делить один большой скрипт на составляющие. И теперь это аж 11 файлов скриптов :)
Но по порядку с главного меню:
В самом меню ничего сверхъестественного несколько кнопок и простых анимаций движения объектов и один скрипт на весь функционал.
И соответственно скрипта с методами с запуском этих анимаций в событии нажатия соответствующих кнопок. А так же для кнопок выхода из игры метод Application.Quit(); и для запуска игры в методе Update условие - при появлении панели на позиции 0, запуск сцены игры методом SceneManager.LoadScene();
Если кому-то будет нужна / интересна информация о создании кнопок, простых анимаций изменения состояния, добавления функций при нажатии кнопок - напишите, я распишу отдельно подробно.
Основной код в скрипте главного меню отведен для меню настроек - выбор языка, разрешения экрана, громкости музыки и эффектов. По этому пункту очень подробно расписано тут https://www.red-gate.com/simple-talk/dotnet/c-programming/how-to-create-a-settings-menu-in-unity/ В принципе весь код для меню настроек я взял оттуда, только еще не разобрался - почему в списке всех доступных разрешений, все пункты дублируются. Есть мысль попробовать перенести цикл в метод Awake() вместо Start(), но это позже.
Теперь то, что успел накодить с игровым процессом
2) Кнопки справа от диалога - Строительство, новый день, настройки и выход. Если кнопки настройки и выход плюс-минус понятны из предыдущего абзаца, то кнопка нового дня так же как в главном меню - запускает анимацию шторки и отнимает единицу от счетчика дней внизу-справа экрана. А вот кнопка строительства уже интереснее - она вызывает меню строительства объектов добычи ресурсов и собственно этот же скрипт отвечает за все строительство.
Однако код так же просто и содержит так же одни "ИФЫ" :). Все объекты добычи в игре объявлены и пронумерованы в этом скрипте и изначально при старте отключены в иерархии юнити. При нажатии на кнопку с определенным объектом скрипт проверяет по порядку каждый объект этого типа (всего 5 для каждого из ресурсов) и при нахождении какого-либо в выключенном состоянии - включает его. А в методе Update() происходит покадровая проверка для дизактивации кнопки при обнаружении отсутствия отключенных в иерархии объектов этой кнопки, а так же при недостаточном количестве ресурсов для постройки.
3) Разрушение объектов обрабатывается через 2 скрипта - один отвечает за подсветку объекта при наведении на него и открытии меню объекта при нажатии, второй за нажатие на кнопку и отключение объекта
С кнопкой отключения / разрушения объекта все очень просто - 2 метода OnMouseEnter и OnMouseExit для смены спрайта кнопки при наведении мыши и метод OnMouseDown для отключения объявленного в скрипте объекта и самой кнопки из иерархии.
С кнопкой подсветки и появления меню строения я помучился, а именно над подсветкой. Unity почему-то никак не хотел принимать new Color(), а начал адекватно работать только с new Color32 - информацию по этому нашел тут https://answers.unity.com/questions/1017582/hex-colors-in-unity.html (подкрашивается цвет спрайта поверх него). И те же самые методы OnMouse
4) Ремонт поселений производится по такому же принципу и коду как и разрушение, за одним исключением - целевой объект не отключается, а включается т.к. спрайт поселения у меня лежит поверх спрайта разрушенного поселения и идентичен ему (просто стерт частично в фотошопе)
5) Имеется в запасе скрипт для тултипов ресурсов - при наведении на кнопку строительства объекта над цифрой ресурсов появляется подсказка о стоимости постройки
Скрипт сделан похожим на OnMouseEnter, только через Event Trigger. В инспекторе объекта нажимать Add Component - Event Trigger - Add New Event Type - PointerEnter и Pointer Exit и далее так же как с кнопкой - пишем метод на включение и метод на отключение объекта в иерархии и выбираем в Event Trigger скрипт и соответствующий метод (если нужно кому-то подробнее, то я так же распишу как и с кнопками, и анимациями).
Но так же я нашел очень подробный видео урок как сделать тултипы в более правильном их формате тут https://www.youtube.com/watch?v=HXFoUGw7eKk
6) Ну и скрипт для дрожания камеры при начале бури. Скрипт взят из видео урока тут https://www.youtube.com/watch?v=9A9yj8KnM8c
P.S. Для тех кому интересно как обстоят дела со страницей игры в магазине. Ситуация так себе. Чуть более чем за месяц, страницу показало 41,991 человек. Из них посетило страницу 4,655 человек, что соответствует 11.09% переходов. В список желаний игру добавили 156 человек
На этом пожалуй всё. Все что вспомнил описал, что вспомню еще - опишу в следующем посте по факту дальнейшей разработки
Спасибо вам большое, за то, что прочитали этот бред рукожопа :)
Лига Разработчиков Видеоигр
6.6K пост22.1K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"