skml495

skml495

На Пикабу
поставил 8 плюсов и 0 минусов
Награды:
5 лет на Пикабу
132 рейтинг 3 подписчика 0 подписок 3 поста 0 в горячем

Sokopango Game (продолжение 3) - разное в разработке + приз

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

Сегодня я расскажу о некоторых технических деталях при разработке игры, вернусь к iOS, а также упомяну про новый игровой режим - кампанию, пройдя 1-м которую, можно выиграть настоящие $100.

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

Дисклеймер:

Ниже находится простыня текста с картинками и гифками, некоторые из них тяжелые.

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


Предыдущие статьи:

- Sokopango Game

- Sokopango Game (продолжение) – iOS

1. Немного про версию для iOS.


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

1.1 Подтверждение платежных данных.


Если приложение будет приносить прибыль (оно платное, или есть встроенные покупки), необходимо указать платежные данные в своем профиле.


Идем:

- App Store Connect.

- Соглашения, налоги и банковские операции.

- Заходим в "Платные приложения".

- Заполняем необходимы данные. Это будет контактная информация, налоговая форма и указание валютного банковского счета. В налоговой форме в "Type of Beneficial Owner" я указал как "Individual/Sole proprietor", поэтому везде указывал свои личные данные (ФИО и номер телефона везде повторялись), также указал валютный счет, который я открыл в личном кабинете банка за минуту.

- Отправляем на проверку, ждем подтверждения и заветного статуса "Активно".


Также об этом можно почитать в Workflow for configuring in-app purchases.

1.2 Опция "bUseStoreV2" в файле конфигурации и метод "RestoreInAppPurchase".


По умолчанию для проекта включена опция "bUseStoreV2=true", см. "[EngineFolder]/Config/IOS/IOSEngine.ini". С ней у меня не работали внутриигровые покупки. И такая проблема не у меня одного, исходя из постов на форуме и AnswerHub-е.


Решение: прописал строку "bUseStoreV2=false" в файле "[UnrealProject]/Config/IOS/IOSEngine.ini". Если файла нет, создаем - смотрим примеры проектов, либо в интернете ищем.


Конечно, при каждой покупке придется вводить логин/пароль от "Apple ID", но для меня это лучше, чем ничего, а времени разбираться не было.


Еще у меня не работало восстановление данных по покупкам (метод "RestoreInAppPurchase"), а главное - не отображались цены по покупкам (метод "ReadInAppPurchaseInformation), хотя на Android тот же код прекрасно возвращал цены. После некоторого времени я убрал использование "RestoreInAppPurchase" (у меня была реклама, отключение которой можно было купить, но потом рекламу убрал, и соответственно данную покупку тоже, и отпала необходимость восстанавливать данные по приобретенным покупкам), и, о чудо! - после этого стали загружаться цены в игре.

1.3 Сертификаты.


- Сертификаты хранятся в Личном хранилище Текущего Пользователя.

Хранилище можно открыть через IE, либо через консоль оснастки, см. статью "Как просматривать сертификаты с помощью оснастки консоли MMC".


- Разработчик одновременно может иметь только 2 сертификата 1 вида, и генерировать 2/3 в сутки, иначе будет ошибка "Maximum number of certificates generated". Чтобы можно было сгенерировать новые, нужно удалить неиспользуемые, либо подождать.


- Ошибка "Ключ не может быть использован в указанном состоянии" при сборке проекта.

Удалил сертификаты из настроек проекта, попробовал заново их добавить, при добавлении потребовался ввод пароля - ввел. Опять сборка с ошибкой, не помню какая.

В общем удалил сертификаты (из хранилища сертификатов, см. выше) и профайлы ("C:\Users\%UserName%\AppData\Local\Apple Computer\MobileDevice\Provisioning Profiles"). Потом заново все их сгенерировал.

В настройках проекта заново их добавил - при добавлении сертификатов уже пароль не требовался, а требовалось указать файл "*KeyPair.key". Проект успешно собрался.

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

1.4 Загрузка в App Store Connect.


После обновления UE до 4.24, необходимо обновить Xcode до 11 версии.

Для загрузки приложения в App Store Connect теперь вместо Application Loader использует Transporter.

1.5 Видео для App Store.


В Google Play для отображения видео на странице приложения достаточно указать ссылку на видео с YouTube, в App Store Connect нужно это видео заливать, притом с определенным разрешением сторон для каждой группы устройств.


Здесь можно посмотреть спецификацию к видеопревью приложения.


У меня уже был готовое видео, но оно не подходило по размеру сторон.


Краткая спецификация по видео (тексты ошибок в App Store Connect при неудачной загрузке видео):

- iPhone 6,5-дюймовый дисплей - "App preview dimensions should be: 1920x886, 886x1920.".

- iPhone 5,5‑дюймовый дисплей - "App preview dimensions should be: 1920x1080, 1080x1920.".

- iPad Pro (3-го поколения) 12,9-дюймовый дисплей - "App preview dimensions should be: 1600x1200, 1200x1600.".

- iPad Pro (2-го поколения) 12,9‑дюймовый дисплей - "App preview dimensions should be: 1200x900, 900x1200, 1600x1200, 1200x1600.".


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


Еще у меня ролик был длиннее 30 секунд (это максимум для превью), поэтому его пришлось чуть обрезать. Пользовался этим онлайн-редактором, который первый нашел в поисковике.

1.6 Разное.


Не помню зачем я себе это сохранил, статья про настройку удаленной сборки проекта.

2. Редактор уровней.


А теперь кое-что поинтереснее.

2.1  Введение.


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

Без TileMap-а было бы не удобно создавать уровни в редакторе UE - замучился бы с точной расстановкой элементов уровня, поэтому решил создавать уровни в отдельном редакторе, а сами уровни хранить в файлах.


Так как лучше всего на тот момент из инструментов я знал 1С, редактор уровней делал на ней.

2.1 Небольшое отступление.


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

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


Сделано это было по следующим причинам:

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

- иногда неправильно срабатывала коллизия между героем/блоком/врагом. У меня размер спрайта в уровне равен 16 пикселям, размер капсулы пришлось делать 15.9, но все равно были проблемы.

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

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


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

AI врагов тоже свой - в коде реализован 1 декоратор, 2 сервиса, 1 задача, 1 AI контроллер; в блюпринте блэкборд и дерево, которые на выходе дают всего лишь направление (вверх, вниз, влево, вправо, стоп). Это направление поступает на вход к привязанному к врагу MovemenComponent-у, которые двигает врага в нужном направлении.

2.3 Презентация.


Ну и собственно, как это выглядит (создание 1-го уровня игры):

(Длина гифки 12 секунд, время ускорено в 5 раз, размер 1.18 МБ.)

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

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

(Длина гифки 19 секунд, время ускорено в 5 раз, размер 2.33 МБ.)

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

Хотя все уровни технически прямоугольные, визуально они могут иметь сложную форму:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

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


По каждой ячейке можно получить информацию:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

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


Так выглядит информация по блоку:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

Здесь видна ссылка на ассет спрайта, которая используется при загрузке уровня - по этой ссылке идет загрузка ассета (в UE 4 используется метод "LoadObject<>()"). То же самое и для анимации.


А здесь данные по врагу:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

Просто список анимаций. Как выглядят данные по анимации видно на предыдущей картинке.


Что касается непосредственно рисования уровня, то я сделал все максимально удобно - приблизил редактор, если можно так сказать, к обычным графическим редакторам:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

Что есть на панели инструментов:


- карандаш - рисует выбранный спрайт (блок, враг, герой) там, куда ткнул мышкой, рисует пиксель/линию/прямоугольник:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

- пипетка - тут все понятно - кликнули в ячейку со спрайтом, теперь этим спрайтом можно рисовать:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

- отдельная кнопка для рисования запретных ячеек (ячейки, куда нельзя пойти, нельзя спавниться, пр.):

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

- ластик - работает так же как и карандаш, только стирает:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

-возможность в выделенной области заменить один спрайт на другой. Удобно при загрузке карт с сайта по генерации лабиринтов:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

- далее поле с выбранным спрайтом для рисования (при использовании карандаша), типы: блок, враг, герой;

- поле фильтра по типу блока. Например, хочу видеть только неподвижные блоки:

Sokopango Game (продолжение 3) - разное в разработке + приз Gamedev, Игры, Разработка, Игры на iOS, Игры на Android, Длиннопост, Приз, Гифка

2.4 Хранение уровней.


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

Далее все эти файлы уровней пакуются в игру. Когда игра запускается, открывается сначала 1-я карта (файл *.umap проекта UE) — это главное меню. Затем открывается 2-я карта - сама игра. Таким образом у меня всего 1 карта для режима игры.

Загрузка очередного уровня — это всего лишь удаление всех существующих акторов блоков, врагов и героя (+ еще некоторые объекты); чтение json-файла, а затем создание необходимых объектов в игре. А после игрок может наслаждаться прохождением очередного уровня.


Блюпринты не поддерживают работу с json (в стандартном варианте, без плагинов из маркетплейса), поэтому чтобы работать с json, нужно это делать в коде, а для этого необходимо подключить модуль "Json" в "*.Build.cs" файле в PublicDependencyModuleNames.


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


Что касаемо размера файлов уровней, сейчас общий размер файлов всех 63 уровней составляет 483 КБ (494830 байта) в несжатом виде. Можно еще ужать, используя короткие json-ключи, но я это не стал делать, ибо "и так сойдет".

Для сравнения: 1-й уровень весит 6057 байт, а тестовый на 4000 объектов (для тестирования производительности) уже 105350 байт, в то время как абсолютно пустая карта *.umap в UE весит почти 18 килобайт. Думаю, используя загрузку уровней из файлов, я хоть что-то да выиграл в размере готового файла игры.

2.5  Разное


Ребенку нравиться рисовать уровни, а потом в них сразу же играть.

3. Скрипты сборки проекта.


Я уже писал про скрипты сборки в 1-й статье. Если кратко - вместо использования меню "File -> Package Project" или Project Launcher я написал свои скрипты для сборки проекта с нужными параметрами.


В общем, делюсь скриптами - репо.

В bat-файлах я не силен, поэтому могут быть недочеты.


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


Параметры сборки и сами скрипты можно менять. В скриптах есть комментарии + в файле "README.md" немного информации по параметрам, а также даны ссылки, где можно посмотреть параметры UAT (Unreal Automation Tool - софтина, которая и собирает проект).

Проект можно собирать под любые платформы (Android, IOS, Win64, Win32, Mac, Linux, ...) и любые конфигурации (Development, Shipping, Debug, DebugGame, Test), также можно собирать с/без флага "For Distribution".

Для сборки под Android дополнительно (не обязательно) можно указать формат упаковки текстур (Android Texture Formats).


Тестировалось и используется на Windows. Для сборки под iOS/macOS придется вручную менять сертификаты и профайлы в настройках перед сборкой нужной конфигурации (Development/Shipping), так как эти данные прописаны в конфиге, и UAT берет их оттуда - их нет в параметрах командой строки.


По умолчанию проект собирается со следующими настройками:

- полная перекомпиляция;

- сжатие;

- без контента редактора UE;

- пакуется (без множества файлов — это видно на примере сборки под Windows содержимого папки "Content");

- без краш-репортера;

- без файлов отладки (под Windows, про другие платформы не в курсе, может быть актуально наличие отладочных файлов символов "*.pdb", по крайнем мере я пользовался ими при отлове багов после перехода на UE 4.24, когда ошибки были при запуске игры не из редактора).


Плюсы использования скриптов сборки (учитывая мой скромный опыт):

- их можно использовать в планировщике задач, например, если практикуются ночные сборки;

- не надо запускать редактор UE;


Используется лицензия Creative Commons CC0, это значит, что никаких ограничений на использования скриптов нет.

4. Аналитика.


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

В документации перечислены провайдеры, с которыми умеет работать UE 4, но не один из них не подошел:

- Apsalar из коробки не работает в Android + платный;

- Flurry также не работает в Android, но уже бесплатный;

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


В общем, не знал, что делать, пока не нашел статью, прочитав которую, узнал про GameAnalytics и их плагин, который работает и в Android и iOS, а использование сервисом аналитики абсолютно бесплатно.


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

5. Новый игровой режим $100.


Игру я начал делать 31.07.18. Спустя 10 месяцев - 30.05.19 выпустил на Android, а еще через 2 месяца - 26.07.19 игра попала в App Store. Хотя игра и была выпущена, в ней оставались косяки и были реализованы не все фичи, которые хотел. Только после исправлений и доделок я планировал заняться продвижением. Неспешно все исправляя и доделывая (работа и семья накладывают ограничения на количество свободного времени), мне пришла идея о новом режиме игры, как о способе привлечь игроков.


Идея в следующем:

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

- и новый режим - все тоже самое, только нельзя делать покупки, а 1-й кто пройдет, получит приз 100 долларов США. Рабочее название "Кампания $100". Таким образом, проходя кампанию, у игрока число жизней ограничено - 5 запасных жизней на игру + 1 текущая + после прохождения каждого 10-го уровня дается 1 дополнительная жизнь. Проиграл - начинай сначала, чтобы получить приз.


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


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


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


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


И вдогонку. В Google Play, чтобы соответствовать правилам, пришлось изменить возрастные ограничения, пройдя опрос, в котором пришлось указать "Да" в пункте "ИМИТАЦИЯ АЗАРТНЫХ ИГР, РЕАЛЬНЫЕ АЗАРТНЫЕ ИГРЫ, РОЗЫГРЫШИ ДЕНЕЖНЫХ ПРИЗОВ". Из-за этого игра перестала быть доступной в Южной Корее. Как-нибудь потом разберусь.


Так что прошу всех желающих причаститься и попробовать урвать приз в $100.


Очень буду рад конструктивной критике и найденным багам.

6. Прочее.


Убрал рекламу полностью, из монетизации остались только внутриигровые покупки.


7. Ссылки.


Страница в Google Play

Страница в App Store

Трейлер в YouTube

Twitter

VK

Сайт, до сих пор в разработке.

e-mail

Показать полностью 14

Sokopango Game (продолжение) – iOS

Мне уже 35, я до сих пор немного бородат, и я наконец-то выпустил игру в App Store.

Sokopango Game (продолжение) – iOS Игры, iOS, Gamedev, Инди игра, Длиннопост

Это статья является продолжение моей истории создания 1-й игры, используя Unreal Engine 4.

1. Введение.


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


Я работаю в Windows, компьютера с MacOS у меня нет. Большая часть операций будет происходить в Windows, но для некоторых все равно понадобится MacOS (об этом далее).


Игра написана на Unreal Engine 4.22.

2. TL;DR


51 день прошло от момента, как я приступил к сборке под iOS, до получения счастливого письма с темой "The status of your app, Sokopango, is now "Ready for Sale".". Последние 40 минут которых прошли между отправкой приложения на ревью и его успешным прохождением.

3. Первые шаги в App Store Connect.


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

3.1. Оплата членства в Apple Developer Program.


После оплаты членства (регистрация/вступление в Apple Developer Program) виртуальной картой (эта та, где при платеже через интернет вместо моих ФИО мне надо указывать "DIGITAL CARD" - это у моего банка, у вас может быть указан другой держатель карты), мне нужно было подтвердить личность, т.к. данные моего аккаунта не совпадали с данными держателя карты. Вот часть текста письма от проверяющего мою регистрацию:


...

To proceed with your Apple Developer Program enrollment, we must verify the identity of the developer who will be using the account.

Please upload a copy of the developer’s photo ID. The ID must meet verification requirements for your region:

• Government-issued passport

• Valid (not expired)

• Includes the name in Roman characters*

* If the ID does not include a romanized name, you must also upload a solicitor-certified English translation.

...


Мне повезло, что у меня есть действующий заграничный паспорт. Сделал его скан и загрузил. В тот же день я присоединился к Apple Developer Program.


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

3.2. Видео для предпросмотра приложения.


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

Чтобы загрузить видео для предпросмотра приложения, необходимо использовать Safari и OS X версии 10.10 и новее.

Как оказалось, картинки можно загружать с любой ОС, а видео только с MacOS (вернее только из браузера Safari, который есть только в MacOS).


Также обращу ваше внимание на разрешение видео, цитата:

App preview dimensions should be: 1920x886, 886x1920.

Если вы, как и я, сделаете видео в другом разрешении (я сделал трейлер в Full HD), вам придется его корректировать. У меня руки до сих пор не дошли, поэтому на момент написания статьи видео для предпросмотра на странице приложения до сих пор отсутствует.

3.3. Прочее.


- Удивило, что нет категории игр Аркады. В итоге поставил Казуальные и Стратегии.


- В покупках нельзя поставить произвольную цену, в отличие от Google Play.

4. Сборка проекта.

4.1. Настройка проекта.


Вся информация есть в официальной документации.


Отдельно смотрел настройки (папки "Build" и "Config", и файлы "ProjectName.Target.cs", "ProjectName.Build.cs" ) в шаблонных проектах ActionRPG и UnrealMatch3 - многое взял оттуда.


Обязательно надо иметь хотя бы 1 сертификат, профайл и идентификатор (App ID / Bundle ID) для того, чтобы собрать и выложить приложение в App Store.


У меня:

- 2 сертификата - для магазина (тип "iOS Distribution" - сборка с этим сертификатом будет загружаться в App Store Connect) и для тестирования (тип "iOS Development" - когда напрямую заливаю приложение на iPhone через USB).

- 1 идентификатор.

- 2 устройства - нужно только для тестирования при установке напрямую на телефон. UDID можно узнать в iTunes, как, ищите в интернете.

- 2 профайла - также для магазина и тестирования (тут понадобится указать устройства, на которые можно будет установить приложение).


Также на всякий случай надо знать, где находятся файлы профайлов. Я по незнанию сгенерировал несколько профайлов. После поочередного их импорта в проект он не собрался (разбор данной ошибки в разделе "Ошибки при сборке и их решения").


Находятся профайлы в "C:\Users\%UserName%\AppData\Local\Apple Computer\MobileDevice\Provisioning Profiles\".


Я почистил каталог, заново импортировал актуальные профайлы в проект (Project Settings - Platforms - iOS - Import Provision). После этого проект удачно собрался.

4.2. Если нет MacOS.


Благодаря политики Apple, для сборки проекта под iOS нужна MacOS. У меня Windows, кросс-компиляцию, как для сборки под Linux, сделать нельзя.


Как я писал в предыдущей статье, попытки установить/запустить виртуальный образ MacOS у меня не получилось.


В комментариях предложили аренду. Я поискал, и нашел HostMyApple.


Регистрация и оплата совмещены, т.е. нельзя просто зарегистрировать, придется сразу платить (я такое увидел впервые). Купил тариф "macOS Mojave Cloud Basic" - 34.99 долларов в месяц. Сразу после регистрации/оплаты получил письмо с инструкцией и доступами.


Чтобы заходить на удаленный сервер, нужно будет поставить "NoMachine Enterprise Client". Зашел, обновил ОС (была не самая последняя версия), поставил Xcode - больше ничего ставить не надо.


Проблема: у меня при сборке была ошибка, частичный текст которой "Invalid SDK MacOSX.sdk ..." и "Invalid SDK iPhoneOS.sdk ...". Очень долго с ней промучался.


Решение: запуск команды "sudo xcode-select -r" в терминале.

4.3. Удаленная компиляция.


VPS арендовали, проект настроили, Xcode поставили - пора собирать проект. Но для начала надо настроить удаленную компиляцию и подготовится к ней. Настройку смотрите также в официальной документации.


Так же нужно временно отключить имеющийся SSH-клиент, иначе при удаленной компиляции будет ошибка, связанная с rsync (текст ошибки не помню). У меня Windows 10, я просто переименовал папку "C:\Windows\System32\OpenSSH". После этого в терминале можно выполнить команду "where ssh.exe", чтобы проверить, что ОС не имеет доступных SSH-клиентов. Ответ у меня "ИНФОРМАЦИЯ: не удается найти файлы по заданным шаблонам.". Помог этот пост.


В моём VPS SSH настраивать не надо было - все работало из коробки. У вас может быть по другом.

4.4. Непосредственно сама сборка.


У меня сборка занимает 20-50 минут. 20 минут, когда контент не менял, но мог что-то в конфигах поправить. А вот если было обновление движка, или что-то серьезно поменяли в ресурсах/контенте, сборка может увеличиться. У меня увеличивалась до 50 минут. При удаленной компиляции на VPS копируются исходники движка, проект, временные файлы и прочее. Лежит все это в "%Home%/UE4/".


В зависимости от настроек проекта, получаемый файл IPA может иметь разный размер. Пока обнаружил, что на размер влияет только опция "Build Configuration" (Project Settings - Project - Packaging) - Development или Shipping. Флаг "For Distribution", а также выбранный сертификат и профайл на размер не влияет. Единственное, при установленном флаге "For Distribution" должен быть выбран Distribution сертификат и профайл, иначе проект не соберется. Также при установленном флаге "For Distribution" к файлу добавляется префикс "Distro_". А при Shipping сборке добавляется суффикс "-IOS-Shipping".


Для примера размеры моих сборок:

- Development сборка - 186 Мб.

- Shipping сборка - 491 Мб.


И тот и другой файл можно заливать на телефон по USB для тестирования.


Меня очень удивил большой размер файла. Были даже вопросы на форуме UE, ответов, правда, не было. Потом понял, что в нем содержатся ресурсы для разных устройств. Вот что отображается у меня:

Sokopango Game (продолжение) – iOS Игры, iOS, Gamedev, Инди игра, Длиннопост

4.5. Ошибки при сборке и их решения.

4.5.1. Проблема с профайлами.


Ошибка:

- Provision not found. A provision is required for deploying your app to the device.

- Signing key not found. The app could not be digitally signed, because the signing key is not configured.

- что-то еще было написано.


Эти ошибки появляются на закладке "Massage Log".


Решение – очистка файлов профайлов в каталоге и повторное их импортирование в настройках проекта, хотя их можно импортировать и через IPhonePackager.


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

4.5.2. Чертов Xcode.


Ошибки:

- Invalid SDK MacOSX.sdk, not found in /Library/Developer/CommandLineTools/Platforms/MacOSX.platform/Developer/SDKs

- Invalid SDK iPhoneOS.sdk, not found in /Library/Developer/CommandLineTools/Platforms/iPhoneOS.platform/Developer/SDKs


Решение - много чего перепробовал, но помогло только выполнение команды в терминале "sudo xcode-select -r" (писал об этом выше).

4.5.3. Разные ошибки, связанные с rsync при сборке:


- some files/attrs were not transferred (see previous errors) (code 23) at /home/lapo/packaging/rsync-3.0.4-1/src/rsync-3.0.4/main.c

- rsync error: error in IPC code (code 14)

- прочие ошибки.


Решение - заново запустить сборку. У меня иногда 2-3 раза приходится ее заново запускать, чтобы проект собрался. Притом сборка прерваться может как в начале, так и ближе к концу.

4.5.4. Не собирается с включенной опцией "Enable Remote Shader Compile".


Не разобрался, я и без нее собираю проект. Упомянул здесь, т.к. в инструкциях на сайте UE про нее что-то есть.

4.5.5. Development-сборка и профайл.


Ошибки:

- Provisioning profile "Development" doesn't match the entitlements file's value for the get-task-allow entitlement

- Code signing is required for product type 'Application' in SDK 'iOS 12.2'


Решение - помог пост.


Если кратко, то:

- В списке идентификаторов зашел в свой идентификатор, поставил флаг на iCloud, сохранил.

- Было сообщение, что профайлы станут невалидными - так и случилось.

- Попытка сборки (для проверки) - ошибка. Так и должно быть.

- Опять зашел в свой идентификатор, теперь снял флаг на iCloud, сохранил.

- Сборка прошла успешно.

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

5. Тестирование.

5.1. Через USB.


Для тестирования на телефоне при установке приложения через USB нужно использовать Development сертификат и Development профайл с указанным UDID устройства. Соответственно проект должен быть собран именно с этим сертификатом и профайлом. Как я писал выше, не имеет значения, какая опция выбрана в "Build Configuration" - Development или Shipping, но флаг "For Distribution" должен быть снят. Приложение устанавливается через программу IPhonePackager (путь "%EnginePath%\Engine\Binaries\DotNET\IOS\IPhonePackager.exe", у меня в "C:\Program Files\Epic Games\UE_4.21\Engine\Binaries\DotNET\IOS"). При запуске откроется диалоговое окно выбора проекта, его нужно закрыть. В открывшейся программе нужно перейти на закладку "Advanced Tools" - нажать на кнопку "Install IPA to hardware ..." - выбрать ipa-файл - дождаться успешной установки. У меня установка на телефон занимает от 20 до 80 секунд (в зависимости от размера файла, который зависит от конфигурации сборки).


У меня периодически не получается установить приложение через IPhonePackager.


Ошибка: "Install \ Update of "FileName.ipa" failed with Package Extraction Failed Error in ..."


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


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

5.2. Через программу TestFlight.


В App Store Connect в разделе TestFlight:

- в подразделе "Пользователи App Store Connect" добавляете себя.

- в подразделе "Тестировщики и группы" добавляете группу тестировщиков, далее добавляете e-mail пользователей, которые будут тестировать приложение. Им придет письмо (приглашение) с кодом, который даст возможность подключиться к программе тестирования вашего приложения.


Также необходимо будет на телефон установить само приложение TestFlight.


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


В созданной группе тестировщиков есть 2 раздела: Тестировщики и Сборки. В тестировщиках находятся почтовые адреса пользователей, которые будут подключаться к тестированию, а также публичная ссылка на приложение. В сборках доступные сборки для тестирования - те, которые вы укажите

6. Загрузка в App Store Connect.


Для загрузки приложения используется утилита "Application Loader" от Xcode.

Sokopango Game (продолжение) – iOS Игры, iOS, Gamedev, Инди игра, Длиннопост

Для этого понадобится отдельный пароль. Как его сгенерировать, можно почитать на официальной страницы Using app-specific passwords.


Так как у меня Windows, мне нужно перекинуть ipa-файл в VPS. Я использую сервис Firefox Send. Мне он удобен тем, что не надо логиниться - открыл сайт, залил файл, получил ссылку, скачал файл.

7. Внутриигровые покупки.


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


У меня был 1 скриншот на все покупки. Сам скриншот был сделан из редактора (не из игры), и подкорректирован - т.к. скриншот должен быть определенного размера (640x920 пикселей), мне пришлось части изображения прижать друг к другу. Таким образом, изображения окна покупок на скриншоте и в игре отличаются.

Sokopango Game (продолжение) – iOS Игры, iOS, Gamedev, Инди игра, Длиннопост

Обязательно кнопки покупок должны быть видны, даже если при нажатии на них ничего не происходит! Изначально я кнопки покупок скрывал, появлялись они после получения информации по покупкам (цена, название, валюта, пр. - было видно на Android-приложении) - так делать не надо. Из-за этого у меня приложение и покупки долго не проходили ревью.

8. Ревью / Проверка.


15.06 - 1-я отправка на ревью, ревью через 14 часов. Отклонили. Нужно было подтвердить, что игра соответствует указанным пунктам гайдлайна (список был в сообщении). Написал, что ничего не нарушаю, приложение соответствует гайдлайну.


18.06 - 2-я отправка, ревью через 2 суток и 5 часов. Отклонили, написали, что игра у меня азартная и на деньги. Ответил, приложил скриншот с надписями, типа, где вы здесь увидели азартную игру и игру на деньги. Ждал неделю, думал, что ответят. Хрен там!


21.06 - 3-я отправка. Ревью через 9 дней, не дождавшись его, залил обновленную версию.


30.06 - 4 отправка, ревью через 10 дней. Отклонили, нарушен пункт 2.3.1 гайдлайна (это когда приложение что-то скрытно может делать). Также заметил, что покупки тоже не прошли проверки - никакого письма я по этому поводу не получал. Позже понял (выше написал), что покупки проверяются вместе с приложением. Для меня это было неочевидно.


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


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


17.07 - 5-я отправка, ревью через 7 дней и 3 часов. Отклонили, также нарушен пункт 2.3.1. После этого делаю кнопки покупок видимыми. Черт с тем, что покупки не работают, думал я. Также я написал несколько сообщений команде ревью по разным темам (выбор поля "I would like to") с просьбой разобраться, либо объяснить, ЧЯДНТ. Еще подал апелляцию до кучи. В этот же день приложение проверяют. Совпадение? Не думаю.


26.07 - 6-я отправка, ревью через 18 минут, еще через 18 минут получаю долгожданное одобрение.


Выводы (сугубо мои):


- в Google Play для меня пройти ревью было просто, здесь же все под лупой посмотрят. Видно там боты, здесь люди. Что лучше? Не знаю.


- вытекает из предыдущего пункта - долго ждать, но ниже будет вроде как решение.


- ответы по результатам проверки по большей части на от%*?@сь.


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


- для ускорения запуска проверки строчить кляузы во все инстанции Apple – писать сообщения в центре решений, подавать апелляцию (из центра решений), задавать вопросы команде ревью.

9. Почти счастливый конец.


Игра теперь в App Store.


Но!


На данный момент сами покупки у меня до сих пор не работают. У меня 1 код для работы с покупками как с Google Play, так и с App Store (Blueprint в виджете). На Android покупки работают, в iOS нет.


Чтобы исправить проблему, за основу брал как наработки из проекта "UnrealMatch3" (узлы Blueprin, файл конфигурации, *.Build.cs-файлы), так и много чего пробовал из документации/форумов/ответов с сайта эпиков.


Больше всего удивило то, что я установил UnrealMatch3 из магазина, и в нем тоже не работает покупка (она там всего одна). В общем если кто-нибудь поможет, буду очень благодарен - внесу имя спасителя в раздел "Thanks" в самой игре.

10. Краткое описание.


Мой чек-лист, который я составил для себя (примерный аналог официальной страницы), чтобы выпустить приложение на iOS:


- вступить в Apple Developer Program.


- нужен Mac - можно использовать сервис.


- установить только Xcode, Unreal Launcher/Editor/etc. устанавливать не надо.


- чтобы можно было скопировать профайлы - смотри сюда.


- генерация профайлов и сертификатов - делать 2 шт. - development и distribution/shipping - читать здесь.


- импорт профайлов и сертификатов - ссылка.


- настройки удаленной компиляции перед сборкой проекта - опять ссылка.


- не забыть дать удаленный доступ по SSH в MacOS если его нет. После проверить доступ, например, через PyTTY.


- сборка проекта - ссылка.


- тестирование на устройстве - ссылка.

И самое важное - не забывайте качать, играть, отзывы писать и ставить оценки.


Игра в Google Play


Игра в App Store


Трейлер в YouTube


Аккаунт в Twitter


Страница в VK


Сайт (до сих пор заглушка)


e-mail: sokopango@greengophergames.com

Показать полностью 3

Sokopango Game

Sokopango Game Игры, Android, Gamedev, Аркадные игры, Инди игра, Длиннопост, Видео

Мне почти 35, я немного бородат, и я выпустил свою 1-ю игру.

Улучшенный клон старой игры Pango для ДОС/Агат-9

Страница игры в Google Play: https://play.google.com/store/apps/details?id=com.greengophe...

Добрый день.


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


Аннотация.


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


Пролог.


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

В конце 2015 решил, что хочу написать игру для телефона. Выбрал Java и начал его изучать. Думал, возьму какую-нибудь библиотеку и навояю с ее помощью игру. Поизучал немного и узнал, что есть игровые движки (я знал это и ранее, просто сразу не принял во внимание). Выбор предстояло сделать между Unity и UE4. Интернет, обзоры, искал информацию, что лучше. Ага, щас! Это я позже понял, когда стал более зрелым в программировании, что это просто инструменты, которые нужно выбирать не что лучше вообще, а что лучше для меня, проще, выгоднее, и т.д. В общем, все вроде указывало на Unity, но выбрал UE4 - C++ немного знал (в университете писал на Delphi - блин, набор штампов: 1С, Delphi), есть визуальное программирование, графика типа круче, и добрый набор других плюшек.

Если кратко - изучал я его (движок UE4) с весны 2016 до весны 2018. Блин, 2 года! Конечно, я это делал в свободное от работы/семьи время. А изучал как - решил от корки до корки пройтись по все документации, полностью все повторяя у себя, а не просто читая.

В 2017 начал свой 1-й домашний проект - 3D шутер в кубе со специализацией игроков. Особенность - перемещение во всех 3-х направлениях, т.е. еще вверх-вниз. Прототип готов, но я не готов - мало опыта, нужно дофига контента, а я не дизайне, не моделлер, не пр.

Зимой 2016/2017 и 2017/2018 участвовал в https://russianaicup.ru. Оба раза доходил до 2-го раунда, в шкафу лежат 2 футболки за них.

Весна 2018 - знакомый подкинул идею мобильного приложения, 3 месяца делал, сделал. Пока проект заморожен. Это мой 2-й pet project.

Лето 2018  - весной купил дачу, все лето на ней пахал.


Собственно, рассказ.


В детстве у нас был компьютер Агат-9, и там была игра Pango. Решил, что это будет 1-й моей игрой, которую я выпущу - это мой 3-й pet project.Были и другие, у меня список большой, но остановился на этой, т.к. считаю, что 1-я игра должна быть простой в реализации, желательно клон, чтобы на ней набраться опыта. Можно конечно клон тетриса или арканоида, но с ними мир не захватишь.

31 июля 2018 - 1-й коммит в git.

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


Что писать про само программирование, даже особо не знаю. Есть идеи, реализую их в коде. Были проблемы - решал их. Кратко - прям много чего узнал, много чего реализовал, т.к. делал реальный проект, а не "Hello word". И всем советую, если хотите получать реальный опыт, делайте то, что вам нужно, либо кому-то нужно. Только так вы научитесь чему-либо.


Ниже список классов:


SOURCE
│ PangoBlock

│ PangoBlueprintFunctionLibrary
│ PangoCharacter
│ PangoEnemy
│ PangoGameMode
│ PangoLevel
│ PangoMovementComponent
│ PangoPlatformGameInstance
│ PangoPlayerController
│ PangoType
├───AI
│ BTDecorator_PangoIsDirectionChange
│ BTService_PangoUpdateDirection
│ BTService_PangoUpdateTarget
│ BTTask_PangoMoveTo
│ PangoAIController
│ PangoAIType
├───Interfaces
│ PangoExplodeInterface
│ PangoGamePlayInterface
│ PangoMovementInterface
└───SaveGame
PangoSaveGame
PangoSettingsSaveGame


Особенности реализации:

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

- вспомню, допишу.


Контент. Часть куплена, часть скачана с бесплатны ресурсов, часть нарисовано мной. После напильником обработано - спрайты, треки. Ниже будут суммы.

Список используемых сторонних ресурсов и их источника есть в игре.

Наше все:

Paint.NET - мне нужна был прозрачность, но Paint ее не поддерживает. Нужен был простой редактор. Как оказалось позже, в нем дофига чего классного есть, что мне пригодилось: замена цветов, куча эффектов/коррекции, слои, удобный зум/скролл (в Paint беспантовый).

Audacity - чтобы обрезать трек, уменьшить размер (1 дорожка, понижение битрейта).


Организационная часть.


Использую git, но в основном для бэкапов. Поработал, перед сном сделал коммит. Забыл написать, игру писал вечером и ночью, иногда на выходных. Как родился ребенок - ночью. Но это меня не смущало - мне нравиться программировать, мне нравиться делать мою игру. Как ни странно, у меня ни на секунду не пропадал к ней интерес. Иногда читаю статьи о том, как люди делали свои 1-е проекты, они делали их долго, и иногда мучительно - пропал интерес, а доделать надо. У меня такого не было. Долой отступление, поехали дальше.


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

Ниже скриншот каталога с рабочими файлами (не файлы проекта UE4):

Sokopango Game Игры, Android, Gamedev, Аркадные игры, Инди игра, Длиннопост, Видео

Проект сначала собирал из редактора, но там настройки берутся из конфига, т.е. нужна, например, Development-сборка, зашел, поменял в настройках параметры, собрал, нужна Shipping-сборка, аналогично. Потому сделал себе батники - пришлось потратить время на то, чтобы узнать как работает UAT (Unreal Automation Tool, именно эта программа собирает проект). А потом до меня дошло, почему в UE4 есть несколько способов собрать проект, сначала я этого не понимал.
Поделюсь (могу быть не прав):
- через меню "File - Package Project" в "Unreal Editor" - берет настройки из "меню Edit - Project Settings" (из файлов конфигов). Т.е. если надо из этого меню что-то собрать, но с другими параметрами - идете в настройки и вручную меняете, а потом собираете.
- через "Project Laucher" - тут вы создаете профили с разными настройками, т.е. для каждого профиля будет свой набор конфигов. Если вам надо собирать и Development, и Shipping, делаете 2 профиля 1 раз и все. Уже не нужно заходить в настройки проект.
- через командную строку. Вручную прописываете все.
Замечу, во всех случаях вызывается UAT с набором параметров, это видно при запуске сборки - смотри начало лога.

Тестирование.

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

У меня так несколько косяков и недочетов нашли. Было это не задолго перед релизом. Часть багов была связана с монетизацией - не решив я их, мог бы недополучить прибыль (на момент написания поста у меня ее не было, но в будущем так могло бы быть).


Расходы:
- 0$ за Google аккаунт - был ранее оплачен.
- 30$ за 3 бандла от Kenney. Купил, надеясь, найти спрайты героя и анимации. По итогу спрайты взяты от туда же, но из бесплатного набора. В общем почти все взято из этих наборов.
- 18$ за музыкальный набор от Gamemaster Audio - эффекты и несколько треков. Почти все звуковые эффекты оттуда.
- 12 EUR за домен от Google. Как бы не нужен, но для важности взял. Может в будущем пригодится. В евро, потому что для России сервис не работает, пришлось указать, что я из Нидерландов.
- 35.70 EUR за хостинг от altushost.com. Специально искал хостинг в Европе с ДЦ там же. Также хрен знает, зачем взял, т.к. для игры и ее продвижения это вроде не важно.
- 1634 RUB за а/я для указания адреса в Google Play, т.к. у меня есть внутриигровые покупки. С регистрацией ящика у меня вот какая оказия. Арендовал я его через сайт почты (класс, 21 век, все можно сделать через интернет) - выбрал, внес свои данные, оплатил. Оставалось прийти на почту с паспортом и номером заявления. Оказалось, здешние ничего не знают про то, что это можно сделать через интернет, хотя на сайте утверждается обратное. Объяснил, назвал номер заявления, дал паспорт. В общем оплату они мою увидели, но в "своей" системе по этому поводу ничего нет. Звонили в бухгалтерию, тоже не помогло. Короче, пока руки не дошли позвонить им на горячую линию, обязательно это сделаю.

Сборка под iOS.
Для сборки под iOS проекта на UE4 нужна MacOS. У меня Windows, мака нет. Пробовал установить/запустить виртуалку, не получилось. Так что пока игры не будет на iPhone. Как заработаю, куплю Мак, сразу же соберу и выложу игру в магазин.

Монетизация.
- реклама после успешного прохождения уровня.- внутриигровые покупки на покупку жизней и отключение рекламы.Рекламу вставил от Appodeal, т.к. это быстро и просто. Ранее я пробовал с ней работать. Нужно было быстро, т.к. я уже выбивался из сроков. Да-да, надо ставить себе сроки (+ определиться с тем, что надо сделать до релиза, а что оставить на потом), иначе можно игру и не закончить.

Продвижение.
Только начал. Но перед этим, считаю, нужно хотя бы трейлер сделать. Не знаю как другие, а мне проще посмотреть, чем почитать, т.к. хвалиться все могут, часть из описания мне будет не понятна, т.к. я еще не играл, а ролике видно то, что я увижу у себя на экране телефона.Для захвата видео с экрана и монтажа я использовал "Camtasia  Screen Recorder and Video Editor". С сайта можно скачать триальную версию. Мне она очень понравилась, т.к. у меня не было опыта в видеомонтаже, а в ней все получилось с первого раза.Перед этим постом написал о релизе только на форуме "Unreal Engine" и 4pda.

Эпилог.

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

Послесловие.

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

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

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

Спасибо за внимание.

Twitter: https://twitter.com/sokopango
VK: https://vk.com/public182828582
E-mail: sokopango@greengophergames.com

Показать полностью 1
Отличная работа, все прочитано!