TGViewer
Channel Public Channel
SpellSinger - разработчик игр на Unity

SpellSinger - разработчик игр на Unity

@spellsingergames

Привет! Я Денис и я делаю игры на Unity. В этом блоге я делюсь своим опытом в геймдеве и не только.

Навигация в закрепе: https://t.me/spellsingergames/3

Написать в личку: @sinedsem
Subscribers
548
Photos
90
Videos
22
Links
105

Showing posts older than #174 · Back to latest

Older Posts 18 shown
Post #173

This post (sticker, poll or similar) has no web preview. Open in Telegram

  • ❤ 7
  • 😁 3
  • 🤝 1
  • 🫡 1
Post #172 1.17K
Post #171 1.14K
Warning: обращайте на них внимание и отключайте ложные

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

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

#программирование
  • 👍 8
  • ❤ 4
  • 🫡 2
Post #170 1.18K
Конверсия в игровую сессию. Финал истории.

Когда на Яндекс Играх добавили метрику «конверсия в игровую сессию» (доля игровых сессий, которые длятся более 60 секунд), значения нашей игры оказались на уровне 25%.

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

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

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

А потом, в один прекрасный день, конверсия взяла и прыгнула на отметку 80%, и с тех пор там и находится. Без обновлений. Без каких-либо действий с нашей стороны.

В связи с этим у меня только один вопрос. Признавайтесь, кто таки натравливал на нас ботов? 🤔

#яндекс_игры
  • 👍 9
  • 🤨 5
  • ❤ 2
  • 😁 2
  • 🤡 1
  • 💋 1
  • 👀 1
  • 🫡 1
  • 💅 1
Post #169 721
4 вложенных Horizontal Layout Group | Как я кнопку делал

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

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

Решил задачу, добавив на каждый слой иерархии Horizontal Layout Group и выставив нужные padding'и слева и справа. Перед этим два часа убив на имплементацию ILayoutSelfController/ILayoutGroup, которую так и не смог заставить правильно работать.

Может, можно сделать как-то проще?

#ui
Post #167 908
Мы сделали редактор шаблонов для Бурить-Копать!

Теперь шахты в нашей игре станут разнообразнее за счёт вручную подготовленных участков мира. Мы называем их шаблонами.

Разработка редактора заняла полтора месяца (по вечерам после работы). Самой сложной задачей было написать алгоритм встраивания шаблонов в мир, чтобы они не создавали непреодолимых препятствий для игрока.

Самым долгим было сделать UI для редактора. Я использовал Unity UI Toolkit - вроде удобно, а вроде и нет, и большие проблемы с настройкой внешнего вида.

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

Ссылка на редактор: https://drill-editor.honeycombs.games/.

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

#бурить_копать
  • 👍 15
  • ❤ 5
  • 🔥 3
Post #166 785
Убираем ворнинги (warning) из сторонних плагинов – лечим Tenjin

Нужно было добавить в проект Tenjin. Он поставляется только через .unitypackage, его нельзя добавить как зависимость в Package Manager. Ок, закидываем в проект файлы, получаем кучу предупреждений от компилятора:
Assets\Tenjin\Scripts\TenjinAdMobIntegration.cs(12,25): warning CS0414: The field 'TenjinAdMobIntegration._subscribed_rewarded_interstitial' is assigned but its value is never used
Assets\Tenjin\Scripts\TenjinAdMobIntegration.cs(9,25): warning CS0414: The field 'TenjinAdMobIntegration._subscribed_banner' is assigned but its value is never used
Assets\Tenjin\Scripts\TenjinAdMobIntegration.cs(11,25): warning CS0414: The field 'TenjinAdMobIntegration._subscribed_interstitial' is assigned but its value is never used
...

Они появились из-за использования препроцессорных директив типа #if tenjin_admob_enabled, но нам разработке они сильно мешают - при каждой компиляции в консоли по 10 мусорных ворнингов.

