Добавлен , опубликован

Программирование в UDK.

Содержание:

Обзор

Переменные, используемые машинным кодом в файле конфигурации, как правило, имеют простой заголовок раздела. Например, первый раздел, который появляется в конфиг файле DefaultEngnine.ini называется просто . Тем не менее, любая переменная, использующая код UnrealScript как правило, имеет полное имя класса, которое соответствует формату [(package).(classname)]. Так, например, раздел [Engine.Engine] файла DefaultEngine.ini указывает класс движка. Есть некоторые исключения из этого правила, например, раздел [WinDrv.WindowsClient], который представляет собой секцию, ключевые значения которой наследуют C++.
Также имейте в виду, что компилятор кода UnrealScript (UCC - UnrealScript code compiler) использует конфигурационный файл для определения существующих пакетов. В отличие от игрового движка, UCC использует лишь небольшую часть параметров (в основном раздел [Editor.EditorEngine] файла DefaultEngine.ini) для их загрузки.
При первом запуске движка многие файлы конфигурации просто-напросто отсутствуют. Загружается тот конфиг-файл, который использует имя текущего проекта. Например, DefaultEditor.ini переведен на ExampleEditor.ini проекта ExampleGame.
Пользовательский ввод конфигурации может быть использован для назначения клавиш «по умолчанию» при помощи таких функций, как Exec-команды.

Работа с конфигурационными файлами

О формате

Разделы

Файлы конфигурации состоят из разделов, включающих в себя пару «ключ-значение»
Это выглядит примерно так
[Razdel]
Key = Value

Специальные символы

ЗнакОписание
+Добавляет строку, если свойство не существует. Полезно для привязки (очень хороший пример – DefaultInput.ini)
-Удаляет строку (нужно указывать точное ее название).
.Добавляет новое свойство.
!Удаляет свойство, не нужно вводить значение, достаточно названия свойства.
Вот пример работы со свойствами:
[Engine.PlayerInput]
Bindings=(Name="Q",Command="Foo")
.Bindings=(Name="Q",Command="Bar")
.Bindings=(Name="Q",Command="Foo")

Комментарии

Большинство людей, похоже, подумали, что точка с запятой обозначает комментарии в файлах конфигурации, но вот пример
FConfigFile::ProcessInputFileContents
Из этого могу сказать следующее. Технически любой символ может представлять роль разделителя «ключ-значение». Тобиш это не обязательно «=».
Находящаяся в начале строки точка с запятой работает как комментарий, но на самом деле им не является. Комментарии должны обособляться запятой.
; Это комментарий
, Так что это??

Создание конфигурационных файлов

При создании нового файла конфигурации, который основан на другом конфиге, вы должны включить его в раздел [Configuration].
Например, если файл конфигурации будет в зависимости от конфига Engine.ini, вы должны вписать в начале файла следующее:
[Configuration]
BasedOn=..\Engine\Config\BaseEngine.ini
Чтобы внести дополнения в существующую пару «ключ-значение», которая унаследована от базовой конфигурации, используйте специальный знак «+», а именно:
[Core.System]
+Extensions=mymap
Для удаления такой пары, используем «-»:
[Core.System]
 -Extensions=umap
Не нужно указывать + или - если ваш конфиг ни от чего не наследуется.

Сохранение конфига объекта

Unreal Engine имеет возможность сохранять конфигурацию объекта в любой конфигурационный файл.

Объявление имени конфига

Объявление класса содержит имя нового файла конфигурации. Например, класс объявляет, что его переменные будут сохранены в файл конфигурации User.ini. Это будет выглядеть примерно так:
 class MyController extends Controller""
    config(user);
Если вы не объявите имя для конфига, движок просто сохранит содержимое в файл конфигурации по умолчанию. Вот демонстративный код:
class TestConfig extends Actor
config;
   var config int X;

 function postbeginplay()
 {
    X=5;
    SaveConfig();
 }
Когда актор TestConfig будет создан, он примет значение X и сохранит его конфигурацию. К файлу MYGAME.ini добавится следующее:
[UDN.TestConfig]
X=5
В следующий раз при создании актора TestConfig значение по умолчанию для X будет равняться 5. Даже если вы удалите функцию PostBeginPlay() из актора, X = 5.
Если объявить имя нового файла конфигурации, то файл будет создан. Приведенный ниже пример показывает, что объявляется новый конфигурационный файл:
 class TestConfig extends Actor
    config(UDN);

Переменные конфигов и их наследование

Переменные конфигов наследуются подклассами. Однако, если SaveConfig() вызывается для младшего класса TestConfig , значение X сохраняется для младшего класса. Пример:
 class TestConfigChild extends TestConfig;

 function postbeginplay()
 {
    X=15;
    SaveConfig();
 }
Когда актор TestConfigChild создан, конфиг для этого объекта сохраняется:
[UDN.TestConfigChild]
 X=15

Динамическая и статическая конфигурации

Программисты используют 2 разных метода для сохранения конфигов объекта в конфигурационный файл: динамический и статический. В принципе, это просто означает, что выполняется сохранение переменной, если вы вызываете SaveConfig() на объект. Вызов StaticSaveConfig() по переменной класса будет записывать значение объекта по умолчанию в файл конфигурации.
Следующий фрагмент сохраняет значение по умолчанию для X:
 class'TestConfigChild'.default.X = 30;
 class'TestConfigChild'.static.StaticSaveConfig();
Значение по умолчанию X записывается в файл конфигурации.
 [UDN.TestConfigChild]
 X=30

Доступные конфигурационные файлы

Файлы конфигурации находятся в каталоге Config вашего проекта.
Вот список конфигурационных файлов, доступных при использовании стандартного проекта Unreal Engine:
  • DefaultEditor
  • DefaultEditorKeybindings
  • DefaultEditorUserSettings
  • DefaultEngine
  • DefaultGame
  • DefaultInput
  • DefaultUI

Содержание