{"id":22549072,"url":"https://github.com/dcfapixels/dragonecs-unity","last_synced_at":"2025-08-25T20:05:12.587Z","repository":{"id":226935683,"uuid":"615944749","full_name":"DCFApixels/DragonECS-Unity","owner":"DCFApixels","description":"DragonECS integration with Unity","archived":false,"fork":false,"pushed_at":"2025-06-27T11:46:35.000Z","size":835,"stargazers_count":20,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-25T20:05:12.268Z","etag":null,"topics":["csharp","dragon-ecs","dragonecs","ecs","ecs-framework","entity-component-system","extension","unity","unity3d"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DCFApixels.png","metadata":{"files":{"readme":"README-RU.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-03-19T06:19:39.000Z","updated_at":"2025-06-20T06:35:56.000Z","dependencies_parsed_at":"2025-04-18T15:34:13.881Z","dependency_job_id":"d3530bda-1023-491d-8350-f62ad95184f5","html_url":"https://github.com/DCFApixels/DragonECS-Unity","commit_stats":null,"previous_names":["dcfapixels/dragonecs-unity"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/DCFApixels/DragonECS-Unity","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCFApixels%2FDragonECS-Unity","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCFApixels%2FDragonECS-Unity/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCFApixels%2FDragonECS-Unity/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCFApixels%2FDragonECS-Unity/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DCFApixels","download_url":"https://codeload.github.com/DCFApixels/DragonECS-Unity/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DCFApixels%2FDragonECS-Unity/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272124751,"owners_count":24877720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-25T02:00:12.092Z","response_time":1107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","dragon-ecs","dragonecs","ecs","ecs-framework","entity-component-system","extension","unity","unity3d"],"created_at":"2024-12-07T16:07:49.678Z","updated_at":"2025-08-25T20:05:12.549Z","avatar_url":"https://github.com/DCFApixels.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg width=\"400\" src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/3bb780b7-ab64-4f02-a9be-9632fcfe1b47\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg alt=\"Version\" src=\"https://img.shields.io/github/package-json/v/DCFApixels/DragonECS-Unity?color=%23ff4e85\u0026style=for-the-badge\"\u003e\n\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/DCFApixels/DragonECS-Unity?color=ff4e85\u0026style=for-the-badge\"\u003e\n\u003ca href=\"https://discord.gg/kqmJjExuCf\"\u003e\u003cimg alt=\"Discord\" src=\"https://img.shields.io/badge/Discord-JOIN-00b269?logo=discord\u0026logoColor=%23ffffff\u0026style=for-the-badge\"\u003e\u003c/a\u003e\n\u003ca href=\"http://qm.qq.com/cgi-bin/qm/qr?_wv=1027\u0026k=IbDcH43vhfArb30luGMP1TMXB3GCHzxm\u0026authKey=s%2FJfqvv46PswFq68irnGhkLrMR6y9tf%2FUn2mogYizSOGiS%2BmB%2B8Ar9I%2Fnr%2Bs4oS%2B\u0026noverify=0\u0026group_code=949562781\"\u003e\u003cimg alt=\"QQ\" src=\"https://img.shields.io/badge/QQ-JOIN-00b269?logo=tencentqq\u0026logoColor=%23ffffff\u0026style=for-the-badge\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# Интеграция с Unity для [DragonECS](https://github.com/DCFApixels/DragonECS)\n\n\u003ctable\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"3\"\u003eReadme Languages:\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd nowrap width=\"100\"\u003e\n      \u003ca href=\"https://github.com/DCFApixels/DragonECS-Unity/blob/main/README-RU.md\"\u003e\n        \u003cimg src=\"https://github.com/user-attachments/assets/3c699094-f8e6-471d-a7c1-6d2e9530e721\"\u003e\u003c/br\u003e\n        \u003cspan\u003eРусский\u003c/span\u003e\n      \u003c/a\u003e  \n    \u003c/td\u003e\n    \u003ctd nowrap width=\"100\"\u003e\n      \u003ca href=\"https://github.com/DCFApixels/DragonECS-Unity\"\u003e\n        \u003cimg src=\"https://github.com/user-attachments/assets/30528cb5-f38e-49f0-b23e-d001844ae930\"\u003e\u003c/br\u003e\n        \u003cspan\u003eEnglish(WIP)\u003c/span\u003e\n      \u003c/a\u003e  \n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/br\u003e\n\nРасширение добавит набор инструментов для отладки и связи с движком Unity.\n\n\u003e [!WARNING]\n\u003e Проект в стадии разработки. API может меняться.  \n\u003e Readme еще не завершен, если есть не ясные моменты, вопросы можно задать тут [Обратная связь](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md#%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F-%D1%81%D0%B2%D1%8F%D0%B7%D1%8C)\n\n\u003e [!WARNING]\n\u003e Встроенные реализации шаблонов `UnityComponent\u003cT\u003e` были перенесены [СЮДА](https://gist.github.com/DCFApixels/c250f2561f09e09ab3e6a4bd4f3013cb#file-unitycomponenttemplates-cs) Так как некоторые модули Unity отключаемы, и например отключение модуля физики приведет к тому что код реализации `UnityComponent\u003cRigidbody\u003e` или  `UnityComponent\u003cCollider\u003e` не будет компилироваться.\n\n//https://gist.github.com/DCFApixels/c250f2561f09e09ab3e6a4bd4f3013cb#file-unitycomponenttemplates-cs\n# Оглавление\n- [Установка](#установка)\n- [Debug](#debug)\n  - [Debug Модуль](#debug-модуль)\n  - [Debug Сервис](#debug-сервис)\n  - [Визуальная отладка](#визуальная-отладка)\n- [Шаблон Сущности](#шаблон-сущности)\n- [Связь с GameObject](#связь-с-gameobject)\n- [World Provider](#world-provider)\n- [Шаблон Пайплайна](#шаблон-пайплайна)\n- [FixedUpdate LateUpdate ](#fixedupdate-lateupdate)\n- [Документация проекта](#документация-проекта)\n- [Окно настроек](#окно-настроек)\n- [FAQ](#faq)\n\n\u003c/br\u003e\n\n# Установка\nСемантика версионирования - [Открыть](https://gist.github.com/DCFApixels/e53281d4628b19fe5278f3e77a7da9e8#file-dcfapixels_versioning_ru-md)\n## Окружение\nОбязательные требования:\n+ Зависимость: [DragonECS](https://github.com/DCFApixels/DragonECS)\n+ Минимальная версия C# 8.0;\n+ Минимальная версия Unity 2021.2.0;\n\nПротестировано:\n+ **Unity:** Минимальная версия 2021.2.0;\n\n## Установка для Unity\n* ### Unity-модуль\nПоддерживается установка в виде Unity-модуля в  при помощи добавления git-URL [в PackageManager](https://docs.unity3d.com/2023.2/Documentation/Manual/upm-ui-giturl.html) или ручного добавления в `Packages/manifest.json`: \n```\nhttps://github.com/DCFApixels/DragonECS-Unity.git\n```\n* ### В виде исходников\nПакет так же может быть добавлен в проект в виде исходников.\n\n\u003c/br\u003e\n\n# Debug\n## Debug Модуль\nПодключение модуля отладки в Unity.\n```c#\nEcsDefaultWorld _world = new EcsDefaultWorld();\nEcsEventWorld _eventWorld = new EcsDefaultWorld();\n\n_pipeline = EcsPipeline.New()\n    //...\n    // Подключение и инициализация отладки для миров _world и _eventWorld\n    .AddUnityDebug(_world, _eventWorld)\n    //...\n    .BuildAndInit();\n```\n## Debug Сервис\n`UnityDebugService`- реализация [Debug-сервиса для `EcsDebug`](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md#ecsdebug). В редакторе по умолчанию автоматически инициализируется и связывает `EcsDebug.Print` с консолью Unity, `EcsProfilerMarker` c профайлером и т.д.\n```c#\n//Ручная активация.\nUnityDebugService.Activate();\n\n//Выведет сообщение в консоли Unity.\nEcsDebug.Print(); \n\nvar someMarker = new EcsProfilerMarker(\"SomeMarker\");\nsomeMarker.Begin();\n//время выполнения этого участка будет отражено в профайлере Unity.\nsomeMarker.End();\n\n//Остановка игрового режима.\nEcsDebug.Break();\n```\n## Визуальная отладка\nВыполнена в виде специальных объектов-мониторов в которых отображается состояние разных аспектов фреймворка. Найти эти мониторы можно в Play Mode в разделе `DontDestroyOnLoad`. \n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/54e3f6d1-13c4-4226-a983-c672a29d33bb\"\u003e   \n\u003c/p\u003e\n\n-----\n\n* ### `PipelineMonitor`\nПоказывает состояние `EcsPipeline`. Системы отображаются в порядке их выполнения.\n\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"270px\" src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/3682fd0f-f47a-40ed-9d4c-cbad5d512e5d\"\u003e   \n\u003c/p\u003e\n\n-----\n\n* ### `PipelineProcessMonitor` \nОтображает в виде матрицы процессы и системы. Системы отображаются в порядке их выполнения. Точка в пересечении системы и процесса означает что эта система является частью этого процесса.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/c1a7960a-d65a-4f22-9597-fd863ff2b00c\"\u003e   \n\u003c/p\u003e\n\n-----\n\n* ### `WorldMonitor` \nПоказывает состояние `EcsWorld`. на каждый казанный мир создается отдельный монитор.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/7b6455fc-9211-425c-b0b8-288077e61543\"\u003e   \n\u003c/p\u003e\n\n-----\n\n* ### `EntityMonitor`\nПоказывает состояние сущности мира, позволяет добавлять/изменять/удалять компоненты по время Play Mode. На каждую сущность в мире создается отдельный монитор. Все мониторы сущностей помещаются в монитор мира.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/509ff472-05b5-4fd8-a0e6-739d7fa81ab1\"\u003e   \n\u003c/p\u003e\n\n-----\n\n\u003c/br\u003e\n\n# Шаблон Сущности\nНастраиваемый набор компонентов которые можно применить к сущностям. Шаблоны должны реализовывать интерфейс `ITemplateNode`. \n```c#\nITemplateNode someTemplate = /*...*/;\n//...\nforeach (var e in _world.Where(out Aspect a))\n{\n    // Применение шаблона сущности.\n    someTemplate.Apply(e, _world.id);\n}\n```\n```c#\n// Применение шаблона сразу при создании сущности.\nint e = _world.NewEntity(someTemplate);\n```\nПо умолчанию расширение содержит 2 вида шаблонов: `ScriptableEntityTemplate`, `MonoEntityTemplate`. \n\n## ScriptableEntityTemplate\nХранится как отдельный ассет. Наследуется от `ScriptableObject`.\nДействия чтобы создать `ScriptableEntityTemplate` ассет: \n\n\u003cdetails\u003e\n\u003csummary\u003eСоздать ассет: Asset \u003e Create \u003e DragonECS \u003e ScriptableEntityTemplate.\u003c/summary\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/8362e2d8-b83a-4dfc-91fd-38993746012f\"\u003e   \n\u003c/p\u003e\n\n\u003c/details\u003e\n\nЧтобы добавить компонент в меню `Add Component` Нужен [Шаблон компонента](#шаблон-компонента). Пример:\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/26379ee5-cadd-4838-a3b6-5b46771012c1\"\u003e   \n\u003c/p\u003e\n\n-----\n\n## MonoEntityTemplate\nКрепится к `GameObject`. Наследуется от `MonoBehaviour`. \n\n\u003cdetails\u003e\n\u003csummary\u003eПовесить компонент: Add Component \u003e DragonECS \u003e MonoEntityTemplate.\u003c/summary\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/07a43cb7-96e5-440c-965d-2970803df330\"\u003e   \n\u003c/p\u003e\n\n\u003c/details\u003e\n\nЧтобы добавить компонент в меню `Add Component` Нужен [Шаблон компонента](#шаблон-компонента). Пример:\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/7f6b722e-6f98-4d13-b2cd-5d576a3610bd\"\u003e   \n\u003c/p\u003e\n\n-----\n\n## Шаблон компонента\n\n### Реализация\nЧтобы компонент попал в меню `Add Component` нужно реализовать шаблон компонента. Шаблоны компонента это типы реализующие `IComponentTemplate`. \n\n* Упрощенная реализация:\n```c#\n// Обязательно добавить [Serializable] к типу компонента.\n[Serializable]\nstruct SomeComponent : IEcsComponent { /* ... */ }\nclass SomeComponentTemplate : ComponentTemplate\u003cSomeComponent\u003e { }\n```\n\n```c#\n// Тоже самое но для компонентов-тегов.\n[Serializable]\nstruct SomeTagComponent : IEcsTagComponent { }\nclass SomeTagComponentTemplate : TagComponentTemplate\u003cSomeComponent\u003e { }\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e* Полная реализация:\u003c/summary\u003e\n\n```c#\n[Serializable] \nstruct SomeComponent : IEcsComponent { /* ... */ }\nclass SomeComponentTemplate : IComponentTemplate\n{\n    [SerializeField]\n    protected SomeComponent component;\n    public Type Type { get { return typeof(SomeComponent); } }\n    public void Apply(int worldID, int entityID)\n    {\n        EcsWorld.GetPoolInstance\u003cEcsPool\u003cSomeComponent\u003e\u003e(worldID).TryAddOrGet(entityID) = component;\n    }\n    public object GetRaw() { return component; }\n    public void SetRaw(object raw) { component = (SomeComponent)raw; }\n    public void OnGizmos(Transform transform, IComponentTemplate.GizmosMode mode) { /*...*/ }\n    public void OnValidate(UnityEngine.Object obj) { /*...*/ }\n}\n```\n\n\u003c/details\u003e\n\u003c/br\u003e\n\n### Кастомизация отображения типов\nВ раскрывающемся при нажатии `Add Component` меню выбора компонента поддерживается иерархическое группирование. Производится группирование на основе мета-атрибута `[MetaGroup]`.\n\nКомпоненты в инспекторе по умолчанию отображаются окрашенными в случайный цвет сгенерированный на основе имени компонента, выбрать другой режим окраски можно в [окне настроек](#окно-настроек) фреймворка. Задать конкретный цвет можно при помощи мета-атрибута `[MetaColor]`.\n\nЕсли редактор смог автоматически определить связанный с компонентом скрипт, то слева от крестика удаления компонента будет иконка файла. Клик по иконке выделит файл скрипта в папке проекта, двойной клик откроет скрип для редактирования. Связанный файл ищется по сопоставлению имени типа и имени файла скрипта. \n\nЕсли у компонента есть мета-атрибут `[MetaDescription]`, то слева от крестика удаления компонента будет иконка подсказки, при наведении курсора покажется информация из `[MetaDescription]`.\n\n\u003c/br\u003e\n\n### Применение шаблонов компонентов вне стандартных шаблонов сущностей\nПри необходимости создания пользовательского шаблона, шаблоны компонентов поддерживают отображение вне стандартных `MonoEntityTemplate` и `ScriptableEntityTemplate`.\n```c#\n// ComponentTemplateReference добавляет кнопку выбора доступной реализации IComponentTemplate\n// и отображает шаблон компонента аналогично компонентам в MonoEntityTemplate или ScriptableEntityTemplate.\n[SerializeReference, ComponentTemplateReference]\nprivate IComponentTempalte _someComponent1;\n\n// Обертка над IComponentTempalte, которая работает аналогично примеру с атрибутом ComponentTemplateReference.\nprivate ComponentTemplateProperty _someComponent2;\n\n// Все это работает и для массивов.\n[SerializeReference, ComponentTemplateReference]\nprivate IComponentTempalte[] _components;\n```\n\n\u003c/br\u003e\n\n# Связь с GameObject\nСвязываются сущности и GameObject-ы с помощью коннектов. Коннекты со стороны GameObject - `EcsEntityConnect`, со стороны сущности - `GameObjectConnect`. `EcsEntityConnect` - управляющий коннект, `GameObjectConnect` - создается/удаляется автоматически.\n```c#\nEcsEntityConnect connect = /*...*/;\nentlong entity = _world.NewEntityLong();\n\n// Связывание сущности с GameObject.\n// Автоматически добавляется GameObjectConnect в сущность\n// и применяются шаблоны.\nconnect.ConnectWith(entity);\n\n// Или создать без применения шаблонов.\nconnect.ConnectWith(entity, false);\n\n// Отвязать.\n// Автоматически удалится GameObjectConnect.\nconnect.Disconnect();\n```\n\u003cdetails\u003e\n\u003csummary\u003eПовесить компонент: Add Component \u003e DragonECS \u003e EcsEntityConnect.\u003c/summary\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/cfa6eb1c-82ba-47f6-bee1-7986c1e31be7\"\u003e   \n\u003c/p\u003e\n\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/3484ed12-5417-4450-9908-1d3eb2858a2b\"\u003e   \n\u003c/p\u003e\n\n\u003e Просмотреть все компоненты связанной сущности можно развернув `RUNTIME COMPONENTS`.\n\n\u003e На панели внизу есть вспомогательные кнопки: 1) Отвязать сущность. 2) Удалить сущность. 3) Автоматическое заполнение массива шаблонов. 4) Каскадный вызов автозаполнения для всех дочерних коннектов в иерархии.\n\n---\n\n`AutoEntityCreator` автоматический создает сущность и связывает с GameObject. В инспекторе ему нужно указать `EcsEntityConnect` с которым связывать сущность и [Провайдер мира](#world-provider) в котором создать сущность.\n\n\u003cdetails\u003e\n\u003csummary\u003eПовесить компонент: Add Component \u003e DragonECS \u003e AutoEntityCreator.\u003c/summary\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/29bfef68-6e77-467c-84d3-14d73a9c614d\"\u003e   \n\u003c/p\u003e\n\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/55c11f1c-c0e0-435c-af9b-4c06678491a6\"\u003e   \n\u003c/p\u003e\n\n\u003e На панели внизу есть вспомогательные кнопки: 1) Автоматическое заполнение ссылки на коннект. 2) Каскадный вызов автозаполнения для всех дочерних экземпляров в иерархии.\n\n\u003c/br\u003e\n\n# World Provider\n`EcsWorldProvider\u003cTWorld\u003e` - это `ScriptableObject` обертка над `TWorld`, предназначенная для пробрасывания экземпляра мира и настройки через инспектор Unity. Для простых случаев достаточно будет использовать синглтон версию провайдера `EcsDefaultWorldSingletonProvider`. \n\n```c#\n// Синглтон провайдер создается автоматически в папке \"Assets/Resource\".\nEcsDefaultWorldSingletonProvider provider = EcsDefaultWorldSingletonProvider.Instance;\n// ...\n\nEcsDefaultWorld world = new EcsDefaultWorld();\n// Устанавливаем экземпляр мира в провайдер.\nprovider.Set(world);\n\n// ...\n\n//Получаем экземпляр мира, если провайдер был пуст, то он создаст новый мир.\nEcsDefaultWorld world = provider.Get();\n\nEcsPipeline pipeline = EcsPipeline.New()\n    //...\n    // Внедряем в системы полученный из провайдера мир.\n    .Inject(world)\n    //...\n    .BuildAndInit();\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eПример реализации провайдера для своего типа мира\u003c/summary\u003e\n\n```c#\n//Пример реализации своего провайдера для пробрасывания мира своего типа\n[CreateAssetMenu(fileName = nameof(EcsMyWorldProvider), menuName = EcsConsts.FRAMEWORK_NAME + \"/WorldProviders/\" + nameof(EcsMyWorldProvider), order = 1)]\npublic class EcsMyWorldProvider : EcsWorldProvider\u003cEcsMyWorld\u003e { }\n\n//Пример реализации синглтон версии для мира своего типа\npublic class EcsMyWorldSingletonProvider : EcsWorldProvider\u003cEcsMyWorld\u003e\n{\n    private static EcsMyWorldSingletonProvider _instance;\n    public static EcsMyWorldSingletonProvider Instance\n    {\n        get\n        {\n            if (_instance == null) { _instance = FindOrCreateSingleton\u003cEcsMyWorldSingletonProvider\u003e(\"SingletonMyWorld\"); }\n            return _instance;\n        }\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eСоздать ассет провайдера: Asset \u003e Create \u003e DragonECS \u003e WorldProviders \u003e Выбрать тип мира.\u003c/summary\u003e\n    \n\u003cp align=\"center\"\u003e\n\u003cimg width=\"780px\" src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/8aa1bd82-8a15-46ce-b950-3e74252243c6\"\u003e   \n\u003c/p\u003e\n\n\u003c/details\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/d01a671a-69e9-44b9-9ad1-e58d0e8857d7\"\u003e   \n\u003c/p\u003e\n\n\u003c/br\u003e\n\n# Шаблон Пайплайна\nПайплайн как и сущности можно собирать из шаблонов. Шаблоны пайплайна это модули, реализующие интерфейс `IEcsModule`。\n\nПо умолчанию расширение содержит 2 вида шаблонов: `ScriptablePipelineTemplate`, `MonoPipelineTemplate`.\n\n## ScriptablePipelineTemplate\nХранится как отдельный ассет. Наследуется от `ScriptableObject`. Действия чтобы создать `ScriptableEntityTemplate` ассет: `Asset \u003e Create \u003e DragonECS \u003e ScriptablePipelineTemplate`.\n\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"450\" src=\"https://github.com/user-attachments/assets/c61c483d-3f2f-4356-bf9d-62633fc06fce\"\u003e   \n\u003c/p\u003e\n\n## MonoPipelineTemplate\nКрепится к `GameObject`. Наследуется от `MonoBehaviour`. Повесить компонент: `Add Component \u003e DragonECS \u003e MonoPipelineTemplate`.\n\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"450\" src=\"https://github.com/user-attachments/assets/4ba4d594-e031-4588-bd36-3273611db820\"\u003e   \n\u003c/p\u003e\n\n\u003c/br\u003e\n\n# EcsRootUnity\nУпрощенная реализация Ecs Root для юнити, собирает пайплайн из шаблонов пайплайна. Наследуется от `MonoBehaviour`. Чтобы повесить GameObject: `Add Component \u003e DragonECS \u003e EcsRootUnity`.\n\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"450\" src=\"https://github.com/user-attachments/assets/3ff42747-0366-4db8-8015-9ea254d72feb\"\u003e   \n\u003c/p\u003e\n\n\n\u003c/br\u003e\n\n\n# FixedUpdate LateUpdate \n```c#\nusing DCFApixels.DragonECS;\nusing UnityEngine;\npublic class EcsRoot : MonoBehaviour\n{\n    private EcsPipeline _pipeline;\n    //...\n    private void Update()\n    {\n        // Стандартный Run из фреймворка.\n        _pipeline.Run();\n    }\n    private void FixedUpdate()\n    {\n        // Специальный Run для трансляции FixedUpdate.\n        _pipeline.FixedRun();\n    }\n    private void LateUpdate()\n    {\n        // Специальный Run для трансляции LateUpdate.\n        _pipeline.LateRun();\n    }\n    // ...\n}\n```\n\n\u003c/br\u003e\n\n# Документация проекта\nВ интеграции так же есть окно документации проекта на основе Мета-Атрибутов. Открыть документацию: `Tools \u003e DragonECS \u003e Documentation`. Документация формируется при первом открытии окна и при нажатии кнопки `Update`.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/f5795823-aeae-45df-8e25-db64df837513\"\u003e   \n\u003c/p\u003e\n\n\u003c/br\u003e\n\n# Окно настроек\nВ окне настроек есть несколько опций, включая возможность менять режимы отображения компонентов в инспекторе. Внизу расположены удобные переключатели для используемых в фреймворке define значения для директив процессора. Открыть документацию: `Tools \u003e DragonECS \u003e Settings`.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/c794be8d-6884-4415-b24a-0a1a28f577a6\"\u003e   \n\u003c/p\u003e\n\n\u003c/br\u003e\n\n# Инструмент для восстановления Missing Reference\nРасширение активно задействует `[SerializeReference]`, у которого есть известная проблема с потерей типов при переименовании. Чтобы упростить восстановление потерянных типов имеется специальный инструмент `Reference Repairer`. Он может собирать все ассеты с потерянными типами, после предоставляет окно для указания новых имен потерянны типов. Далее проведет восстановление потерянных типов в собранных ассетах. Открыть окно инструмента: `Tools \u003e DragonECS \u003e Reference Repairer`.\n\u003e Если потерянные типы были с атрибутом `[MetaID(id)]` то инструмент автоматически определит новое имя типа.\n\u003cp align=\"center\"\u003e\n\u003cimg width=\"700\" src=\"https://github.com/user-attachments/assets/ffb2b78a-db43-445d-a371-6358250b8cee\"\u003e   \n\u003c/p\u003e\n\n\u003c/br\u003e\n\n# FAQ\n## Не могу повесить EcsEntityConncet или другие компоненты\nТакое иногда может происходить после обновления пакета, решается либо через `Assets -\u003e Reimport All` или перезапуск окна Unity с удалением папки `*project name*/Library`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcfapixels%2Fdragonecs-unity","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdcfapixels%2Fdragonecs-unity","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcfapixels%2Fdragonecs-unity/lists"}