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

OSCHINA-MIRROR/dukechiang-DCET

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 14:13 9be2863

Краткое введение

DCET — это двунаправленный фреймворк для клиента Unity3D и сервера .Net Core.

DCET и ET: различия

DCET является ответвлением от ET 4.0, 5.0 и 6.0. В нём были произведены следующие изменения:

  • Удален модуль UGUI.
  • Добавлен модуль FGUI, включающий в себя загрузку и управление UI, а также автоматическую генерацию кода для управления элементами интерфейса.
  • Добавлен модуль дерева поведения, включающий визуальный редактор, двунаправленное выполнение во время работы и логическую горячую замену.
  • Добавлен Lua-модуль, включающий CSharp.Lua (автоматический перевод слоя кода на Lua), xLua (выполнение перевода слоя Lua, созданного CSharp.Lua), RapidJson, lua-protobuf, LuaSocket, LPeg, FFI for lua53 и другие инструменты для горячей замены кода на Lua.
  • Фреймворк был разделен на модули и управляется с помощью Unity PackageManager. Это позволяет выбирать необходимые модули в зависимости от потребностей проекта. Также было произведено разделение между фреймворком и бизнес-логикой игры, что упрощает поддержку фреймворка.

Начало работы

  1. Настройка среды:

    • Шаг 1: Скачайте DCET одним из следующих способов:
      • Загрузите сжатый архив по ссылке https://github.com/DukeChiang/DCET/archive/dukechiang_master.zip.
      • Используйте Git для загрузки через командную строку, введя команду git clone https://github.com/DukeChiang/DCET.git в папку назначения (например, D:/WorkSpace/DCET).
      • Воспользуйтесь SourceTree или другим инструментом для визуального управления версиями, чтобы загрузить проект. Найдите функцию Clone, введите исходный путь https://github.com/DukeChiang/DCET.git, выберите целевой путь (например, D:/WorkSpace/DCET) и нажмите Clone. Если Clone не работает, попробуйте способ 2 и используйте функцию Add для визуального управления.
    • Шаг 2: Скачайте и установите Unity 2018.4.12f1. Вы можете выбрать любую версию Unity, которая поддерживает работу с DCET, но рекомендуется использовать последнюю стабильную версию. Ссылки для скачивания:
      • Китайская версия: https://unity.cn/releases.
      • Международная версия: https://unity3d.com/get-unity/download/archive. Для доступа к сайту может потребоваться VPN.
      • Международное зеркало: https://github.com/AlianBlank/download.unity.com. Зеркало обновляется каждую неделю.
    • Шаг 3: Установите Visual Studio 2019. При установке Unity вы можете выбрать установку Visual Studio или загрузить ее отдельно с сайта https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=16. Затем установите компоненты, которые могут понадобиться при разработке DCET: поддержка разработки для настольных приложений с использованием .NET, разработка на C++ для настольных систем, использование Unity для разработки игр, разработка C++ для Linux и разработка кроссплатформенных приложений с использованием .Net Core. Рекомендуется установить все эти компоненты.
  2. Руководство по запуску:

    • Шаг 1: Запустите сервер. После настройки среды откройте решение Server/Server.sln. Скомпилируйте его, и если в консоли нет сообщений об ошибках, нажмите Start для запуска сервера. Если консоль сообщает о неудачной компиляции какого-либо проекта, возможно, среда настроена не полностью. В этом случае щелкните правой кнопкой мыши на проекте DCET.Init, перейдите в свойства и проверьте, правильно ли установлена целевая платформа .NET Core 3.0. Если она не установлена, загрузите ее с сайта https://dotnet.microsoft.com/download. Если после установки .NET Core 3.0 проблема не решена, возможно, требуется обновить Visual Studio до последней версии.
    • Шаг 2: Запустите клиент. Откройте Unity 2018.4.12f1, выберите Open, найдите каталог DCET в Unity и запустите проект. Перейдите в сцену Init, запустите ее и войдите в систему. Теперь вы можете щелкнуть правой кнопкой мыши по экрану, чтобы увидеть, как скелет перемещается синхронно с официальным примером. Если во время запуска появляется сообщение об ошибке System.Exception: Rpc error, вероятно, сервер не запущен успешно. Проверьте шаг 1. Если во время выполнения возникает исключение XLua.LuaException: F:/DukeChiangGit/ET/Unity/Assets\Res/Lua/Hotfix/Message/AutoGeneratedCode/OuterMessage.lua.txt:600: attempt to call a nil value (method 'setIsRequired'), возможно, файл Wrap не был сгенерирован. Нажмите меню XLua/Generate Code для генерации файла.
  3. Руководство по разработке:

    • Сервер: Код сервера находится в каталоге DCET/Server, а решение Server.sln управляет всеми проектами, включая фреймворк и бизнес-логику. Фреймворк расположен в Packages, а бизнес-логика — в Assets. Проекты разделены на Init (вход), Runtime (не горячая замена), Hotfix (горячая замена) и Benchmark (тестирование). Init является основным проектом, а остальные зависят от него.
    • Клиент: Клиентский код находится в DCET/Unity, а решение Unity.sln управляет всеми проектами. Фреймворк находится в Packages, а бизнес-логика — в Assets, разделенная на проекты Runtime (вход и не горячая замена), Hotfix (горячая замена) и Editor (редактор). Editor зависит от Hotfix, а Runtime использует отражение или Lua для запуска Hotfix. Runtime не зависит от Hotfix. Важно отметить, что зависимость между фреймворком и бизнес-логикой должна быть следующей: бизнес-логика → фреймворк. Неправильное управление зависимостями может привести к путанице в проектах и затруднить их поддержку.
  4. Продвинутое использование:

    • Модуль: DCET разделен на несколько модулей, включая ядро, загрузчик, конфигурацию, сеть, мьютекс, числовые значения, поиск пути, дерево поведения, FGUI и Lua. Каждый модуль обычно состоит из трех проектов: Editor (для редактора), Runtime (для не горячей замены) и Hotfix (для горячей замены). Зависимость между ними следующая: Editor → Hotfix → Runtime. Между модулями существует зависимость: Lua → другие модули → ядро. Пользователи могут легко добавлять или удалять модули, следуя этой зависимости.
    • Ядро: Ядро является основой для других модулей и предоставляет базовые функции для реализации сущностей и событий. Оно расположено в Packages/DCET.Core. Entity — это сущность, которая представляет собой идею разработки и реализации объектов на основе чистой ECS (Entity-Component-System). Она имеет некоторое сходство с GameObject в Unity, но также отличается от него. Основное отличие заключается в том, что Unity использует дизайн, основанный на Entity+Component, в то время как ET применяет подход, где всё является Entity, и при этом Entity также обладает возможностями Component. Этот дизайн обеспечивает удобство организации и повторного использования кода, делая структуру кода похожей на дерево и облегчая комбинирование и повторное использование кода подобно ветвям дерева.

