Никто не мог и подумать, а если выпустить игру без полировки и не делать хотфиксов, то вас ждёт...
TLDR: полный провал
рейтинг <50 означает, что в неё лишь иногда случайно заходят, но сразу выходят. 16 человек в день - это даже ещё и круто для такого рейтинга.
Самый главный озвученный минус: нет обучения. Люди просто заходят, не понимают что надо делать и выходят. Там ещё и куча детей, которые вообще не стараются разобраться в играх. В общем делайте туториал.
Немного статистики:
сколько % людей кликают на иконку, если её увидят при выборе во что бы поиграть. Должно быть минимум 5.
даже интересно что это был за всплеск. вообще я целился в 15+ минут.
Показатель сколько игроков заходят на второй день. Для интереса оставил категории, как видим, согласно жанру должно быть от 15 до 30%.
Ну и самое интересное под конец: деньги!
Напомню, что реклама ломала игру, так что залил без рекламы - это автоматический баннер сбоку. Всё логично: нет игроков и монетизации, нет денег ^^,
В общем отдохнул я хорошо, придумал себе ещё десяток концептов для игр. Очень хочется перекинуться на них, но всё-таки понял-принял, что сначала надо закончить тут.
Теперь хочу за 2 недели поправить все косяки игры: сделать рекламу, обучение и баланс, заменить иконки и прочее seo. Скорее всего это уже ни на что не повлияет - на яндексе, на сколько я знаю, не оживают игры от обновлений. Но на основе этой игры я буду делать другие, так что надо чтобы все системы работали нормально. В последний момент обнаружить, что не работает монетизация было очень обидно.
Вообще думаю, мб можно удалить её со стора, добавить пару фичей, которые сильно изменят облик игры и залить заново, чтобы снова получить неделю в новинках.
Для всех поклонников футбола Hisense подготовил крутой конкурс в соцсетях. Попытайте удачу, чтобы получить классный мерч и технику от глобального партнера чемпионата.
А если не любите полагаться на случай и сразу отправляетесь за техникой Hisense, не прячьте далеко чек. Загрузите на сайт и получите подписку на Wink на 3 месяца в подарок.
Привет всем, кто читает мою статью. Это уже третья часть моего знакомства с Unreal Engine 5 и VR. В этой статье я расскажу как добрался до практики в VR, чего я смог достичь и какие проблемы встретились на моём пути.
Выбор курса практики и откат на более базовый курс
Изначально я начал проходить курс по созданию игры "Дартс" от Oculus, но он оказался старым для Unreal Engine 5. Мне пришлось переключиться на другой курс, чтобы понять основы VR шаблона, предоставленным в Unreal Engine 5.
В будущем я расскажу о курсе по создании игры "Дартс", но для начала покажу курс, который помог мне разобраться в базовом шаблоне VR Unreal Engine 5.
Курс с разбором шаблона VR + создание некоторых механик
Для многих может быть проблемой купить курс зарубежной картой. Так что идем в гугл и можем найти какой-нибудь бесплатный способ изучить курс.
Для удобства восприятия материала я загрузил курс на ютуб с доступом по ссылке, могу поделиться ссылкой (напишите мне в телеграм, ссылка есть в описании канала), чтобы смотреть курс через Яндекс Браузер с переводом на рус язык. Лично мне так проще воспринимать материал.
Что дал курс?
Разбор VR шаблона Unreal Engine 5+ (автор курса использует 5.2 версию, я использую 5.3.2 версию)
Создание простейших механик (использование двуручного захвата оружия, игра со световым мечом, бросок молота Тора, стрельба из лука, плавание на каяке, скалолазание по скале)
Итоговая сборка проекта в APK и Windows билд
На моем ПК (конфигурацию я описывал в 1 части) APK сборка длилась 18 мин 40 сек:
Windows 23 мин:
Какие проблемы я встретил в курсе "Unreal Engine 5 VR Blueprint Crash Course"
1 проблема. Черный экран при отрисовке. (не решено)
При прохождении урока 5 (Overview III Grabbing Shooting), Мы включаем отрисовку трассировку сфера захвата - Draw Debug Type = For Duration.
У меня есть два проекта:
с "экспериментами по урокам"
"чистый" для этого курса.
В экспериментальном, при включении дебага захвата, именно в момент когда мы должны видеть дебаг сферу захвата, у меня экран становится черным.
В чистом проекте, всё работает отлично.
Я пробовал полностью переносить настройки проекта из "чистого" в "экспериментальный", но это ничего не дало.
Для меня до сих пор загадка, почему Draw debug может вызывать такое поведение.
2 проблема. Мигает песочный ландшафт в VR Preview и ошибка “Landscape Physical Material Needs to be Rebuilt” . (решено)
2.1 Мигает песочный ландшафт (решено)
Когда я впервые столкнулся с этой проблемой, я сразу пошел изучать настройки рендеринга, но проблема оказалась куда более решаемой. При этом, не потребовалась оптимизация материалов.
Если выставить настройки на Low, то песочный ландшафт начнет мигать в режиме VR Preview.
Выглядит это так:
Если выставим высокие настройки или эпик, то всё выглядит хорошо.
2.2 ошибка “Landscape Physical Material Needs to be Rebuilt” (решено)
Долго думал по поводу этой ошибки, но как я понял она касается только версии Unreal Engine 5.3.2. Изначально думал, что мигание ландшафта связано с этим
Многие авторы на форумах указывают, что эта ошибка будет высвечиваться, даже если нет никакой ошибки.
Я решил скачать Unreal Engine 5.4.2 и запустить этот же проект. В версии Unreal Engine 5.4.2, сообщение “Landscape Physical Material Needs to be Rebuilt” выглядело как warning и после ребилда ландшафта ("Build>Build Landscape") , исчезало навсегда. Следовательно, можно сделать вывод, что в версии Unreal Engine 5.3.2 ошибка действительно отображается ошибочно, если вы сделали ребилд ландшафта без ошибок в консоли.
Тем более, мой билд полностью собрался без ошибок ландшафта. Стоит учитывать это в будущем, но я не могу перейти на Unreal Engine 5.4.2, потому что на него еще не вышел официально плагин MetaXR.
3 проблема. Лук не стреляет, нет захвата тетивы указательным пальцем. (не решено)
При прохождении урока 15, в финальном тесте лук должен стрелять, с помощью захвата указательным пальцем (при нажатии на клавишу триггер).
По уроку, я всё сделал правильно, но всё равно не работает.
При захвате лука с помощью grab и нажатии trigger, ничего не происходит.
Я пересмотрел урок 5 раз полностью, но так и не увидел ошибку. Надеюсь, с опытом, я смогу решить эту проблему со стрельбой из лука.
Заключение
На практику и решение проблем уходит много времени, поэтому мои следующие статьи могут публиковаться реже, чем я планировал. Если я вспомню еще какие проблемы, связанные с этим курсом, я допишу в эту статью.
Следующая моя цель, разобраться подробнее с новой системой расширенного ввода (Enhanced Input), которую добавили с Unreal Engine 5+.
Если удастся разобрать видеоигры на составляющие и для каждого компонента определить влияние на игру в целом, что в свою очередь позволит в дальнейшем выделить самые важные аспекты, которые оказывают существенное влияние на удовольствие получаемое от игры. И тем самым приблизится к формуле "идеальной игры". Вопрос, что такое "идеальная игра" предлагаю оставить на потом, т.к. мы это скорее всего поймём как раз в процессе.
Для чего мне свои рассуждения выносить на Пикабу?
Для того чтобы можно было обсудить данный вопрос ещё с кем то, кроме самого себя) Я считаю, нет ничего лучше, чем чужое мнение, которое может дополнить мою систему в дальнейшем. Один человек ничего не стоит с точки зрения исследования, чем больше людей, тем больше мнений, и тем меньше шансов на ошибку.
Что такое видеоигра?
Я сторонник нисходящего метода исследования, поэтому начну с более общих определений.
Предлагаю начать с самого слова - видеоигра. Мы уже можем разделить его на два: видео и игра.
Да да, начнём настолько из далека. Но это необходимо, чтобы точно не потерять ничего из виду при дальнейшей декомпозиции.
Заменим видео на кино и станет чуть проще. А игру мы заменим на геймплей.
Первичная декомпозиция понятия "видеоигра"
Почему мы так сделали? Потому что так исторически сложилось) Слишком просто объяснение получилось... Но на деле, мы можем реально отследить развитие различных искусств самовыражения, начиная от наскальных рисунков и заканчивая современным кинематографом(как же иронично это звучит после нового обзора Евгения).
Всё что нам надо, чтобы из Кино получить Видеоигру, так это просто добавить интерактив или по-другому Геймплей.
Я уже пытался рассуждать в предыдущих постах по поводу того как так сложилось, что видеоигры являются вершиной современного искусства . Но всё же кратко повторюсь. У нас есть различные сферы культуры, которые исходят из одного исторического базиса: музыка, изобразительное искусство, литература. Они в своей комбинации порождают все остальные сферы, что можно отследить по историческому развитию, сильно углубляться не буду. А игры в данной ситуации являются комбинацией всего что сумело породить человечество за своё существование на данный момент. Можно пойти от противного и сказать, что игра не является частью чего то большего, поэтому это пока лучшее что у нас есть.
И так, мы приняли что видеоигра у нас состоит из Кино и Геймплея. Начнём с того, что нам на данный момент достаточно известно - кино.
Кино
Кино я предлагаю сразу разделить на две составляющих: содержимое и подача. Они отвечают на вопросы "Что мы показываем?" и "Как мы это делаем?". Что то добавить или убавить у меня здесь не получилось.
Само Кино я предлагаю рассматривать как объединение сразу трёх базисных искусств: звук, изобразительное и литературное. Где основное внимание я бы отдал всё же литературному искусству, но это лишь моё предпочтение. А по факту, все три вида важны по своему, убери что то и оно перестанет быть полноценным фильмом. Но звук и изображение я бы объединил в одно, в подачу. Тут может быть бесконечный спор о том, что важнее, но речь не о важности, а скорее о распределении ресурсов, даже не так, о минимальных требованиях к исполнению, чтобы эту солянку можно было назвать фильмом.
Если со звуком и изображением нам что то на интуитивном уровне понятно, что они воздействуют напрямую на наши органы чувств и передают нам какую-то информацию, то вот с литературой или содержимым всё гораздо сложнее.
Что же из себя она представляет?
Мы можем точно сказать, что любое литературное произведение по сути состоит из описания мира, в котором происходят события этого произведения, а также самих событий и действующих лиц(персонажи). Здесь действующие лица могут быть как одушевлённые, как и неодушевлённые.
Декомпозиция Содержимого на Описание мира, События и Персонажи
Что то выдернешь, и оно перестанет работать, но и добавить мне особо тоже нечего, значит система полная на данный момент)
Хотяя, тут у меня появляются вопросы к самим методам литературной подачи. Например вы читаете книгу, в которой события описываются от лица какого то персонажа, который их интерпретирует исходя из собственных ощущений. Хотя автор мог просто сухо изложить факты и описать реакцию персонажей на них. И тут понимаем, что оказывается у нас должен появится ещё один элемент в подаче, окрестим его как литературная подача. Она сыграет свою роль дальше, потому что на неё и будет в основном воздействовать нераскрытый элемент - Геймплей.
Добавлена Литературная подача
На данный момент это то что мне удалось выделить. В следующем посте я перейду к геймплею.
«Чат на чат» — новое развлекательное шоу RUTUBE. В нем два известных гостя соревнуются, у кого смешнее друзья. Звезды создают групповые чаты с близкими людьми и в каждом раунде присылают им забавные челленджи и задания. Команда, которая окажется креативнее, побеждает.
В процессе разработки своей настольной игры Архитеон заметил, что есть ряд проблем характерных как глобально для отрасли, так и для российской индустрии в частности.
В этой статье я попробую предложить бесплатные инструменты для решения проблем, с которыми я столкнулся, надеюсь кому то из разработчиков будет полезно.
Сначала озвучу основные тезисы, которых я придерживаюсь:
Одна из основных проблем настольных игр в России - недотестированность. Продукты выходят сырыми, из-за его они низко конкурентно способны, быстро теряют аудиторию и не имеют потенциала к продолжению.
Чтобы игру тестировать, необходимо распечатывать каждую её итерацию, со всеми изменениями, переделывать много раз дизайн и параметры, следовательно каждая распечатка — это несколько тысяч рублей и куча времени.
Для того чтобы собрать новый билд для распечатки геймдизайнеру нужно потратить кучу времени чтобы поменять все цифры/параметры на игровых элементах, что занимает много времени и сил.
Игра часто тестируется без артов, на бумажках, потому что за эту часть отвечает издатель. В результате арт не дружит с дизайном, дизайн не дружит гейм-дизайном итд. И все эти проблемы выплывают на этапе, когда игра уже напечатана.
Решение
Я долго искал для себя удобные (бесплатные) инструменты, которые бы помогли мне автоматизировать процесс разработки и тестирования и подружили мои гугл таблички с визуалом настольной игры. Пару месяцев назад натолкнулся на решение.
Предложу две связки:
Google Sheets + Dextrous + Tabletop simulator (он же TTS) - вариант хороший для тех, у кого куплен TTS, и у всех ваших тестировщиков тоже)
Google Sheets + Dextrous + Screentop.gg - вариант хороший для тех, у кого нет TTS, но при этом есть навыки работы с javascript. Руками там сделать конечно что-то можно, но по моим ощущениям автоматизацию писать в разы сложнее (а это как раз то, за что мы любим онлайн симуляторы настолок 🥲)
Ниже подробно расскажу о первом решении, которое использую сам. Со вторым я пока не смог полноценно разобраться, может со временем напишу о нём тоже.
Сначала распишу зачем нужна каждая программа.
Google Sheets - здесь мы храним все наши данные об игре, считаем баланс, агрегируем данные и формируем названия файлов изображений, к которым мы будем обращаться.
Dextrous — это наш онлайн верстальщик. Сайт можете найти по названию в поиске. В нём мы будем автоматически получать и обновлять данные из Гугл таблиц, собирать их в шаблоны карт и прочих серийных элементов настольной игры, и сохранять свёрстанные страницы для передачи в настольную игру.
Tabletop simulator - здесь мы раскладываем виртуально поле нашей настольной игры, задаём правила и создаём автоматизации, для удобства, и играем.
Инструкция
Теперь дам пошаговую инструкцию на примере карт для моей игры.
Подготовка данных
Делаем таблицу - исходник в Google Sheet. В этой таблице у меня в строке - игровая карта. Как видно на скриншоте, у каждой карты есть множество параметров. И параметры бывают как текстовые, так и числовые (например, урон или дальность), так и картинки (например элемент или схема поражения).
Исходная таблица со всеми данными для карт
Так же вычисление некоторых параметров происходит на других таблицах и сюда передаются через функцию.
(Например, урон карты вычисляется в зависимости от здоровья персонажа, направленности карты, дальности поражения и её ценности на листе Calculate2. Если вам нужна будет помощь с подобными формулами, пишите в группе в телеграмме, постараюсь помочь в силу знаний🥸)
Наша задача создать такой лист, на котором будут все необходимые данные для всех карт. Технические колонки я называю на английском, чтобы потом их использовать без проблем. У меня в игре 12 персонажей, у каждого персонажа есть 6 карт, которые формируют колоду персонажа. Поэтому строки располагаются в той же логике, в блоках по 6 строк.
С числовыми и текстовыми колонками всё просто, их мы напрямую будем забирать из таблицы, а вот для изображений нужно будет сформировать название файла, на которое мы будем в дальнейшем ссылаться.
Разберём на примере «элемента» карты. Бывает 3 элемента: Freedom (Свобода), True (Истина) и Chaos (Хаос).
Теперь подготавливаем 3 изображения и называем их Freedom.png, True.png, Chaos.png соответственно, сохраняем их.
Формат PNG используется чтобы у изображений был прозрачный, а не белый фон
Это можно сделать в любом редакторе изображений, я использую CorelDraw.
После того как загрузили нужные файлы, формируем названия файлов в Google. Добавляем колонку Element и вставляем формулу
В формуле мы проверяем какое слово у нас хранится в колонке G на русском, и в зависимости от значения выводим значение. Протягиваем формулу, и теперь у нас есть полное название файла элемента для каждой карты.
По аналогии поступаем с другими параметрами карты. Теперь наша задача для каждой колоды карт сделать отдельный файл, чтобы мы могли в дальнейшем для каждой колоды сделать и назначить свой шаблон в Dextrous. В моём случае для каждого героя я создавал отдельную колоду.
Создаём новую таблицу, и вставляем часть данных из исходной таблицы. В первую строку заголовки, в строки 2-7 данные карт конкретного героя. Для этого используем формулу =IMPORTRANGE
Готовая таблица одного героя
Теперь эту таблицу публикуем в интернете для доступа к данным.
Файл-> Поделиться-> Опубликовать в интернете
Обязательно выбираем тип данных Файл CSV и жмём "Опубликовать"
Сохраняем ссылку, которую нам выдаёт гугл, она нам пригодиться.
Dextrous
Теперь регистрируемся в Dextrous. Затем заходим во вкладку images и создаём папку с названием нашей игры (у меня это «ARHTN»). Здесь мы будем хранить все наши изображения которые мы будем использовать на картах.
Создаём папку
Загружаем файлы
Должен сразу предупредить, что в Dextrous бесплатно можно хранить до 50Мб файлов, поэтому если у вас большие изображения на картах, нужно их будет оптимизировать и сохранить в более низком качестве. Тем не менее, этого размера достаточно для полноценной игры, например мои 100 карт я сохранил в большом разрешении, сжав до 160Кб, и качество осталось вполне приемлемое. Получилось, что все фоновые иллюстрации заняли около 17Мб.
Пример иллюстрации 300х452мм сжатой до 163Кб
Теперь нужно создать шаблон карты. Нам нужна вкладка Layout. Можно создать шаблон на основе заготовки, но я советую делать самостоятельно, потому что Dextrous очень странно работает с размерами, и сжимает наши уже сжатые изображения еще раза в четыре. Из-за этого получается очень плохо. Поэтому я советую делать шаблон в два раза больше, чем будут карты физически у вас распечатываться, а в TTS мы просто уменьшим их масштаб.
Тут нужен отдельный туториал как создавать шаблоны, я думаю при необходимости на ютубе можно найти. Я предлагаю делать так - сохраняем для фона одну карту, на которой обозначаем внутренние выносы (обычно это 3 мм от края карты) и дальше на это изображение добавляем все наши элементы шаблона, которые будем визуализировать. Посоветую только брать карту с максимальным заполнением, либо использовать текст максимальной длины, чтобы быть уверенным, что все текстовые описания точно поместятся.
Так же советую создать изображение Null - с одним прозрачным пикселем, чтобы использовать его как заглушку, если мы не хотим выводить изображение по умолчанию, а на шаблоне оно у нас есть, и иногда нужно этот элемент отображать.
Как выглядит заготовка шаблона и использование Null изображения
На этом этапе очень важно называть все элементы точно так же как мы называли колонки в Google, так как связываться они будут именно по названию! Для ранее созданных файлов элементов я добавил объект изображение и задал ему название Element.
Как только готов шаблон, во вкладке Projects создаём новый проект. В проекте у нас будут лежать наши колоды.
Проекты
Заходим в проект, добавляем компонент и в качестве него указываем наш шаблон.
Project->Add component->Existing layout
Теперь будет самое волшебство. Нажимаем внизу Import CSV и в открывшемся окне вставляем ту ссылку, которую нам предоставил Google когда мы публиковали таблицу.
Если вы всё сделали правильно, то произойдёт волшебство и все строки разложатся автоматически по картам колоды. Если каких-то данных вы не видите, или они не корректны, то нужно проверить шаблон и названия файлов.
Раскладка колоды
На скриншоте видно что я использовал различные иконки прямо в тексте карты - это тоже не сложно делается, гайд есть на сайте Dextrous.
Самое замечательное, что в дальнейшем, когда мы будет тестировать игру, мы можем буквально на ходу обновлять данные во всём проекте. Достаточно просто нажать import all CSVs.
Так же мы видим, что Dextrous понял где необходимо вставить какой элемент, получив данные из колонки Elements. Эти элементы я расположил в левом верхнем углу.
Подскажу еще одну хитрость: обратите внимание на колонку Card Nickname – это название карты, которое будет отображаться в TTS. В дальнейшем я это использую в скриптах TTS, расскажу об этом в отдельной статье.
Когда мы подготовим все колоды которые будут участвовать у нас в проекте, останется добавить рубашки картам - есть несколько вариантов как это сделать, в простом случае где у нас одна рубашка для всех карт, выбираем в правом меню common и подгружаем шаблон рубашки.
Выбор и настройка рубашки
Осталось экспортировать наш файл в TTS. Нажимаем на значок принтера🖨️ в правом верхнем углу и на следующей странице снова нажимам на принтер 🖨️ и выбираем Create Tabletop Simulator file.
Ждём окончания генерации и скачиваем JSON в папку TTS в ваших Документах: C:\Users\liardy\Documents\My Games\Tabletop Simulator\Saves\Saved Objects
Tabletop Simulator
Теперь открываем TTS, создаём новую игру и открываем вкладку objects. Нам нужен блок SAVED OBJECTS. Это как раз та папка, в которую мы положили наш JSON файл с картами.
Objects->SAVED OBJECTS
Перетягиваем файл на область игрового поля и получаем наши колоды. Дальше с этими колодами мы делаем всё что угодно: раскладываем игру, пишем автоматизации для выбора героев или карт итд. И сохраняем файл с игрой.
Колода на игровом поле
Если нам нужно будет внести какие-то изменения в наши карты, нам не нужно будет заново переделывать макеты, пресоздавать колоды, переписывать код с автоматизацией, перераскладывать все исправленные карты!
Нужно будет сделать 2 вещи, которые занимают пару минут: 1. Внести изменения в таблицу Google 2. В Dextrous нажать import all CSVs и сохранить новый файл JSON с заменой старого в папке Saved Objects. После этого открываем игру в TTS и все изменения уже есть на всех картах в игре!
Итог
Как предложенный инструмент помогает решить озвученные в начале статьи проблемы:
Эта комбинация инструментов позволяет увеличить количество тестов, их объем и качество
Изменения после каждой итерации занимают считаные минуты, вплоть до того, что можно прямо во время игры изменить какие-то данные
Временные и финансовые затраты геймдзиайнера оптимизированы в рамках цифровых платформ
При желании верстать можно с выпусками в реальном размере и сохранять файл для печати. Это позволяет подружить геймдзиайн, арт и дизайн, чтобы предусмотреть размеры всех элементов и текстовых блоков относительно друг друга, подобрать оптимальный шрифт, грамотно проверить несколько вариантов шаблонов, прежде чем выбрать идеальный.
Надеюсь статья найдёт своего читателя и будет полезна хотя бы начинающим разработчикам. Если будут вопросы под постом, постараюсь всем ответить. Так же оставлю ссылку на свою группу в тг, чтобы вы могли со мной связаться лично или задать вопросы по вашим настройкам) https://t.me/Archytheon