Решение:
1) Создаем для плагина отдельный assembly (.asmdef)
2) Создаем рядом с .asmdef файлом файл csc.rsp
3) В csc.rsp пишем (0414 это код конкретного ворнига, у вас может быть другой)
-nowarn:0414


И хоть ChatGPT и считает, что
This affects all scripts in the project — not just a specific .asmdef.
There’s currently no way to scope compiler flags per .asmdef using Unity’s built-in tools.


На самом деле, всё отлично работает – ворнинги из assembly игнорируются, из остального проекта – нет.

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

#тайные_знания
  • 👍 9
  • ❤ 2
  • ✍ 1
Post #165 848
UnityWebRequest и Cookie

Для целей разработки мне нужно было добавить Cookie заголовок в запрос, который я делаю с помощью UnityWebRequest. Я написал
using var webRequest = UnityWebRequest.Get(url);
webRequest.SetRequestHeader("Cookie", "SESSION=OWExZDJmNTAtN2Q1YS00MGNhLWE3YWItMTg4Yjk5NzljZTY5");
webRequest.SendWebRequest();

и у меня ничего не сработало.

Оказалось, Unity, в том числе внутри редактора, хранит куки, присланные от сервера. Поэтому, не смотря на то, что я явно в реквесте передаю свои куки, Unity втихаря дописывает ещё один заголовок с куками из внутреннего хранилища.

Чтобы пофиксить, используйте UnityWebRequest.ClearCookieCache()
UnityWebRequest.ClearCookieCache();
using var webRequest = UnityWebRequest.Get($"{TemplatesUrl}/all");
webRequest.SetRequestHeader("Cookie", "SESSION=OWExZDJmNTAtN2Q1YS00MGNhLWE3YWItMTg4Yjk5NzljZTY5;");
webRequest.SendWebRequest();

#тайные_знания
  • 👍 14
Post #164 977
Тем временем, в Играх ВКонтакте DAU перевалило за 500 человек и продолжает расти. С фиксированным CPM это вдвойне приятно.

#бурить_копать #игры_вконтакте
  • 👍 12
  • 🔥 6
Post #163 911
Резюме по конверсии в игровую сессию

Что было испробовано:
1) Убрать главное меню
2) Добавить поддержку WebGL 1
3) Переделать загрузочный экран
4) Убрать несколько загрузок через Addressables, грузить всё сразу, кроме фоновой музыки (15 мб)
5) Закупка трафика

Что оказало самый большой эффект:
Закупка. В момент закупки даже на мобильных устройствах конверсия была 50+ (новые игроки 70+).

Кстати, всё ещё не понимаю, почему новые игроки показывают больше конверсию, чем общая.

Больше эту тему копать не будем, сосредотачиваемся на новом контенте.

P. S. На скриншоте график конверсии на мобильных устройствах.

#бурить_копать #яндекс_игры
  • 🔥 8
Post #162 932
Встречайте Drill Nomads: Dig Odyssey

После нескольких безуспешных попыток выяснить, что же не нравится Google Play, мы решили, что скорее всего причина в названии. В GP есть игра Drill and Dig, без восклицательного знака.

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

#бурить_копать #google_play
  • 👍 12
  • 🔥 3
  • ❤ 2
Post #161 1.04K
Бурить-Копать! (Drill and Dig!) удалили из Google Play

Пишут, что мы нарушили Impersonation policy, а именно выдаём себя за бренд/приложение Drill and Dig!

Your app currently shows unclear affiliation with the brand/ app ¨Drill and Dig!¨


Это случилось ещё 24 марта, и с тех пор мы пытаемся доказать, что мы и есть Drill and Dig!, пока что безрезультатно.

Если кто-то с таким сталкивался, поделитесь, пожалуйста, вашим опытом.

