Обычно для проведения 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