Архитектура многопроцессорных и многопоточных акторов, которая позволяет легко создавать фибры (fiber) на клиентской и серверной сторонах для использования многопоточности, например, один фибр для сетевого соединения клиента, один для поиска пути, один для синхронизации кадров на уровне логики, и один для отображения.
Синхронное написание кода с использованием async/await, что позволяет избежать "ада обратных вызовов".
Нулевое потребление GC, мощная сериализация MemoryPack и высокая производительность сетевого уровня.
Поддержка надежного UDP, что обеспечивает быстрый сетевой отклик и предотвращает разрыв соединения при переключении между Wi-Fi и 4G, что особенно важно для competitive игр.
Защита от атак с использованием soft routing, что позволяет использовать недорогие хосты для защиты от хакерских атак, что дешевле, чем покупка высокозащищенных серверов, и при этом пользователи не теряют соединение.
Разработка на C# для обоих концов, что позволяет совместно использовать код на клиентской и серверной сторонах. C# обладает высокой производительностью, уступая только C++, и не требует изучения различных языков. Многие независимые разработчики могут использовать ET для создания MMORPG игр в одиночку.
Мощный анализатор компиляции, который помогает писать правильный код в стиле ET.
Поддержка горячего обновления hybridclr на клиентской стороне.
Поддержка горячей перезагрузки на клиентской и серверной сторонах, что позволяет изменять код без необходимости закрывать процессы, значительно повышая эффективность разработки и эксплуатации.
Полный демонстрационный пример, включая демон с синхронизацией состояния и предсказательным откатом кадров.
Полный механизм разработки ботов, который позволяет ботам напрямую использовать логику клиентского кода, сокращая до 95% объема работы по разработке ботов и облегчая интеграцию AI-ботов. Масштабное тестирование ботов становится простым.
Мощный механизм разработки AI, который проще в использовании, чем деревья поведения.
Мощный механизм разработки юнит-тестов, где каждый тест представляет собой полноценную игровую среду, что упрощает разработку без необходимости использовать mock-изоляцию.
Элегантная структура программы, где данные и методы полностью разделены.
Единый опыт разработки, при котором для разработки требуется только запуск Unity, а для публикации можно отдельно публиковать серверную часть, и это работает как на Windows, так и на Linux.
Полная визуализация данных на клиентской и серверной сторонах в период разработки. Включив макрос ENABLE_VIEW, можно увидеть все объекты Entity и их поля на клиентской и серверной сторонах в панели Unity Hierarchy.
17.Поддержка WebGL и мини-игр в WeChat, с версией ET8 для WebGL, которая обеспечивает такой же опыт разработки, как и ET8, и позволяет легко интегрировать сервер ET8. # Курсы от Панды, для связи добавьте QQ 80081771:
100W Ping Pong平均耗时4秒左右,平均每秒收发20W的消息。这个网络性能远远超过主线程的需求,大家可以自己测试一下,测试方法:
Unity Menu->ServerTools select Benchmark, Start Watcher。然后在Logs目录,打开Debug日志等一会所有连接完成就能看到下面的日志了。
2022-12-02 22:19:48.9837 (C2G_BenchmarkHandler.cs:13) benchmark count: 1000001
2022-12-02 22:19:53.4621 (C2G_BenchmarkHandler.cs:13) benchmark count: 2000001
2022-12-02 22:19:57.0416 (C2G_BenchmarkHandler.cs:13) benchmark count: 3000001
2022-12-02 22:20:00.6186 (C2G_BenchmarkHandler.cs:13) benchmark count: 4000001
2022-12-02 22:20:04.1384 (C2G_BenchmarkHandler.cs:13) benchmark count: 5000001
2022-12-02 22:20:08.2236 (C2G_BenchmarkHandler.cs:13) benchmark count: 6000001
2022-12-02 22:20:12.2842 (C2G_BenchmarkHandler.cs:13) benchmark count: 7000001
2022-12-02 22:20:15.8544 (C2G_BenchmarkHandler.cs:13) benchmark count: 8000001
2022-12-02 22:20:19.4085 (C2G_BenchmarkHandler.cs:13) benchmark count: 9000001
2022-12-02 22:20:24.2969 (C2G_BenchmarkHandler.cs:13) benchmark count: 10000001
2022-12-02 22:20:41.1448 (C2G_BenchmarkHandler.cs:13) benchmark count: 11000001
2022-12-02 22:20:44.7174 (C2G_BenchmarkHandler.cs:13) benchmark count: 12000001
2022-12-02 22:20:48.3188 (C2G_BenchmarkHandler.cs:13) benchmark count: 13000001
2022-12-02 22:20:51.7793 (C2G_BenchmarkHandler.cs:13) benchmark count: 14000001
2022-12-02 22:20:55.3379 (C2G_BenchmarkHandler.cs:13) benchmark count: 15000001
2022-12-02 22:20:58.8810 (C2G_BenchmarkHandler.cs:13) benchmark count: 16000001
2022-12-02 22:21:02.5156 (C2G_BenchmarkHandler.cs:13) benchmark count: 17000001
2022-12-02 22:21:06.0132 (C2G_BenchmarkHandler.cs:13) benchmark count: 18000001
2022-12-02 22:21:09.5320 (C2G_BenchmarkHandler.cs:13) benchmark count: 19000001
100W Ping Pong平均耗时4秒左右,平均每秒收发20W的消息。这个网络性能远远超过主线程的需求,大家可以自己测试一下,测试方法:
100W Ping Pong занимает около 4 секунд, в среднем за секунду отправляется и принимается 20W сообщений. Эта сетевая производительность значительно превышает потребности основного потока. Вы можете самостоятельно провести тест, метод тестирования:
Unity Menu->ServerTools select Benchmark, Start Watcher. Затем в папке Logs откройте Debug лог и подождите, пока все соединения завершатся, и вы увидите следующие логи.# Benchmark
100W Ping Pong тест занимает около 4 секунд, в среднем 20W сообщений в секунду. Эта сетевая производительность значительно превышает требования основного потока. Вы можете самостоятельно провести тест, следуя инструкции:
Unity Menu->ServerTools select Benchmark, Start Watcher. Затем в папке Logs откройте Debug лог и подождите, пока все соединения завершатся, после чего вы увидите следующие логи:
2022-12-02 22:19:48.9837 (C2G_BenchmarkHandler.cs:13) benchmark count: 1000001
2022-12-02 22:19:53.4621 (C2G_BenchmarkHandler.cs:13) benchmark count: 2000001
2022-12-02 22:19:57.0416 (C2G_BenchmarkHandler.cs:13) benchmark count: 3000001
2022-12-02 22:20:00.6186 (C2G_BenchmarkHandler.cs:13) benchmark count: 4000001
2022-12-02 22:20:04.1384 (C2G_BenchmarkHandler.cs:13) benchmark count: 5000001
2022-12-02 22:20:08.2236 (C2G_BenchmarkHandler.cs:13) benchmark count: 6000001
2022-12-02 22:20:12.2842 (C2G_BenchmarkHandler.cs:13) benchmark count: 7000001
2022-12-02 22:20:15.8544 (C2G_BenchmarkHandler.cs:13) benchmark count: 8000001
2022-12-02 22:20:19.4085 (C2G_BenchmarkHandler.cs:13) benchmark count: 9000001
2022-12-02 22:20:24.2969 (C2G_BenchmarkHandler.cs:13) benchmark count: 10000001
2022-12-02 22:20:41.1448 (C2G_BenchmarkHandler.cs:13) benchmark count: 11000001
2022-12-02 22:20:44.7174 (C2G_BenchmarkHandler.cs:13) benchmark count: 12000001
2022-12-02 22:20:48.3188 (C2G_BenchmarkHandler.cs:13) benchmark count: 13000001
2022-12-02 22:20:51.7793 (C2G_BenchmarkHandler.cs:13) benchmark count: 14000001
2022-12-02 22:20:55.3379 (C2G_BenchmarkHandler.cs:13) benchmark count: 15000001
2022-12-02 22:20:58.8810 (C2G_BenchmarkHandler.cs:13) benchmark count: 16000001
2022-12-02 22:21:02.5156 (C2G_BenchmarkHandler.cs:13) benchmark count: 17000001
2022-12-02 22:21:06.0132 (C2G_BenchmarkHandler.cs:13) benchmark count: 18000001
2022-12-02 22:21:09.5320 (C2G_BenchmarkHandler.cs:13) benchmark count: 19000001# ET7 выпущен! 18 лет Ифи
1.Изменена структура, объединены робототехника и сервер, что делает использование более простым. Один процесс может одновременно выполнять функции сервера и создавать роботов, настоящий ALL IN ONE! -- Реализовано
Объединены клиент и сервер, код сервера полностью включен в клиент. В клиенте можно включить сервер, что делает разработку чрезвычайно удобной. При публикации сервера можно выбрать публикацию в формате Dotnet или UnityServer, окончательный All IN ONE -- Реализовано
Визуализация Entity, все Entity на клиенте и сервере теперь визуализированы. Включите макрос ENABLE_CODES, запустите игру, откройте панель Hierarchy и разверните Init/Global/Scene(Process), чтобы увидеть -- Реализовано
Поскольку весь код находится в Unity, разработка плагинов ET стала очень простой, достаточно использовать импорт и экспорт Unity -- Реализовано
Добавлены мягкие маршруты, которые защищают от различных сетевых атак, не влияя на нормальных игроков, обязательны для онлайн-игр! -- Реализовано
Подписка на различные события и сетевые сообщения теперь включает DomainSceneType, что делает их более точными и менее склонными к ошибкам -- Реализовано
Брат СД добавил различные анализаторы, которые гарантируют, что написанный код соответствует стандартам ET, иначе компиляция не пройдет! (Эта функция также добавлена в ET6) -- Реализовано
ET7 интегрировал библиотеку горячего обновления huatuo. Обратите внимание!(Не путайте горячее обновление клиента и сервера, горячее обновление сервера всегда было в ET)
Сеть перенесена на отдельный поток, сериализация и десериализация обрабатываются в сетевом потоке, что значительно снижает нагрузку на основной поток. Кроме того, код сетевого уровня был переработан, что сделало его более элегантным.
Интегрирована библиотека Unity.Mathematics, логический слой клиента и сервера теперь используют одну и ту же библиотеку математики, что полностью унифицирует сервер и клиент.
В режиме ENABLE_CODES код разбит на 4 сборки, что решает проблему отключения анализаторов.
Singleton, управляемый Game, добавлены интерфейсы ISingletonUpdate и ISingletonLateUpdate, реализация соответствующих интерфейсов позволяет выполнять методы Update и LateUpdate. Класс Game больше не связан с EventSystem и другими одиночными классами.
Если Actor-сообщение отправляется в тот же процесс, оно не проходит через сеть, а обрабатывается напрямую, что значительно повышает производительность. # ET6 выпущен! ET6 по сравнению с ET5 претерпел значительные изменения, можно сказать, что это переход от Фэн Цзянь до Янь Фэй. 6.0 обладает следующими удивительными особенностями:
Полная горячая обновляемость клиентской логики (на основе ILRuntime), нет частей, которые нельзя обновить.
Горячая перезагрузка как на клиентской, так и на серверной стороне, разработчики могут изменять логику кода без перезапуска клиентской или серверной части, что делает разработку крайне удобной.
Фреймворк для роботов, логика и представление клиентской части ET6 разделены, роботы могут напрямую использовать логический слой клиентской части для нагрузочного тестирования, что требует минимального количества кода для создания роботов, облегчая нагрузочное тестирование серверной части.
Фреймворк для тестовых случаев, использование логического слоя клиентской части для написания юнит-тестов, каждый тест представляет собой полную игровую среду, без необходимости в различных сложных моках.
Фреймворк для ИИ, более удобный, чем дерево поведения, написание ИИ проще, чем написание UI.
Новая архитектура серверной части, крайне элегантная.
Внутренняя и внешняя сеть KCP, с высокой производительностью, в сочетании с модулем программного маршрутизатора, может предотвращать различные сетевые атаки.# ET разработанного коммерческого проекта MMO «Тысячелетняя слава» успешно запущен, с 64 ядрами и 128 ГБ оперативной памяти на одном физическом сервере поддерживается 1,5 тысячи одновременных пользователей (в реальных условиях эксплуатации для поддержания экосистемы ограничено до 6000 одновременных пользователей, при 6000 пользователях загрузка CPU составляет около 30%). Для корректного отображения номеров строк в стеке, в продакшне используется версия Debug. Если использовать версию Release с включенной оптимизацией, производительность может удвоиться, достигнув 30000 одновременных пользователей на одном физическом сервере! За пять месяцев с момента запуска проект показал высокую стабильность. «Тысячелетняя слава» была разработана с нуля с использованием фреймворка ET за два года, что можно считать рекордной скоростью разработки. Успешный запуск «Тысячелетней славы» доказывает, что ET обладает всеми необходимыми возможностями для разработки любых крупных игр, обеспечивая высокую скорость и эффективность разработки! Технологии, использованные в клиентской и серверной части «Тысячелетней славы»:1. Динамические копии и разделение линий, распределение по мере необходимости, освобождение после использования.
Объединение линий, при малом количестве пользователей на линии несколько линий объединяются. Эта функция редко встречается в других MMO играх.
Smooth переход между клиентской и серверной частью, то есть технология бесшовного большого мира.
Кроссерверные копии и кроссерверные битвы.
Интеграция клиентской и серверной частей, использование клиентского кода для разработки серверных роботов для нагрузочного тестирования, 4 машины с 24 ядрами легко моделируют 10000 пользователей, выполняющих задания.
Различные AI-дизайны в «Тысячелетней славе», использование нового фреймворка AI, разработанного в ET, что делает разработку AI такой же простой, как разработка UI.
Фреймворк для тестовых случаев, большинство важных систем в «Тысячелетней славе» имеют тестовые случаи. В отличие от тестовых случаев на рынке, каждый тестовый случай в «Тысячелетней славе» представляет собой полную игровую среду, тестирующую протоколы, без необходимости создания различных мок-интерфейсов. Написание тестовых случаев происходит очень быстро.
Реализация AOI на основе сетки 3x3, динамическая настройка видимых игроков, снижение нагрузки на сервер.Защита от атак, в «Тысячелетней славе» разработана функция мягкого роутинга, при атаке атакуются только мягкие роутеры. Если игрок не получает ответ от сервера в течение нескольких секунд, клиент динамически переключается на другой мягкий роутер, пользователь практически не замечает этот процесс. В течение всего процесса сетевое соединение клиента не разрывается, данные не теряются.
Многое другое, что здесь не упоминается.# Введение в ET: ET — это открытый фреймворк для клиентской (на основе Unity3D) и серверной частей, серверная часть разработана на C# .NET Core как распределенная игровая серверная платформа. Основные особенности: высокая скорость разработки, мощная производительность, общий код логики для клиентской и серверной частей,完善的热更机制, поддержка надежных протоколов UDP, TCP и WebSocket, поддержка 3D навигации на сервере с использованием Recast и т. д.
Обычно для запуска распределённого сервера требуется множество процессов. Как только процессов становится много, пошаговая отладка становится очень сложной, что приводит к тому, что разработка серверной части в основном зависит от логов для поиска проблем. При обычной разработке игровой логики также приходится запускать множество процессов, что замедляет запуск и делает поиск проблем крайне неудобным, так как приходится искать ошибки в огромном количестве логов. Это создает очень неприятное ощущение, и долгое время никто не решал эту проблему. Фреймворк ET использует компонентный дизайн, аналогичный дизайну Overwatch. Все содержимое сервера разделяется на отдельные компоненты, которые при запуске подключаются в зависимости от типа сервера.Это похоже на компьютер, который модульно разделяется на память, CPU, материнскую плату и другие компоненты. Сочетая разные компоненты, можно собрать разные компьютеры, например, домашний ПК требует памяти, CPU, материнской платы, видеокарты, монитора и жесткого диска. Однако серверы, используемые в компании, не требуют монитора и видеокарты, а компьютеры в интернет-кафе могут не требовать жесткого диска. Благодаря такому дизайну, фреймворк ET может подключить все компоненты сервера к одному серверному процессу, и этот процесс будет иметь все функции сервера, то есть один процесс может использоваться как целая группа распределённых серверов. Это также похоже на компьютер, который имеет все компоненты ПК и может использоваться как сервер компании или компьютер в интернет-кафе.
Для разработки распределённого сервера требуется создание различных типов серверных процессов, таких как Login server, gate server, battle server, chat server, friend server и т. д. Традиционный подход требует предварительного определения, на каком сервере будет размещена текущая функция. Когда функций становится всё больше, например, если функция чата изначально находилась на центральном сервере, а затем её нужно выделить в отдельный сервер, это приводит к необходимости переноса большого количества кода, что очень утомительно.В фреймворке ET при обычной разработке не требуется особо заботиться о том, на каком сервере будет размещена текущая функция. Разработка ведется в одном процессе, и функции разрабатываются в виде компонентов. При публикации можно использовать конфигурацию для нескольких процессов, чтобы опубликовать их в виде нескольких процессов. Это очень удобно, так как серверы можно разделять произвольным образом. Для этого требуется изменить лишь небольшое количество кода, подключив разные компоненты к разным серверам.
Фреймворк ET использует C# для серверной части, и C# теперь полностью кросс-платформенный. Для запуска на Linux достаточно установить .NET Core, и сервер будет работать без каких-либо изменений в коде. В плане производительности, .NET Core сейчас очень эффективен. Производительность .NET Core очень высока, она значительно превосходит производительность Lua, Python и JavaScript. Для разработки игровых серверов это не представляет никаких проблем. Обычно мы разрабатываем и отлаживаем приложения с помощью Visual Studio на Windows, а при публикации развертываем их на Linux. Фреймворк ET также предоставляет инструмент для однократной синхронизации: откройте Unity -> Tools -> Rsync Sync, чтобы синхронизировать код на Linux.```bash . /Run.sh Config/StartConfig/192.168.12.188.txt
Эта команда скомпилирует и запустит сервер.
### 4. Поддержка корутин
C# изначально поддерживает асинхронную синтаксическую конструкцию `async` и `await`, что делает его значительно мощнее, чем корутины в Lua и Python. Новые версии Python и JavaScript даже переняли синтаксис корутин из C#. В распределенных серверных приложениях, где требуется множество удаленных вызовов между серверами, отсутствие асинхронной синтаксической поддержки существенно усложняет разработку. Поэтому, хотя Java и подходит для разработки одиночных серверов, она не является оптимальным выбором для разработки крупных распределенных игровых серверов. Например:
```c#
// Отправить C2R_Ping и дождаться ответного сообщения R2C_Ping
R2C_Ping pong = await session.Call(new C2R_Ping()) as R2C_Ping;
Log.Debug("Получен R2C_Ping");
``````markdown
// Выполнить запрос в MongoDB на объект Player с id 1 и дождаться ответа
Player player = await Game.Scene.GetComponent<DBProxyComponent>().Query<Player>(1);
Log.Debug($"Печать player name: {player.Name}");
Можно видеть, что благодаря async
и await
все асинхронные операции между серверами становятся очень последовательными, не нужно разбивать логику на несколько частей. Это значительно упрощает разработку распределенных серверов.
Одним из главных преимуществ языка erlang является прозрачный механизм сообщений, при котором пользователи не должны заботиться о том, в каком процессе находится объект, достаточно получить его id, чтобы отправить сообщение. Фреймворк ET также предоставляет механизм сообщений actor. Объектам-сущностям нужно только подключить компонент MailBoxComponent, и они становятся акторами. Любые серверы могут отправлять сообщения этим объектам, зная их id, без необходимости знать, на каком сервере или на какой физической машине они находятся. Принцип реализации также прост: фреймворк ET предоставляет сервер местоположений, и все объекты-сущности, подключенные к MailBoxComponent, регистрируют свои id и местоположение на этом сервере. Когда другие серверы отправляют сообщения этим объектам, они сначала запрашивают их местоположение на сервере местоположений, а затем отправляют сообщение.
### 7. Использование C# для горячего обновления на клиенте, с возможностью быстрой переключения
Можно использовать csharp.lua или ILRuntime с небольшими изменениями для реализации горячего обновления на клиенте. Больше не нужно использовать ужасный lua, клиент может реализовать горячее обновление всей логики, включая протоколы, конфигурации, UI и т. д.
### 8. Горячая перезагрузка клиентского кода
Разработчики могут изменять логику клиентского кода без перезапуска клиента, что делает разработку крайне удобной.
### 9. Клиент и сервер используют один и тот же язык и делятся кодом
Скачайте фреймворк ET, откройте проект сервера, и вы увидите, что сервер ссылается на много кода клиента. Это позволяет обеим сторонам делиться кодом. Например, сетевые сообщения между клиентом и сервером могут быть полностью объединены в одном файле, и для добавления нового сообщения достаточно изменить его только один раз.
### 10.Прозрачное переключение между протоколами KCP, ENET, TCP и WebSocket.
Фреймворк ET поддерживает не только TCP, но и надежный протокол UDP (ENET и KCP). ENet — это сетевая библиотека, используемая в League of Legends, которая отличается быстротой и хорошей производительностью даже при потере пакетов. Мы проводили тесты, и при потере пакетов на 5% игра MOBA начинает сильно тормозить, но с использованием ENet при потере пакетов на 20% игра не тормозит. Очень мощно. Фреймворк также поддерживает использование протокола KCP, который также является надежным протоколом UDP и, по слухам, имеет лучшую производительность, чем ENET. При использовании KCP обратите внимание, что необходимо добавить механизм отправки пингов, иначе сервер отключит соединение через 20 секунд без получения пакетов. Протоколы можно переключать прозрачно.
### 11. Функция 3D навигации Recast
Можно экспортировать данные сцены из Unity для использования на сервере для навигации Recast. Это очень удобно для разработки MMO, и демонстрация показывает функцию 3D навигации на сервере.
### 12. Поддержка REPL на сервере и динамическое выполнение нового кода
Это позволяет выводить любые данные из процесса, что значительно упрощает поиск проблем на сервере. Для запуска REPL введите `repl` в консоли и нажмите Enter, чтобы перейти в режим REPL.
### 13. Поддержка фреймворка для клиентских ботовС помощью нескольких строк кода можно создать бота для входа в игру. Боты легко используются для нагрузочного тестирования, и они полностью аналогичны обычным игрокам. Использование ботов для нагрузочного тестирования перед запуском значительно снижает вероятность сбоев.
### 14. Фреймворк AI
Фреймворк AI в ET делает написание AI проще, чем написание UI.
### 15. Фреймворк для тестовых случаев
В отличие от тестовых случаев на рынке, тестовые случаи в ET представляют собой полную игровую среду, что позволяет тестировать на уровне протокола без необходимости создания различных мок-интерфейсов. Написание тестов происходит очень быстро.
### 16. Ещё много функций, которые я не буду подробно описывать
a. Очень удобно проверять использование CPU и утечки памяти с помощью встроенных инструментов анализа Visual Studio, больше не нужно беспокоиться о проверке производительности и утечек памяти.
b. Использование библиотеки NLog для логирования очень удобно. В обычном режиме разработки можно записывать все серверные логи в один файл, больше не нужно искать логи в каждом файле.
c. Единое использование формата Mongodb bson для сериализации. Все сообщения и конфигурационные файлы хранятся в формате bson или json, и в будущем можно использовать Mongodb в качестве базы данных, больше не нужно выполнять преобразование форматов.
d. Предоставляется синхронный инструмент.ET-фреймворк — это мощная и гибкая архитектура распределенного сервера, которая полностью удовлетворяет потребности большинства крупных игр. Используя этот фреймворк, разработчики клиентской части могут самостоятельно выполнять разработку для обоих концов, что позволяет сэкономить значительные ресурсы и время на коммуникацию.
Связанные сайты:
[ET-форум](https://et-framework.cn)
Делиться в сообществе:
[Дерево поведения и ветка fgui (разрабатывается и поддерживается Duke Chiang)](https://github.com/DukeChiang/ET.git)
[Заметки по изучению ET (автор:烟雨迷离半世殇)](https://www.lfzxb.top/)
[Заметки по графическому рендерингу и изучению ET (автор:咲夜詩)](https://acgmart.com/)
[Процесс выполнения серверной части фреймворка](http://www.cnblogs.com/fancybit/p/et1.html)
[Конфигурация запуска ET](http://www.cnblogs.com/fancybit/p/et2.html)
[Описание демонстрационного примера фреймворка](http://www.jianshu.com/p/f2ea0d26c7c1)
[Развертывание на Linux](http://gad.qq.com/article/detail/35973)
Коммерческие проекты:
1. [Тысячелетний ветер](https://www.qiangu.com/)
2. [Клятва богов](https://www.taptap.cn/app/248095)
3. [Магическая точка 2](https://www.taptap.com/app/227804)
4. [Не вырастает](https://www.taptap.com/app/71064)
5. [Каждый день прятки 2 (19-е место в рейтинге загрузок на iOS в Китае на Новый год 2019)](https://www.taptap.com/app/198781)
6. [Бык и тигр](https://gitee.com/ECPS_admin/PlanB)
7. [Пятизвёздочная маджонг](https://github.com/wufanjoin/fivestar)
8. [Клятва богов](https://www.taptap.cn/app/248095)
9. [Код: Рога: Бесконечность](https://www.taptap.cn/app/247225)Демонстрационные примеры от участников сообщества:
1. [Дура (клиент и сервер)](https://github.com/Viagi/LandlordsCore)
2. [Система инвентаря](https://gitee.com/ECPS_admin/planc)
3. [Демонстрационный пример мобильного рендеринга](https://github.com/Acgmart/Sekia_TechDemo)
4. [Большая битва шаров (ET 7.2)](https://github.com/FlameskyDexive/Legends-Of-Heroes)Видеоуроки:
[Уроки по ET 6.0 от Алфавита](https://edu.uwa4d.com/course-intro/1/375)
[Уроки от Учителя Roubing](http://www.taikr.com/my/course/972)
[Уроки от Учителя Guan Jianming](https://edu.manew.com/course/796)
[Уроки для новичков в ET - Уроки от Chu Jian](https://pan.baidu.com/s/1a5-j2R5QctZpC9n3sMC9QQ) Пароль: ru1j
[Новые уроки для новичков в ET - Уроки от Chu Jian](https://www.bilibili.com/video/av33280463/?redirectFrom=h5)
[Руководство по запуску ET на Mac - Уроки от L](https://pan.baidu.com/s/1VUQbdd1Yio7ULFXwAv7X7A) Пароль: l3e3
[Серия уроков по фреймворку ET - Уроки от Yan Yu - версия 6.0](https://space.bilibili.com/33595745/favlist?fid=759596845&ftype=create).net core ресурсы для игр
[Сборник различных проектов на dotnet core](https://github.com/thangchung/awesome-dotnet-core)
__Обсуждение в QQ-группе: 474643097__
# Донат через Alipay
# Дружественные ссылки
[Box2DSharp](https://github.com/Zonciu/Box2DSharp) — порт Box2D на C#, с высокой производительностью
[xasset](https://github.com/xasset/xasset) — набор инструментов для управления ресурсами в Unity, компактный и надежный
[QFramework](https://github.com/liangxiegame/QFramework) — ваш первый K.I.S.S. фреймворк для Unity3d
[ET UI фреймворк](https://github.com/zzjfengqing/ET-EUI) — UI фреймворк, реализованный буквой, в стиле ET, с различными событиями
[ETCsharpToXLua](https://github.com/zzjfengqing/ETCsharpToXLua) — горячие обновления клиента ET, реализованные с использованием csharp.lua
[et-6-with-ilruntime](https://www.lfzxb.top/et-6-with-ilruntime) — горячие обновления клиента ET, реализованные с использованием ILRuntime
[Luban](https://github.com/focus-creative-games/luban) — решение для конфигурации игр, подходящее для крупных и средних проектов
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )