1max1 писал(а):Нужно писать собственную систему сейвов
Сел, вот, писать свою систему и еще такой вопрос возник: я теперь, вместо сохранений в PlayerPrefs, делаю записи в отдельный класс всех нужных переменных (чтобы потом пихать их в Json и доставать оттуда при загрузке) и чтобы облегчить себе работу хочу сделать так, чтобы можно было перезаписывать переменные либо одним методом, который будет принимать переменную и ее имя и присваивать в соответствии с этим значение, либо массив с различными типами данных (этих всех параметров), чтобы опять же через отдельный метод по соответствующему ключу доставать или записывать (изменять) значения этих же переменных. Все это для того, чтобы не писать для КАЖДОЙ нужной переменной отдельный метод, который будет ее изменять (внутри этого же класса, естественно, чтобы сохранялась инкапсуляция). И вот тут суть вопроса: а реально ли вообще так сделать?
Потому что если идти путем создания метода, который принимает имя параметра и значение - а затем присваивает это значение переменной в нашем классе в соответствии с ее именем - не понятно как это вообще сделать (пока-что). Попытаюсь сразу на примерах кода показывать, чтобы было понятнее:
Есть переменные, какие нужно сохранить:
Используется csharp
public class class1
{
int param1;
string param2;
Допустим, мы хотим сохранить параметр1:
//Отправляем его в класс для сохранения
ChangeValues(param1, param1.name);
}
Там класс и сам метод выглядят примерно так:
public class class2
{
int param1 { get; private set; }
string param2 { get; private set; }
public ChangeValues(param, param.name)
{
//Нам надо найти параметр по имени param.name (для удобства имена одинаковые) и изменить его на значение param
- И вот тут вопрос: как именно это правильно сделать? Потому что пока ответов не нашел.. Т.е. сделать чтобы переменная с таким же именем изменила свое значение на указанное:
param1 = param;
}
}
Или другой вариант - загнать в классе переменных все переменные в один массив и через опять же отдельный метод - доставать или перезаписывать их. Например:
Есть общий класс, определяющий переменные для работы с ними при записи и чтении:
Используется csharp
[System.Serializable]
public static SomeClass
{
int param1;
string param2;
}
В классе с переменными мы записываем их в массив:
public class class2
{
int param1{ get; private set; }
string param2{ get; private set; }
SomeClass[] = new SomeClass[] {param1, param2};
//И вот тут как раз и главная неувязочка, ведь объединили мы переменные разных типов в один класс, чтобы они в одном массиве находились, а не разных, и могли обращаться
только к нему в поисках нужной переменной для записи или чтения - но {param1, param2} не являются здесь SomeClass, поэтому мы и не можем создать такой массив.. И как это сделать? Нашел что-то про structure - но по факту, это то же что и мой этот класс обобщенный. И как тогда здесь поступить?
}
Или я вообще занимаюсь чем-то нереальным и это ни одним из двух представленных вариантов решить нельзя? Просто переменных в игре для сохранения очень много и писать отдельные классы под каждый для изменения - ну жесть просто, хочется прощеееее.... Подскажите кто что думает..