{"id":4012,"url":"\/distributions\/4012\/click?bit=1&hash=5b9cad3f989520ad358a2237d28d1f12ecdc50cb8452456f27fcbce716b2c8f0","title":"\u041f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0441\u0442\u0435\u0441\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0438\u0435\u043b\u0442\u043e\u0440\u043e\u0432","buttonText":"","imageUuid":"","isPaidAndBannersEnabled":false}

Что-то вроде девлога #1. Границы

Реализация динамических границ между государствами и их провинциями.

Привет DTF. Продолжаю потихоньку пилить свой проект, который я когда-то описал в данном посте. Если кратко, то это глобальная пошаговая стратегия для Android, вдохновленная играми Paradox Interactive. Различные небольшие дневники я периодически выкладывал в #screenshotsaturday , а сейчас решил, что можно уже сделать и небольшой пост для заинтересованных.

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

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

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

- Каждая граница между двумя государствами окрашена в два цвета, соответствующих одному из цветов флага каждого из государств. Например у той же Швейцарии флаг красно-белый, ее территория окрашивается в красный цвет, а ее границы с ее стороны в белый. У Италии флаг зелено-бело-красный, ее территория окрашивается в зеленый цвет, а границы с ее стороны в красный. Соответственно швейцарско-итальянская граница имеет бело-красный цвет.

Это позволяет не путать территории государств, даже если они имеют очень похожие цвета. Правда некоторые регионы являются тихим ужасом даже с такой системой. Например вот:

Основные цвета флагов всех этих государств (они там сговорились, чтоли?) - белый и оттенок голубого или синего. Вообще оказалось очень много государств, у которых флаг состоит из белого и еще какого-нибудь одного цвета. Я изначально не хотел придумывать государствам собственные цвета для территории и границ, а хотел использовать только те, что присутствуют на государственном флаге. Но, похоже, в итоге придется ряду государств цвета "изобретать", так как некоторые места на карте смотрятся очень странно.

- Границы масштабируются при приближении и отдалении камеры:

Правда в самой игре так близко границы не видно. Это сделано, чтобы спрятать их огрехи.

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

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

- Ну и на максимальном отдалении все границы пропадают:

К слову в итоге границ получилось аж 342 (При этом этом еще не все анклавы и эксклавы добавлены. Например нет Гибралтара). Для оптимизации всего этого на телефоне пришлось повозиться с шейдерами и работой надписей. По умолчанию изменение прозрачности надписей вызывало их полную перерисовку на всей сцене и сжирало много ресурсов. Теперь это почти незаметно. В целом еще есть несколько идей, как еще можно было бы доделать границы, но это пока отложено на будущее.

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

P.S.

С наступающим новым годом, уважаемые читатели!
#инди #девлог #мояперваяигра

0
9 комментариев
Написать комментарий...
KalepsJanInc

Тебе стоит сделать как Google: в российском регионе Крым российский, а в других украинский. Так не будет проблем ни с какой стороны.

Ответить
Развернуть ветку
Tregnum
Автор

Я подумываю над этим, но так как проект пока на ранней стадии и особо не привлекает к себе ничьего внимания, то это отложено на потом. Возможно в итоге это и не придется реализовывать. Текущее состояние карты выбрано потому что ее разработка началась во время начала COVID-19 и изначально игра задумывалась как игра про эпидемию. Но, благополучно просрав все сроки, я решил поменять концепцию, а данные по населению и прочему уже собраны для периода между 2014 и 2021 годами. Например на моей карте Афганистан еще под контролем властей и там старые цвета и старый флаг. Когда я завершу ряд необходимых механик я начну дорабатывать карту и, скорее всего, сдвину ее состояние на более раннюю дату. Если до этого момента не возникнет никаких проблем, то и изворачиваться с региональными версиями не придется.

Ответить
Развернуть ветку
Дмитрий Агапов

Интересный проект!
Если не секрет, как реализованы сами границы? Это 3d-модель линии или текстура, рисующаяся по маске цветов?

Столкнулся с похожей проблемой в своём проекте - пока кроме как создания 3d-границ в Blender ни до чего не додумался. Пробовал по маске из шейдера, но качество получается ужасным

Ответить
Развернуть ветку
Tregnum
Автор

Все границы это LineRenderer'ы, строящиеся по точкам из JSON-файла. А уже на них накинут материал, который использует шейдер из которого выкинуто все лишнее. Два цвета задаются как раз по маске из альфа-канала и белого цвета. Ну и получается тоже не то чтобы прям очень красиво. Но это все маскируется тем, что размеры границ уменьшаются с приближением камеры и их невозможно как следует разглядеть. Они передают необходимую информацию, но детали самих границ не видны. Есть еще ряд идей, как это оптимизировать получше, но это пока только идеи. Пока мой не очень мощный телефон все это спокойно держит. Возможно, когда я буду дробить провинции на более мелкие и границ станет гораздо больше, начнут всплывать проблемы с производительностью, но я буду решать проблемы по мере их возникновения)

Ответить
Развернуть ветку
Vieneil

.

Ответить
Развернуть ветку
Дмитрий Агапов

Спасибо за пояснения! )
Здорово, что LineRenderer тянет подобное - честно говоря, не хотел их использовать именно из оптимизации. Но в таком случае задача упрощается
Ещё раз благодарю )

Ответить
Развернуть ветку
Stein der Weisen

Пошто звук клика как из 90х с денди?

Ответить
Развернуть ветку
Tregnum
Автор

Это, пока, своего рода заглушки. Так же как иконки с Google Fonts

Ответить
Развернуть ветку
Der FlugSimulator

А зачем вообще реальная карта на раннем этапе? Геймплей-то хоть есть?

Ответить
Развернуть ветку
Читать все 9 комментариев
null