Например, у персонажа есть список навыков, каждый из которых имеет свой способ действия: прямой или с подзарядкой.

public class Role : Entity
{
    // Информация о роли
}

public class SkillComponent : Entity
{
    private readonly Dictionary<long, Skill> idSkills = new Dictionary<long, Skill>();

    // Методы управления навыками
}

public class Skill : Entity
{
    // Информация о навыке
}

public class SkillChargeComponent : Entity
{
    public void Start()
    {
        // Начало зарядки
    }

    public void End()
    {
        // Завершение зарядки
    }
}

Если навык требует подзарядки, то к нему можно добавить компонент SkillChargeComponent. В противном случае этот компонент не нужен, и логика подзарядки не будет использоваться. Это позволяет легко повторно использовать логику кода и обеспечивает чёткую организацию кода.

Кроме того, Entity имеет жизненный цикл, аналогичный MonoBehaviour в Unity. Однако реализация жизненного цикла в ET немного отличается. Она осуществляется через атрибуты и автоматическое регистрацию на основе этих атрибутов при запуске, а затем выполняется в соответствии с жизненным циклом. Вот пример использования атрибутов для определения жизненного цикла:

[ObjectSystem]
public class TestComponentAwakeSystem : AwakeSystem<TestComponent, string>
{
    public override void Awake(TestComponent self, string param1)
    {
        self.Awake(param1);
    }
}

[ObjectSystem]
public class TestComponentLoadSystem : LoadSystem<TestComponent>
{
    public override void Load(TestComponent self)
    {
        self.Load();
    }
}

[ObjectSystem]
public class TestComponentUpdateSystem : UpdateSystem<TestComponent>
{
    public override void Update(TestComponent self)
    {
        self.Update();
    }
}

[ObjectSystem]
public class TestComponentLateUpdateSystem : LateUpdateSystem<TestComponent>
{
    public override void LateUpdate(TestComponent self)
    {
        self.LateUpdate();
    }
}

[ObjectSystem]
public class TestComponentDestroySystem : DestroySystem<TestComponent>
{
    public override void Destroy(TestComponent self)
    {
        self.Destroy();
    }
}

EventSystem представляет собой систему событий, которая является важным инструментом для развязки кода. Подобно тому, как в реальном мире существуют тысячи связей между различными аспектами, если все эти связи будут тесно переплетены, это может затруднить поддержку кода. В этом случае код должен быть организован по классам, где ссылки на классы и события (или делегаты) служат мостами между ними. Ссылки на классы представляют собой прямую и простую связь, но если полагаться только на них, это может привести к запутанному коду, трудностям с повторным использованием и сложностям в поддержке. Поэтому события (или делегаты) используются для обеспечения развязки (слабой связи), особенно когда необходимо связать класс с другим классом, который уже связан с третьим классом. Это помогает создать условия для повторного использования и избежать формирования сложной сетевой структуры кода. В результате структура кода становится древовидной, ясной и удобной для повторного использования и поддержки.

В ET система событий реализуется аналогично системе жизненного цикла, описанной выше. Пример использования системы событий:

// Запуск события
Game.EventSystem.Run(EventIdType.Log, "Hello World");

// Обработка события
[Event(EventIdType.Log)]
public class Log_WriteLine: AEvent<string>
{
    public override void Run(string param1)
    {
        Console.WriteLine(param1);
    }
}

Это лишь часть текста, переведённая с учётом указанных ограничений. Для получения полного перевода рекомендуется обратиться к специалисту.

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

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

1
https://api.gitlife.ru/oschina-mirror/dukechiang-DCET.git
git@api.gitlife.ru:oschina-mirror/dukechiang-DCET.git
oschina-mirror
dukechiang-DCET
dukechiang-DCET
dukechiang_master