Сохранение значений переменных
Все что нам надо сделать - поставить слово config в заголовке нашего класса и добавить config напротив каждой переменной, значение которой мы хотим сохранить, т.е. что-то типа:
Код: Выделить всё
class MyClass extends SomeClass config;
var config byte SomeVar;
var config string SomeString;
...
Теперь, для того чтобы сохранить значения переменных, вы должны вызвать фукнцию SaveConfig(). По умолчанию значения переменных сохраняются в системном ini файле (для УТ это UnrealTournament.ini). Однако вы можете указать свой ini файл:
Код: Выделить всё
class MyClass extends SomeClass config(MyIni);
var config byte SomeVar;
var config string SomeString;
...
В вышеприведенном примере, значения переменных будут хранится в файле MyIni.ini
Формат хранения данных следующий:
Код: Выделить всё
[YourPackage.YourClass]
Var1=Value1
Var2=Value2
...
YourClass - класс который объявлен как config, YourPackage - пак, в котором находится YourClass. Var1,Var2 - config переменные, Value1,Value2 - соответственно их значения.
Также возможно объявление переменных как globalconfig, т.е. значение переменной в ini файл сохраняется ТОЛЬКО для данного класса. Классы-потомки не смогут повлиять на globalconfig переменные. В остальном объявление и действия аналогичны:
Код: Выделить всё
class Parent extends SomeClass config(Main);
var globalconfig byte SomeMainVar;
var config byte SomeLocal;
class Child extends Parent config(Local);
var config byte LocalVar;
В вышеприведенном примере, SomeMainVar будет хранится ТОЛЬКО в Main.ini, LocalVar - только в Local.ini, а SomeLocal как в Main.ini так и в Local.ini
Загрузка значений переменных
Тут все просто. При инициализации вашего config класса (а это происходит при каждой загрузке уровня в котором присутствует ваш класс), движок сам находит и присваивает сохраненные значения переменных. Единственно что тут вам может понадобиться - функция ResetConfig() - восстановление значений всех config переменных на их значения в ini файле.
Код: Выделить всё
...
function RestoreSomeValues() {
ResetConfig();
}
...
PerObjectConfig
Возможно также сохранять значения config переменных не только по классу, но и по каждому экземпляру класса (объекту) в пределах уровня. Для этого существует специальная директива PerObjectConfig:
class SomeClass extends SomeActor PerObjectConfig;
Имя ini файла будет совпадать с именем уровня, в этом ini файле для каждого объекта будет свой раздел (типа [SomeClass0], [SomeClass1] и т.д.) где и будут хранится значения config переменных.
Например, вы запустили карту DM-DECK16] c тремя акторами SomeClass. Созданный ini файл будет называться DM-DECK16.ini и в нем будет три раздела [SomeClass_X] со значениями config переменных.
X - соответствующие номера экземпляров класса (нумерация начинается с нуля при старте движка).
Код: Выделить всё
[SomeClass0]
SomeVar1=SomeValue1
...
[SomeClass1]
SomeVar1=SomeValue2
...
[SomeClass2]
SomeVar1=SomeValue3
...
PerObjectConfig имеет более высокий приоритет чем просто директива config или config(someinifile) и также наследуется потомками.
Замечания
Хранение значений переменных в ini файлах отлично дополняется возможностью указания значений "по умолчанию" (defaultproperties). Тут возможны следующие случаи:
- Переменная указана в defaultproperties, но ее значения нет в ini файле (файл отсутствует, либо переменная там не указана). Тогда движок берет default значение.
- Переменная указана и в defaultproperties и в ini файле. Приоритет отдается ini файлу и значения берутся оттуда.
- Переменная не указана в defaultproperties, а только в ini файле. Значение берется из ini файла.
В том случае если у вас есть только ссылка на класс, но не сам экземпляр класса вы можете также вызывать статический метод StaticSaveConfig(), например:
Код: Выделить всё
...
class'MyClass'.static.StaticSaveConfig();
...
Также замечание насчет сетевой игры:
Значения config переменных из ini файла на сервере не будут передаваться автоматически клиенту в сетевой игре. В таком случае вам надо либо написать специальную simulated функцию и вызывать ее на серверной стороне, либо объявить новые не config переменные и присваивать им значения config переменных.
Автор: Shadow