TGViewer
SpellSinger - разработчик игр на Unity SpellSinger - разработчик игр на Unity @spellsingergames · 548 subscribers
Post #135 1.49K
Быстро делаем A/B тесты с помощью динамических выражений

Обычно для проведения A/B теста нужно сделать новый билд, в котором будут использоваться значения с сервера. Я предлагаю ускорить этот процесс и с самого начала заложить в игру возможность удаленно поменять почти любой параметр.

Предлагаю для этого использовать ключи и значения конфигов определенного формата.

Ключи у нас будут типа dynamic_0, dynamic_1, ..., dynamic_N
Мы будем по очереди запрашивать значение каждого ключа, пока не дойдём до отсутствующего:
for (var i = 0; i < 100; i++)
{
var expression = Get($"dynamic_{i}");
if (string.IsNullOrWhiteSpace(expression))
break;

// apply configs
}


Значения будут вот такого формата:
desert>Nitro.Levels[0].Cost=[50]


Сначала идет входная точка (desert>). Это должен быть какой-то объект, на который у вас есть ссылка. У меня в проекте почти до любого параметра можно добраться через корневой объект, описывающий мир, поэтому desert - это идентификатор мира. У вас в проекте это может быть всё, что угодно.

Далее идет само выражение Nitro.Levels[0].Cost=[50]. В данном примере мы берем свойство Nitro корневого объекта, у него берем свойство Levels, обращаемся к 0 элементу массива Levels, и в свойство Cost, которое у меня является массивом int'ов, записываем значение [50].

Код, который парсит такие выражения и записывает значения в объекты я уже написал. Забирайте его тут. Он умеет:

- Парсить выражения
- Переходить по вложенным объектам
- Переходить по элементам массивов и списков
- Изменять значения приватных свойств
- Работать с string, int, float и bool
- Задавать одиночные значения, List'ы и массивы.

На вход методу передавайте корневой объект и выражение, которое нужно применить к этому объекту. Код не умеет работать с полями, только со свойствами, но при желании его можно доработать самостоятельно.

#самый_крутяк #selfmade
Gist PropertyOverrideUtil for Unity PropertyOverrideUtil for Unity. GitHub Gist: instantly share code, notes, and snippets.
  • 🔥 8
More from @spellsingergames
  1. Oct 1, 2026Автор
  2. Aug 31, 2026Post #235
  3. Aug 25, 2026Прошли модерацию на Crazy Games. Basic Launch продлится до 15 сентября или пока не наберет…
  4. Aug 24, 2026А мы, тем временем, идём покорять #crazy_games Вчера ночью отправили билд на модерацию. Мо…
  5. Aug 24, 20262 недели нужно рекоммендеру Яндекс игр, чтобы как-то отреагировать на изменения метрик. AR…
  6. Aug 14, 2026Шестой эпизод подкаста ГЕЙМДЕВ ПОД ПИВОМ уже во вторник, в 22:30МСК! Хорошенечко отоспитес…
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 →