ru en de zh fr
Неигровое приложение на игровом движке. Часть 1

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

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

Потыкав Flutter, я удостоверился в своей обреченности. Он мне показался слишком... нагруженным что-ли? А долбиться с React Native уже не особо хочется, особенно зная мои познания в дизайне (например этот сайт).

Так и почему бы мне не конвертировать свое умение пользования игровым движком - в зачет? Выбирать было не из чего... точнее, выбирать не особо хотелось, ведь у меня и так есть база в Godot Engine. Да и не редко на этом движке делали различные приложения.

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

Подводные камни... вроде

Основной стоп момент для многих будет это нагруженность самого движка. Мол, в нем много разных инструментов, которые не будут мной использованы, но будут занимать места и следовательно - приложение будет "жирным".

Всем пох*й

Ну вот честно, вы когда последний раз смотрели сколько весит апкшник условного телеграмма или вконтакта? Там приложение спойкойно может под сотку весить, хоть по сути это просто навороченные "браузеры" работающие с API сервисов.

Более того, если вдруг будет стоят вопрос о "похудении" приложения - шаблоны экспорта Godot Engine можно перекомпилировать, убрав например 3D возможности.

Так что думаю с этим уяснили. Вопросов не должно быть.

Идея приложения

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

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

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

Определимся со стеком

  • Godot Engine 4 БЕЗ C#. Он может нагрузить приложение весом, хоть и в угоду производительности. Но нам это не нужно, поэтому берем универсальностью.
  • Для записи данных будем использовать SQLite и аддон Godot-SQLite. SQL будет очень удобен для работы с информацией и составления статистик.
  • Аддон EasyCharts для составления графиков.

Также я хотел для UI использовать GTML, чтобы делать UI прям на HTML + CSS, но увы - пока нельзя делать темплейты с динамическими данными.

Делаем основные экрана

Экран записи о сегодняшнем дне

С помощью сочетаний MarginContainer'ов и (V/H)BoxContainer'ов можно набросать дизайн экранов.

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

По факту ничего сложного в этом нет.

Экран всех записей

Тоже ничего сложного. В момент добавления записей и запуска приложения привязываем код, который добавляет карточки по записям что есть.

Экран отчета

Здесь мы вычисляем статистику. Те же сигналы для обновления. Кстати, если можете заметить - везде элементы уже переиспользуются.

Работа с SQLite

Немного просвящу несведующих: SQLite - это одна из разновидностей СУБД, которая имеет возможность быть встраиваемой. Возможно это создает некоторые ограничения по использованию, в отличии от MariaDB или PostgreSQL, но при этом она позволяет не тянуть какие-то зависимости, которых нет на телефонах.

При этом Godot-SQLite достаточно удобен для использования. Простые запросы мы можем составить с помощью таблиц, но что-то сложнее - уже потребуются знания SQLite.

Проверяем на телефоне

Итак, пример есть, нужно теперь проверить на целевом устройстве. Я пожалуй пропущу инфу об установке Android Studio и настройки движка под него - это тема больше для отдельной статьи, чем все в одну пихать.

Но для начала нам нужно установить "mode" в положение "canvas_items", а "aspect" в "keep_width". Это позволит удобно масштабировать приложение под лопаты.

Ну и не забудем установить портретную ориентацию в "Orientation".

А в настройках экспорта нужно убрать иммерсивный режим, чтобы приложение не открывалось на весь экран, закрывая шторку и нижние кнопки.

Ну и как мы можем видеть - на лопате приложение открывается нормально.

Конец?

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

Думаю дальнейшие апдейты по приложению я продолжу писать, но только когда будет о чем еще писать. А пока я доволен результатом.


Комментарии

CAPTCHA

Top.Mail.Ru Рейтинг kto-top.rustatop.ru - Топ рейтинг сайтовKatStat.ru - Топ рейтинг сайтов