Config переменные

(Материалы по UDK)

Модератор: Buxyr

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Config переменные

Сообщение KrisGames » Пт май 18, 2012 12:09 pm

Возможности unrealscript`a для работы с файлами весьма ограничены, практически единственный способ - это работа с config переменными посредством ini файла. Способ, надо сказать, "не супер", но вполне годится для большинства задач решаемых ускриптером. В единичных случаях, когда вы уж сильно "зарываетесь" в движок, работу с файлами можно организовать только в native коде, но это материал для отдельной статьи, так что мы рассмотрим только работу с config переменными.

Сохранение значений переменных

Все что нам надо сделать - поставить слово 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


ICQ : 470-451-451
Mail: KrisGames@yandex.ru

Вернуться в «Конструктор UDK»

 

 

cron