Обзор
Переменные, используемые машинным кодом в файле конфигурации, как правило, имеют простой заголовок раздела. Например, первый раздел, который появляется в конфиг файле 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-команды.
Пользовательский ввод конфигурации может быть использован для назначения клавиш «по умолчанию» при помощи таких функций, как 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, вы должны вписать в начале файла следующее:
Например, если файл конфигурации будет в зависимости от конфига 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:
Следующий фрагмент сохраняет значение по умолчанию для X:
class'TestConfigChild'.default.X = 30;
class'TestConfigChild'.static.StaticSaveConfig();
Значение по умолчанию X записывается в файл конфигурации.
[UDN.TestConfigChild]
X=30
Доступные конфигурационные файлы
Файлы конфигурации находятся в каталоге Config вашего проекта.
Вот список конфигурационных файлов, доступных при использовании стандартного проекта Unreal Engine:
Вот список конфигурационных файлов, доступных при использовании стандартного проекта Unreal Engine:
- DefaultEditor
- DefaultEditorKeybindings
- DefaultEditorUserSettings
- DefaultEngine
- DefaultGame
- DefaultInput
- DefaultUI