mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 18:14:37 +08:00
Merge branch 'main' into dev
This commit is contained in:
commit
17bf26c366
63
README-RU.md
63
README-RU.md
@ -5,19 +5,19 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="Version" src="https://img.shields.io/github/package-json/v/DCFApixels/DragonECS?color=%23ff4e85&style=for-the-badge">
|
<img alt="Version" src="https://img.shields.io/github/package-json/v/DCFApixels/DragonECS?color=%23ff4e85&style=for-the-badge">
|
||||||
<img alt="License" src="https://img.shields.io/github/license/DCFApixels/DragonECS?color=ff4e85&style=for-the-badge">
|
<img alt="License" src="https://img.shields.io/github/license/DCFApixels/DragonECS?color=ff4e85&style=for-the-badge">
|
||||||
<a href="https://discord.gg/kqmJjExuCf"><img alt="Discord" src="https://img.shields.io/discord/1111696966208999525?color=%2300b269&label=Discord&logo=Discord&logoColor=%23ffffff&style=for-the-badge"></a>
|
<a href="https://discord.gg/kqmJjExuCf"><img alt="Discord" src="https://img.shields.io/badge/Discord-JOIN-00b269?logo=discord&logoColor=%23ffffff&style=for-the-badge"></a>
|
||||||
<a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=IbDcH43vhfArb30luGMP1TMXB3GCHzxm&authKey=s%2FJfqvv46PswFq68irnGhkLrMR6y9tf%2FUn2mogYizSOGiS%2BmB%2B8Ar9I%2Fnr%2Bs4oS%2B&noverify=0&group_code=949562781"><img alt="QQ" src="https://img.shields.io/badge/QQ-JOIN-00b269?logo=tencentqq&style=for-the-badge"></a>
|
<a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=IbDcH43vhfArb30luGMP1TMXB3GCHzxm&authKey=s%2FJfqvv46PswFq68irnGhkLrMR6y9tf%2FUn2mogYizSOGiS%2BmB%2B8Ar9I%2Fnr%2Bs4oS%2B&noverify=0&group_code=949562781"><img alt="QQ" src="https://img.shields.io/badge/QQ-JOIN-00b269?logo=tencentqq&logoColor=%23ffffff&style=for-the-badge"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
# DragonECS - C# Entity Component System Framework
|
# DragonECS - C# Entity Component System Framework
|
||||||
| Languages: | [Русский](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md) | [English(WIP)](https://github.com/DCFApixels/DragonECS) |
|
| Languages: | [Русский](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md) | [English(WIP)](https://github.com/DCFApixels/DragonECS) |
|
||||||
| :--- | :--- | :--- |
|
| :--- | :--- | :--- |
|
||||||
|
|
||||||
DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system) фреймворк нацеленный на максимальную удобность, модульность, расширяемость и производительность динамического изменения сущностей. Разработан на чистом C#, без зависимостей и генерации кода. Вднохновлен [LeoEcs](https://github.com/Leopotam/ecslite).
|
DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system) фреймворк нацеленный на максимальную удобность, модульность, расширяемость и производительность динамического изменения сущностей. Разработан на чистом C#, без зависимостей и генерации кода. Вдохновлен [LeoEcs](https://github.com/Leopotam/ecslite).
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Проект предрелизной версии, поэтому API может меняться. В ветке main акутальная и рабочая версия. </br>
|
> Проект предрелизной версии, поэтому API может меняться. В ветке main актуальная и рабочая версия.</br>
|
||||||
> Readme еще не завершен, если есть не ястные моменты, вопросы можно задать тут [Обратная связь](#обратная-связь)
|
> Readme еще не завершен, если есть не ясные моменты, вопросы можно задать тут [Обратная связь](#обратная-связь)
|
||||||
|
|
||||||
## Оглавление
|
## Оглавление
|
||||||
- [Установка](#установка)
|
- [Установка](#установка)
|
||||||
@ -42,6 +42,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system)
|
|||||||
- [Мета-Атрибуты](#мета-атрибуты)
|
- [Мета-Атрибуты](#мета-атрибуты)
|
||||||
- [EcsDebug](#ecsdebug)
|
- [EcsDebug](#ecsdebug)
|
||||||
- [Профилирование](#профилирование)
|
- [Профилирование](#профилирование)
|
||||||
|
- [Define Symbols](#define-symbols)
|
||||||
- [Расширение фреймворка](#расширение-фреймворка)
|
- [Расширение фреймворка](#расширение-фреймворка)
|
||||||
- [Компоненты мира](#компоненты-мира)
|
- [Компоненты мира](#компоненты-мира)
|
||||||
- [Конфиги](#конфиги)
|
- [Конфиги](#конфиги)
|
||||||
@ -62,7 +63,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system)
|
|||||||
+ Поддержка NativeAOT
|
+ Поддержка NativeAOT
|
||||||
+ Игровые движки с C#: Unity, Godot, MonoGame и т.д.
|
+ Игровые движки с C#: Unity, Godot, MonoGame и т.д.
|
||||||
|
|
||||||
Протестированно:
|
Протестировано:
|
||||||
+ **Unity:** Минимальная версия 2020.1.0;
|
+ **Unity:** Минимальная версия 2020.1.0;
|
||||||
|
|
||||||
## Установка для Unity
|
## Установка для Unity
|
||||||
@ -72,7 +73,7 @@ DragonECS - это [ECS](https://en.wikipedia.org/wiki/Entity_component_system)
|
|||||||
```
|
```
|
||||||
https://github.com/DCFApixels/DragonECS.git
|
https://github.com/DCFApixels/DragonECS.git
|
||||||
```
|
```
|
||||||
* ### В виде иходников
|
* ### В виде исходников
|
||||||
Фреймворк так же может быть добавлен в проект в виде исходников.
|
Фреймворк так же может быть добавлен в проект в виде исходников.
|
||||||
</br>
|
</br>
|
||||||
|
|
||||||
@ -120,7 +121,7 @@ if (entity.TryGetID(out int entityID)) { }
|
|||||||
|
|
||||||
> **NOTICE:** Сущности не могут существовать без компонентов, пустые сущности будут автоматически удаляться сразу после удаления последнего компонента либо в конце тика.
|
> **NOTICE:** Сущности не могут существовать без компонентов, пустые сущности будут автоматически удаляться сразу после удаления последнего компонента либо в конце тика.
|
||||||
## Component
|
## Component
|
||||||
**Компоненты** - это данные для сущностей. Обязаны реализовывать интерфейс `IEcsComponent` или другой указываюший вид компонента.
|
**Компоненты** - это данные для сущностей. Обязаны реализовывать интерфейс `IEcsComponent` или другой указывающий вид компонента.
|
||||||
```c#
|
```c#
|
||||||
struct Health : IEcsComponent
|
struct Health : IEcsComponent
|
||||||
{
|
{
|
||||||
@ -157,7 +158,7 @@ class SomeSystem : IEcsPreInit, IEcsInit, IEcsRun, IEcsDestroy
|
|||||||
|
|
||||||
# Концепции фреймворка
|
# Концепции фреймворка
|
||||||
## Пайплайн
|
## Пайплайн
|
||||||
Контейнер и движок систем. Отвечает за настройку поочередности вызова систем, предоставляет механизм для сообщений между системами и механизм внедрения зависимостей. Реализован в виде класса `EcsPipeline`.
|
Контейнер и движок систем. Отвечает за настройку очереди вызова систем, предоставляет механизм для сообщений между системами и механизм внедрения зависимостей. Реализован в виде класса `EcsPipeline`.
|
||||||
### Построение
|
### Построение
|
||||||
За построение пайплайна отвечает Builder. В Builder добавляются системы, а в конце строится пайплайн. Пример:
|
За построение пайплайна отвечает Builder. В Builder добавляются системы, а в конце строится пайплайн. Пример:
|
||||||
```c#
|
```c#
|
||||||
@ -216,6 +217,7 @@ class SomeSystem : IEcsInject<SomeDataA>, IEcsRun
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Модули
|
### Модули
|
||||||
Группы систем реализующие общую фичу можно объединять в модули, и просто добавлять модули в Pipeline.
|
Группы систем реализующие общую фичу можно объединять в модули, и просто добавлять модули в Pipeline.
|
||||||
``` c#
|
``` c#
|
||||||
@ -237,6 +239,7 @@ EcsPipelone pipeline = EcsPipeline.New()
|
|||||||
//...
|
//...
|
||||||
.BuildAndInit();
|
.BuildAndInit();
|
||||||
```
|
```
|
||||||
|
|
||||||
### Слои
|
### Слои
|
||||||
Очередь систем можно разбить на слои. Слой определяет место в очереди для вставки систем. Если необходимо чтобы какая-то система была вставлена в конце очереди, вне зависимости от места добавления, эту систему можно добавить в слой EcsConsts.END_LAYER.
|
Очередь систем можно разбить на слои. Слой определяет место в очереди для вставки систем. Если необходимо чтобы какая-то система была вставлена в конце очереди, вне зависимости от места добавления, эту систему можно добавить в слой EcsConsts.END_LAYER.
|
||||||
``` c#
|
``` c#
|
||||||
@ -251,17 +254,17 @@ EcsPipelone pipeline = EcsPipeline.New()
|
|||||||
Встроенные слои расположены в следующем порядке:
|
Встроенные слои расположены в следующем порядке:
|
||||||
* `EcsConst.PRE_BEGIN_LAYER`
|
* `EcsConst.PRE_BEGIN_LAYER`
|
||||||
* `EcsConst.BEGIN_LAYER`
|
* `EcsConst.BEGIN_LAYER`
|
||||||
* `EcsConst.BASIC_LAYER` (Если при добавблении системы не указать слой, то она будет доавблена сюда)
|
* `EcsConst.BASIC_LAYER` (Если при добавлении системы не указать слой, то она будет добавлена сюда)
|
||||||
* `EcsConst.END_LAYER`
|
* `EcsConst.END_LAYER`
|
||||||
* `EcsConst.POST_END_LAYER`
|
* `EcsConst.POST_END_LAYER`
|
||||||
|
|
||||||
## Процессы
|
## Процессы
|
||||||
Процессы - это очереди систем реализующие общий интерфейс, например `IEcsRun`. Для запуска процессов используются Runner-ы. Втроенные процессы запускаются автоматически. Есть возможность реализации пользовательских процессов.
|
Процессы - это очереди систем реализующие общий интерфейс, например `IEcsRun`. Для запуска процессов используются Runner-ы. Встроенные процессы запускаются автоматически. Есть возможность реализации пользовательских процессов.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Встроенные процессы</summary>
|
<summary>Встроенные процессы</summary>
|
||||||
|
|
||||||
* `IEcsPreInit`, `IEcsInit`, `IEcsRun`, `IEcsDestroy` - процессы жизненого цикла `EcsPipeline`.
|
* `IEcsPreInit`, `IEcsInit`, `IEcsRun`, `IEcsDestroy` - процессы жизненного цикла `EcsPipeline`.
|
||||||
* `IEcsInject<T>` - Процессы системы [внедрения зависимостей](#Внедрение-зависимостей).
|
* `IEcsInject<T>` - Процессы системы [внедрения зависимостей](#Внедрение-зависимостей).
|
||||||
* `IOnInitInjectionComplete` - Так же процесс системы [внедрения зависимостей](#Внедрение-зависимостей), но сигнализирует о завершении инициализирующей инъекции.
|
* `IOnInitInjectionComplete` - Так же процесс системы [внедрения зависимостей](#Внедрение-зависимостей), но сигнализирует о завершении инициализирующей инъекции.
|
||||||
|
|
||||||
@ -303,7 +306,7 @@ _pipeline.GetRunnerInstance<DoSomethingProcessRunner>.Do()
|
|||||||
> Раннеры имеют ряд требований к реализации:
|
> Раннеры имеют ряд требований к реализации:
|
||||||
> * Наследоваться от `EcsRunner<T>` можно только напрямую;
|
> * Наследоваться от `EcsRunner<T>` можно только напрямую;
|
||||||
> * Раннер может содержать только один интерфейс(за исключением `IEcsProcess`);
|
> * Раннер может содержать только один интерфейс(за исключением `IEcsProcess`);
|
||||||
> * Наследуемый класс `EcsRunner<T>,` далжен так же реализовавыть интерфейс `T`;
|
> * Наследуемый класс `EcsRunner<T>,` должен так же реализовать интерфейс `T`;
|
||||||
|
|
||||||
> Не рекомендуется в цикле вызывать `GetRunner`, иначе кешируйте полученный раннер.
|
> Не рекомендуется в цикле вызывать `GetRunner`, иначе кешируйте полученный раннер.
|
||||||
</details>
|
</details>
|
||||||
@ -379,7 +382,7 @@ class Aspect : EcsAspect
|
|||||||
public EcsTagPool<FreezedTag> freezedTags = Exc;
|
public EcsTagPool<FreezedTag> freezedTags = Exc;
|
||||||
|
|
||||||
// При запросах будет проверяться наличие компонентов
|
// При запросах будет проверяться наличие компонентов
|
||||||
// из включающего ограничения маски и отсутсвие из исключющего.
|
// из включающего ограничения маски и отсутствие из исключающего.
|
||||||
// Так же есть Opt - только кеширует пул, не влияя на маску.
|
// Так же есть Opt - только кеширует пул, не влияя на маску.
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -539,7 +542,7 @@ EcsGroup newGroup = EcsGroup.Inverse(groupA);
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Корень ECS
|
## Корень ECS
|
||||||
Это пользовательский класс который явялестя точкой входа для ECS. Основное назначение инициализация, запуск систем на каждый Update движка и очистка по окончанию сипользования.
|
Это пользовательский класс который является точкой входа для ECS. Основное назначение инициализация, запуск систем на каждый Update движка и очистка по окончанию использования.
|
||||||
### Пример для Unity
|
### Пример для Unity
|
||||||
``` c#
|
``` c#
|
||||||
using DCFApixels.DragonECS;
|
using DCFApixels.DragonECS;
|
||||||
@ -566,7 +569,7 @@ public class EcsRoot : MonoBehaviour
|
|||||||
|
|
||||||
// Завершение построения пайплайна.
|
// Завершение построения пайплайна.
|
||||||
.Build();
|
.Build();
|
||||||
//Иницивлизация пайплайна и запуск IEcsPreInit.PreInit
|
//Инициализация пайплайна и запуск IEcsPreInit.PreInit
|
||||||
//и IEcsInit.Init у всех добавленных систем
|
//и IEcsInit.Init у всех добавленных систем
|
||||||
_pipeline.Init();
|
_pipeline.Init();
|
||||||
}
|
}
|
||||||
@ -612,7 +615,7 @@ public class EcsRoot
|
|||||||
|
|
||||||
// Завершение построения пайплайна.
|
// Завершение построения пайплайна.
|
||||||
.Build();
|
.Build();
|
||||||
// Иницивлизация пайплайна и запуск IEcsPreInit.PreInit
|
// Инициализация пайплайна и запуск IEcsPreInit.PreInit
|
||||||
// и IEcsInit.Init у всех добавленных систем.
|
// и IEcsInit.Init у всех добавленных систем.
|
||||||
_pipeline.Init();
|
_pipeline.Init();
|
||||||
}
|
}
|
||||||
@ -722,8 +725,19 @@ using (marker.Auto())
|
|||||||
|
|
||||||
</br>
|
</br>
|
||||||
|
|
||||||
|
# Define Symbols
|
||||||
|
+ `DISABLE_POOLS_EVENTS` - выключает реактивное поведение в пулах.
|
||||||
|
+ `ENABLE_DRAGONECS_DEBUGGER` - включает работу EcsDebug в релизном билде.
|
||||||
|
+ `ENABLE_DRAGONECS_ASSERT_CHECKS` - включает опускаемые в релизном билде проверки.
|
||||||
|
+ `REFLECTION_DISABLED` - Полностью ограничивает работу фреймворка с Reflection.
|
||||||
|
+ `DISABLE_DEBUG` - Для среды где не поддерживается ручное отключение DEBUG, например Unity.
|
||||||
|
+ `ENABLE_DUMMY_SPAN` - На случай если в среде не поддерживаются Span типы, включает его замену.
|
||||||
|
+ `DISABLE_CATH_EXCEPTIONS` - Выключает поведение по умолчанию по обработке исключений. По умолчанию фреймворк будет ловить исключения с выводом информации из исключений через EcsDebug и продолжать работу.
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
# Расширение фреймворка
|
# Расширение фреймворка
|
||||||
Для большей расширемости фреймворкеа есть дополнительные инструменты.
|
Для большей расширяемости фреймворка есть дополнительные инструменты.
|
||||||
|
|
||||||
## Конфиги
|
## Конфиги
|
||||||
Конструкторы классов `EcsWorld` и `EcsPipeline` могут принимать контейнеры конфигов реализующие интерфейс `IConfigContainer` или `IConfigContainerWriter`. С помощью этих контейнеров можно передавать данные и зависимости. Встроенная реализация контейнера - `ConfigContainer`, но можно так же использовать свою реализацию.</br>
|
Конструкторы классов `EcsWorld` и `EcsPipeline` могут принимать контейнеры конфигов реализующие интерфейс `IConfigContainer` или `IConfigContainerWriter`. С помощью этих контейнеров можно передавать данные и зависимости. Встроенная реализация контейнера - `ConfigContainer`, но можно так же использовать свою реализацию.</br>
|
||||||
@ -826,9 +840,10 @@ public struct WorldComponent : IEcsWorldComponent<WorldComponent>
|
|||||||
# Расширения
|
# Расширения
|
||||||
* [Интеграция с движком Unity](https://github.com/DCFApixels/DragonECS-Unity)
|
* [Интеграция с движком Unity](https://github.com/DCFApixels/DragonECS-Unity)
|
||||||
* [Автоматическое внедрение зависимостей](https://github.com/DCFApixels/DragonECS-AutoInjections)
|
* [Автоматическое внедрение зависимостей](https://github.com/DCFApixels/DragonECS-AutoInjections)
|
||||||
* [Классическоя C# многопоточность](https://github.com/DCFApixels/DragonECS-ClassicThreads)
|
* [Классическая C# многопоточность](https://github.com/DCFApixels/DragonECS-ClassicThreads)
|
||||||
* [Hybrid](https://github.com/DCFApixels/DragonECS-Hybrid)
|
* [Hybrid](https://github.com/DCFApixels/DragonECS-Hybrid)
|
||||||
* [One-Frame Components](https://gist.github.com/DCFApixels/46d512dbcf96c115b94c3af502461f60)
|
* [One-Frame Components](https://gist.github.com/DCFApixels/46d512dbcf96c115b94c3af502461f60)
|
||||||
|
* [Шаблоны кода IDE](https://gist.github.com/ctzcs/0ba948b0e53aa41fe1c87796a401660b) и [для Unity](https://gist.github.com/ctzcs/d4c7730cf6cd984fe6f9e0e3f108a0f1)
|
||||||
* Графы (Work in progress)
|
* Графы (Work in progress)
|
||||||
<!--* Твое расширение? Если разрабатываешь свои расширения для DragonECS, дай знать и они будут добавлены сюда-->
|
<!--* Твое расширение? Если разрабатываешь свои расширения для DragonECS, дай знать и они будут добавлены сюда-->
|
||||||
|
|
||||||
@ -836,17 +851,17 @@ public struct WorldComponent : IEcsWorldComponent<WorldComponent>
|
|||||||
|
|
||||||
# FAQ
|
# FAQ
|
||||||
## 'ReadOnlySpan<>' could not be found
|
## 'ReadOnlySpan<>' could not be found
|
||||||
В версии юнити 2020.1.х в консоли может выпадать ошибка:
|
В версии Unity 2020.1.х в консоли может выпадать ошибка:
|
||||||
```
|
```
|
||||||
The type or namespace name 'ReadOnlySpan<>' could not be found (are you missing a using directive or an assembly reference?)
|
The type or namespace name 'ReadOnlySpan<>' could not be found (are you missing a using directive or an assembly reference?)
|
||||||
```
|
```
|
||||||
Чтобы починить добавте директиву `ENABLE_DUMMY_SPAN` в `Project Settings/Player/Other Settings/Scripting Define Symbols`.
|
Чтобы починить добавьте директиву `ENABLE_DUMMY_SPAN` в `Project Settings/Player/Other Settings/Scripting Define Symbols`.
|
||||||
|
|
||||||
## Как Выключать/Включать системы?
|
## Как Выключать/Включать системы?
|
||||||
Напряму - никак. </br>
|
Напрямую - никак. </br>
|
||||||
Обычно потребность выключить/включить систему появляется когда поменялось общее состояние игры, это может так же значить что нужно переключить сразу группу систем, все это в совокупности можно рассматривать как измннеия процессов. Есть 2 решения:</br>
|
Обычно потребность выключить/включить систему появляется когда поменялось общее состояние игры, это может так же значить что нужно переключить сразу группу систем, все это в совокупности можно рассматривать как измннеия процессов. Есть 2 решения:</br>
|
||||||
+ Если измненеия процесса глобальные, то создать новый `EcsPipeline` и в цикле обновления движка запускать соотвествующий пайплайн.
|
+ Если изменения процесса глобальные, то создать новый `EcsPipeline` и в цикле обновления движка запускать соответствующий пайплайн.
|
||||||
+ Разделить `IEcsRun` на несколько процессов и в цикле обновления движка запускать соотвествующий процесс. Для этого создайте новый интерфейс процесса, раннер для запуска этого интерфейса и получайте раннер через `EcsPipeline.GetRunner<T>()`.
|
+ Разделить `IEcsRun` на несколько процессов и в цикле обновления движка запускать соответствующий процесс. Для этого создайте новый интерфейс процесса, раннер для запуска этого интерфейса и получайте раннер через `EcsPipeline.GetRunner<T>()`.
|
||||||
## Перечень рекомендаций [DragonECS-Vault](https://github.com/DCFApixels/DragonECS-Vault)
|
## Перечень рекомендаций [DragonECS-Vault](https://github.com/DCFApixels/DragonECS-Vault)
|
||||||
</br>
|
</br>
|
||||||
|
|
||||||
|
@ -2,11 +2,13 @@
|
|||||||
<img width="660" src="https://github.com/DCFApixels/DragonECS/assets/99481254/c09e385e-08c1-4c04-904a-36ad7e25e45b">
|
<img width="660" src="https://github.com/DCFApixels/DragonECS/assets/99481254/c09e385e-08c1-4c04-904a-36ad7e25e45b">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<!--<a href="https://discord.gg/kqmJjExuCf"><img alt="Discord" src="https://img.shields.io/discord/1111696966208999525?color=%2300b269&label=Discord&logo=Discord&logoColor=%23ffffff&style=for-the-badge"></a>-->
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="Version" src="https://img.shields.io/github/package-json/v/DCFApixels/DragonECS?color=%23ff4e85&style=for-the-badge">
|
<img alt="Version" src="https://img.shields.io/github/package-json/v/DCFApixels/DragonECS?color=%23ff4e85&style=for-the-badge">
|
||||||
<img alt="License" src="https://img.shields.io/github/license/DCFApixels/DragonECS?color=ff4e85&style=for-the-badge">
|
<img alt="License" src="https://img.shields.io/github/license/DCFApixels/DragonECS?color=ff4e85&style=for-the-badge">
|
||||||
<a href="https://discord.gg/kqmJjExuCf"><img alt="Discord" src="https://img.shields.io/discord/1111696966208999525?color=%2300b269&label=Discord&logo=Discord&logoColor=%23ffffff&style=for-the-badge"></a>
|
<a href="https://discord.gg/kqmJjExuCf"><img alt="Discord" src="https://img.shields.io/badge/Discord-JOIN-00b269?logo=discord&logoColor=%23ffffff&style=for-the-badge"></a>
|
||||||
<a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=IbDcH43vhfArb30luGMP1TMXB3GCHzxm&authKey=s%2FJfqvv46PswFq68irnGhkLrMR6y9tf%2FUn2mogYizSOGiS%2BmB%2B8Ar9I%2Fnr%2Bs4oS%2B&noverify=0&group_code=949562781"><img alt="QQ" src="https://img.shields.io/badge/QQ-JOIN-00b269?logo=tencentqq&style=for-the-badge"></a>
|
<a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=IbDcH43vhfArb30luGMP1TMXB3GCHzxm&authKey=s%2FJfqvv46PswFq68irnGhkLrMR6y9tf%2FUn2mogYizSOGiS%2BmB%2B8Ar9I%2Fnr%2Bs4oS%2B&noverify=0&group_code=949562781"><img alt="QQ" src="https://img.shields.io/badge/QQ-JOIN-00b269?logo=tencentqq&logoColor=%23ffffff&style=for-the-badge"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
# DragonECS - C# Entity Component System Framework
|
# DragonECS - C# Entity Component System Framework
|
||||||
@ -57,6 +59,7 @@ The framework can also be added to the project as source code.
|
|||||||
* [Classic C# multithreading](https://github.com/DCFApixels/DragonECS-ClassicThreads)
|
* [Classic C# multithreading](https://github.com/DCFApixels/DragonECS-ClassicThreads)
|
||||||
* [Hybrid](https://github.com/DCFApixels/DragonECS-Hybrid)
|
* [Hybrid](https://github.com/DCFApixels/DragonECS-Hybrid)
|
||||||
* [One-Frame Components](https://gist.github.com/DCFApixels/46d512dbcf96c115b94c3af502461f60)
|
* [One-Frame Components](https://gist.github.com/DCFApixels/46d512dbcf96c115b94c3af502461f60)
|
||||||
|
* [Code Templates for IDE](https://gist.github.com/ctzcs/0ba948b0e53aa41fe1c87796a401660b) and [for Unity](https://gist.github.com/ctzcs/d4c7730cf6cd984fe6f9e0e3f108a0f1)
|
||||||
* Graphs (Work in progress)
|
* Graphs (Work in progress)
|
||||||
|
|
||||||
# Feedback
|
# Feedback
|
||||||
|
Loading…
Reference in New Issue
Block a user