1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mrkelly-KEngine

Клонировать/Скачать
Doc_SettingModule.md 6.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 21:23 486b03a

Модуль конфигурационной таблицы / SettingModule

Введение

Все конфигурационные таблицы в проекте разрабатываются с использованием Excel. Они включают в себя список уровней, список монстров, список навыков, параметры искусственного интеллекта и другие игровые значения. Можно сказать, что существование конфигурационных таблиц определяет всю игру.

Преимущество такого подхода заключается в том, что некоторые часто используемые конфигурации отделены от программного кода. Это позволяет разработчикам легко настраивать и изменять игру без необходимости перекомпиляции программы.

Принцип работы

  • В качестве инструмента для редактирования конфигурационных таблиц используется Excel. В Excel можно добавлять заголовки таблиц и графические символы.
  • Excel преобразуется в чистый текстовый файл с разделителями табуляции и код на C#.
  • На стороне выполнения происходит чтение файла с разделителями. Чтобы повысить производительность, избегается использование атрибутов и отражения, а также чрезмерного создания кода. Универсальные шаблоны не используются.

Компилятор

Прежде всего, необходимо понять, что компиляция конфигурационных таблиц по сути представляет собой преобразование таблиц Excel в текстовые файлы с разделителями табуляции.

Чтобы скомпилировать конфигурационную таблицу, перейдите в меню KEngine->Compile Settings и нажмите кнопку компиляции. Существует два режима компиляции: полная и быстрая дифференциальная. При быстрой дифференциальной компиляции сравниваются изменения в конфигурационной таблице, и компиляция выполняется только при наличии изменений. Также при быстрой дифференциальной компиляции код не генерируется.

Правила автоматической компиляции конфигурационных таблиц:

  • Первая строка должна быть заголовком на английском языке.
  • Вторая строка может содержать комментарии на китайском языке.
  • Третья строка определяет тип столбца, значение по умолчанию и является ли столбец первичным ключом. Рекомендуется установить первый столбец как «Id» с типом int, 0 и первичным ключом (pk).
  • Если заголовок на английском языке содержит слово «Comment», он не будет автоматически компилироваться.
  • Только лист Sheet1 обрабатывается, листы Sheet2 и Sheet3 могут быть заполнены произвольными данными. Листы можно переименовать.
  • Любые элементы, кроме содержимого ячеек, такие как текстовые поля, комментарии или диаграммы, могут быть добавлены по желанию.

Генерация кода

Модуль конфигурационной таблицы автоматически генерирует код на основе типов полей, заданных в заголовках таблиц Excel. Пример кода на C#:

    public partial class ExampleInfos
    {
		public static readonly string TabFilePath = "Example.bytes";

        public static TableFile GetTableFile()
        {
            return SettingModule.Get(TabFilePath);
        }

        public static IEnumerable GetAll()
        {
            var tableFile = SettingModule.Get(TabFilePath);
            foreach (var row in tableFile)
            {
                yield return ExampleInfo.Wrap(row);
            }
        }

        public static ExampleInfo GetByPrimaryKey(object primaryKey)
        {
            var tableFile = SettingModule.Get(TabFilePath);
            var row = tableFile.GetByPrimaryKey(primaryKey);
            if (row == null) return null;
            return ExampleInfo.Wrap(row);
        }
    }

См. KEngine.UnityProject/Assets/AppSettings.cs

В реальном использовании просто вызовите сгенерированный код, связанный с конфигурационными таблицами:

        foreach (ExampleInfo exampleInfo in ExampleInfos.GetAll())
        {
            Debug.Log(string.Format("Name: {0}", exampleInfo.Name));
            Debug.Log(string.Format("Number: {0}", exampleInfo.Number));
        }
        var info = ExampleInfos.GetByPrimaryKey("A_1024");
        Debuger.Assert(info.Name == "Test1");

Ленивая инициализация

Lazy initialization — это метод, который откладывает выполнение ресурсоёмких операций до тех пор, пока они действительно не понадобятся. В данном случае, модуль SettingModule выполняет ленивую инициализацию для конфигурационных таблиц, которые должны быть загружены. Это помогает избежать централизованной инициализации при запуске игры, что сокращает время запуска и оптимизирует производительность выполнения.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mrkelly-KEngine.git
git@api.gitlife.ru:oschina-mirror/mrkelly-KEngine.git
oschina-mirror
mrkelly-KEngine
mrkelly-KEngine
master