#google_play
  • 🤯 11
  • 😡 8
  • 👨‍💻 5
  • 🤣 4
  • 😢 3
  • 😨 3
  • 🤡 2
  • 🤨 2
  • 🤪 2
Post #160 1.01K
Заметил ещё одну странную историю. Построил воронку чисто по JS логике, в отрыве от всяких Unity.

Порядок действий в коде:
1) Открыли страницу
2) Инициализируем Яндекс SDK
3) Запрашиваем данные игрока
4) Запрашиваем сохранение игрока

Полный код чуть ниже. Unity тут вообще никак не участвует. Почему с понедельника по сегодня на этапе загрузки данных игрока потерялось 32% игроков?

let ysdk = null;
let player = null;
let data = null;
let retryCount = 0;
const maxRetries = 10;
const retryDelay = 1000;

function init() {

if (typeof YaGames === 'undefined') {
console.error('[YSDK] NO Yandex SDK');
return;
}

console.log('[YSDK] Will load Yandex SDK');

YaGames.init().then(_ysdk => {
ysdk = _ysdk;
console.log('[YSDK] initialized');
reachGoal('yandex_sdk_initialized');
yandexLoadPlayerAndData();
});
}

init();

function yandexLoadPlayerAndData() {
return ysdk.getPlayer()
.then(_player => {
console.log("[YSDK] Player loaded:", _player);
reachGoal('yandex_player_loaded');
player = _player;
return _player.getData();
})
.then(_data => {
console.log("[YSDK] Data loaded:", _data);
reachGoal('yandex_data_loaded');
data = _data;
})
.catch(err => {
if (retryCount < maxRetries) {
retryCount++;
console.error("[YSDK] Failed to load, retrying...", err);
return new Promise(resolve => setTimeout(resolve, retryDelay)).then(yandexLoadPlayerAndData);
} else {
console.error("[YSDK] Failed to load after retries:", err);
}
});
}
  • ❤ 1
  • 👍 1
  • 🔥 1
Post #158 877
В пятницу мы закупили продвижение на 6000 рублей на неделю. С продвижением конверсия растет, вчера конверсия у новых игроков была аж 81%. Похоже, основная причина была в плохом траффике.

Но больше всего мучает другой вопрос: почему конверсия в игровую сессию у новых игроков сильно выше, чем средняя?
  • 👍 8
  • 🔥 1
Post #157 1.03K
Стало хуже. Теперь и на ПК не дожидаются загрузки Unity 35% игроков.
  • 😁 12
  • 👀 4
  • 🤷‍♂ 2
  • 🤣 2
  • 🤪 2
  • 💩 1
  • 🤡 1
Post #156 964
Многие из вас писали, что у нас плохой загрузочный экран. Эта теория может объяснить, почему такие отличия с ВК - в ВК вообще не видно игру, пока ты не вызовешь аналог loading ready функции.

Что скажете про новый загрузочный экран?

https://yandex.ru/games/app/258901
Яндекс Игры Бурить-Копать! - играть онлайн бесплатно на сервисе Яндекс Игры Бурить-Копать! — динамичный 2D-рогалик про поиск сокровищ, улучшение бура, мощные комбинации умений и соревнование за максимальную глубину.
  • 👍 8
  • 💩 4
  • 👎 3
  • 🤡 1
  • 🌭 1
  • 🤪 1
  • 🗿 1
Post #155 858
В течение первых 20 секунд на странице, раз в секунду отправляю событие. К 7 секунде остаётся только 50% игроков. На ПК - 78%.
  • 🤔 9
Post #154 811
В отчаянии, мы убрали главное меню. Теперь игроки сразу попадают на сцену с игрой. Ожидаемо, это почти ничего не поменяло, ведь большинство отвалов было до даже загрузки Unity.

Поставил в эмулятор 124 версию хрома. В ней, действительно, игра не открывается. Но в ней так же и не открываются другие игры на Unity, то есть это не то, что нужно расследовать.
  • ❤ 5
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →