Общий метод для изменения значения приватных переменных в классе
Пишу систему сохранения в игре. Создал класс, где хранятся все необходимые и используемые в игре переменные (различных типов). Переменные, естественно, все приватные. Так вот в чем суть вопроса: для изменения значений этих переменных внутри класса необходимо создавать методы, в которых указанные параметры будут принимать указанные значения, чтобы их можно было изменять в других классах, и под каждую переменную нужно прописать свой отдельный метод - а нельзя ли сделать один "шаблонный" метод, куда отправлять, скажем, название переменной и ее значение и присваивать там и назначать все соответственно? Или ничего так не получится и нужно писать миллион методов (по количеству используемых переменных в игре) без вариантов?
Приведу пример:
//Мы хотим изменить значение переменной param1, (который отвечает за силу) в основном классе (приведен дальше ниже) из этого класса:
public class Someclass
{
int param1; (отвечает за силу, например)
string param2;
//Отправляем переменную в метод основного класса чтобы ее значение там изменилось
ChangeValues(param1, param1.name);
}
//Есть основной класс и в нем находятся переменные и методы
public class Mainclass
{
//Переменные различных типов, используемые в игре
int param1 { get; private set; } //Отвечает за силу
string param2 { get; private set; }
//Пишем так званый Общий метод для изменения переменных
public ChangeValues(param, param.name)
{
param.name = param;
}
}
Код, естественно, с ошибками - я просто попытался донести в таком виде логику происходящего, чтобы было понятнее (надеюсь). У кого какие варианты будут? Или я зря трачу время и лучше бы потратил его на написание методов?
Ответы (1 шт):
Интерфейс для сохранения:
public interface ISaveLoad
{
void Save(ISerialization serialization);
void Load(IDeserialization deserialization);
}
Для сохранения/загрузки данных:
public interface ISerialization
{
void SaveInt(int value);
void SaveFloat(float value);
void SaveVector3(Vector3 value);
}
public interface IDeserialization
{
int LoadInt();
float LoadFloat();
Vector3 LoadVector3();
}
Реализуешь интерфейс ISaveLoad в том месте, где нужно сохранить поля объекта
public class Character : ISaveLoad
{
private float _power;
private int _level;
private Vector3 _position;
public void Save(ISerialization serialization)
{
serialization.SaveFloat(_power);
serialization.SaveInt(_level);
serialization.SaveVector3(_position);
}
public void Load(IDeserialization deserialization)
{
_power = deserialization.LoadFloat();
_level = deserialization.LoadInt();
_position = deserialization.LoadVector3();
}
}
В методе сохранения игры проходишься по всему, что нужно сохранить, вызываешь Save. В методе загрузки вызываешь Load.
Куда и как сохранять данные (ISerialization/IDeserialization) решай сам, хоть в playerprefs, хоть json, хоть в бинарном виде.