mirror of
https://github.com/DCFApixels/DragonECS-Unity.git
synced 2025-09-18 18:14:35 +08:00
Merge branch 'main' into dev
This commit is contained in:
commit
c0c06153a1
121
README-RU.md
121
README-RU.md
@ -5,20 +5,41 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="Version" src="https://img.shields.io/github/package-json/v/DCFApixels/DragonECS-Unity?color=%23ff4e85&style=for-the-badge">
|
<img alt="Version" src="https://img.shields.io/github/package-json/v/DCFApixels/DragonECS-Unity?color=%23ff4e85&style=for-the-badge">
|
||||||
<img alt="GitHub" src="https://img.shields.io/github/license/DCFApixels/DragonECS-Unity?color=ff4e85&style=for-the-badge">
|
<img alt="GitHub" src="https://img.shields.io/github/license/DCFApixels/DragonECS-Unity?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>
|
||||||
|
|
||||||
# Интеграция с Unity для [DragonECS](https://github.com/DCFApixels/DragonECS)
|
# Интеграция с Unity для [DragonECS](https://github.com/DCFApixels/DragonECS)
|
||||||
|
|
||||||
| Languages: | [Русский](https://github.com/DCFApixels/DragonECS-Unity/blob/main/README-RU.md) | [English(WIP)](https://github.com/DCFApixels/DragonECS-Unity) |
|
<table>
|
||||||
| :--- | :--- | :--- |
|
<tr></tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">Readme Languages:</td>
|
||||||
|
</tr>
|
||||||
|
<tr></tr>
|
||||||
|
<tr>
|
||||||
|
<td nowrap width="100">
|
||||||
|
<a href="https://github.com/DCFApixels/DragonECS-Unity/blob/main/README-RU.md">
|
||||||
|
<img src="https://github.com/user-attachments/assets/3c699094-f8e6-471d-a7c1-6d2e9530e721"></br>
|
||||||
|
<span>Русский</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td nowrap width="100">
|
||||||
|
<a href="https://github.com/DCFApixels/DragonECS-Unity">
|
||||||
|
<img src="https://github.com/user-attachments/assets/30528cb5-f38e-49f0-b23e-d001844ae930"></br>
|
||||||
|
<span>English(WIP)</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
Расширение добавит набор инструментов для дебага и связи с движком Unity.
|
</br>
|
||||||
|
|
||||||
|
Расширение добавит набор инструментов для отладки и связи с движком Unity.
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Проект в стадии разработки. API может меняться.
|
> Проект в стадии разработки. API может меняться.
|
||||||
> Readme еще не завершен
|
> 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)
|
||||||
|
|
||||||
# Оглавление
|
# Оглавление
|
||||||
- [Установка](#установка)
|
- [Установка](#установка)
|
||||||
@ -30,6 +51,8 @@
|
|||||||
- [Связь с GameObject](#связь-с-gameobject)
|
- [Связь с GameObject](#связь-с-gameobject)
|
||||||
- [World Provider](#world-provider)
|
- [World Provider](#world-provider)
|
||||||
- [FixedUpdate LateUpdate ](#fixedupdate-lateupdate)
|
- [FixedUpdate LateUpdate ](#fixedupdate-lateupdate)
|
||||||
|
- [Документация проекта](#документация-проекта)
|
||||||
|
- [Окно настроек](#окно-настроек)
|
||||||
- [FAQ](#faq)
|
- [FAQ](#faq)
|
||||||
|
|
||||||
</br>
|
</br>
|
||||||
@ -39,10 +62,10 @@
|
|||||||
## Окружение
|
## Окружение
|
||||||
Обязательные требования:
|
Обязательные требования:
|
||||||
+ Зависимость: [DragonECS](https://github.com/DCFApixels/DragonECS)
|
+ Зависимость: [DragonECS](https://github.com/DCFApixels/DragonECS)
|
||||||
+ Минимальная версия C# 7.3;
|
+ Минимальная версия C# 8.0;
|
||||||
+ Минимальная версия Unity 2021.2.0;
|
+ Минимальная версия Unity 2021.2.0;
|
||||||
|
|
||||||
Протестированно:
|
Протестировано:
|
||||||
+ **Unity:** Минимальная версия 2021.2.0;
|
+ **Unity:** Минимальная версия 2021.2.0;
|
||||||
|
|
||||||
## Установка для Unity
|
## Установка для Unity
|
||||||
@ -51,7 +74,7 @@
|
|||||||
```
|
```
|
||||||
https://github.com/DCFApixels/DragonECS-Unity.git
|
https://github.com/DCFApixels/DragonECS-Unity.git
|
||||||
```
|
```
|
||||||
* ### В виде иходников
|
* ### В виде исходников
|
||||||
Фреймворк так же может быть добавлен в проект в виде исходников.
|
Фреймворк так же может быть добавлен в проект в виде исходников.
|
||||||
|
|
||||||
</br>
|
</br>
|
||||||
@ -71,17 +94,17 @@ _pipeline = EcsPipeline.New()
|
|||||||
.BuildAndInit();
|
.BuildAndInit();
|
||||||
```
|
```
|
||||||
## Debug Сервис
|
## Debug Сервис
|
||||||
`UnityDebugService`- реализация [Debug-сервиса для `EcsDebug`](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md#ecsdebug). В редакторе по умолчанию автоматически инициализируется и связывает `EcsDebug.Print` с консолью юнити, `EcsProfilerMarker` c профайлером и т.д.
|
`UnityDebugService`- реализация [Debug-сервиса для `EcsDebug`](https://github.com/DCFApixels/DragonECS/blob/main/README-RU.md#ecsdebug). В редакторе по умолчанию автоматически инициализируется и связывает `EcsDebug.Print` с консолью Unity, `EcsProfilerMarker` c профайлером и т.д.
|
||||||
```c#
|
```c#
|
||||||
//Ручная активация.
|
//Ручная активация.
|
||||||
UnityDebugService.Activate();
|
UnityDebugService.Activate();
|
||||||
|
|
||||||
//Выведет сообщение в консоле Unity.
|
//Выведет сообщение в консоли Unity.
|
||||||
EcsDebug.Print();
|
EcsDebug.Print();
|
||||||
|
|
||||||
var someMarker = new EcsProfilerMarker("SomeMarker");
|
var someMarker = new EcsProfilerMarker("SomeMarker");
|
||||||
someMarker.Begin();
|
someMarker.Begin();
|
||||||
//время выполнения этого участка будет отражено в профайлере юнити.
|
//время выполнения этого участка будет отражено в профайлере Unity.
|
||||||
someMarker.End();
|
someMarker.End();
|
||||||
|
|
||||||
//Остановка игрового режима.
|
//Остановка игрового режима.
|
||||||
@ -106,7 +129,7 @@ EcsDebug.Break();
|
|||||||
-----
|
-----
|
||||||
|
|
||||||
* ### `PipelineProcessMonitor`
|
* ### `PipelineProcessMonitor`
|
||||||
Отображает в виде матрицы процессы и сситемы. Системы отображабтся в порядке их выполнения. Точка в пересечении системы и процесса означает что эта система является частью этого процесса.
|
Отображает в виде матрицы процессы и системы. Системы отображаются в порядке их выполнения. Точка в пересечении системы и процесса означает что эта система является частью этого процесса.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/c1a7960a-d65a-4f22-9597-fd863ff2b00c">
|
<img src="https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/c1a7960a-d65a-4f22-9597-fd863ff2b00c">
|
||||||
@ -124,7 +147,7 @@ EcsDebug.Break();
|
|||||||
-----
|
-----
|
||||||
|
|
||||||
* ### `EntityMonitor`
|
* ### `EntityMonitor`
|
||||||
Показывает состояние сущности мира. На кажду сущность в мире создается отдельынй монитор. Все мониторы сущностей помещаются в монитор мира.
|
Показывает состояние сущности мира. На каждую сущность в мире создается отдельный монитор. Все мониторы сущностей помещаются в монитор мира.
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/509ff472-05b5-4fd8-a0e6-739d7fa81ab1">
|
<img src="https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/509ff472-05b5-4fd8-a0e6-739d7fa81ab1">
|
||||||
@ -135,25 +158,25 @@ EcsDebug.Break();
|
|||||||
</br>
|
</br>
|
||||||
|
|
||||||
# Шаблоны
|
# Шаблоны
|
||||||
Шаблоны - это настраиваемые наборы компонентов которые можно применить к сущностям. Шаблоны должны реализовавыть интерфейс `ITemplateNode`.
|
Шаблоны - это настраиваемые наборы компонентов которые можно применить к сущностям. Шаблоны должны реализовывать интерфейс `ITemplateNode`.
|
||||||
```c#
|
```c#
|
||||||
ITemplateNode someSamplate = /*...*/;
|
ITemplateNode someTemplate = /*...*/;
|
||||||
//...
|
//...
|
||||||
foreach (var e in _world.Where(out Aspect a))
|
foreach (var e in _world.Where(out Aspect a))
|
||||||
{
|
{
|
||||||
// Применение шаблона сущности.
|
// Применение шаблона сущности.
|
||||||
someSamplate.Apply(e, _world.id);
|
someTemplate.Apply(e, _world.id);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
```c#
|
```c#
|
||||||
// Применение шаблона сразу при создании сущности.
|
// Применение шаблона сразу при создании сущности.
|
||||||
int e = _world.NewEntity(someSamplate);
|
int e = _world.NewEntity(someTemplate);
|
||||||
```
|
```
|
||||||
По умолчанию расширение содержит 2 вида шаблонов: `ScriptableEntityTemplate`, `MonoEntityTemplate`.
|
По умолчанию расширение содержит 2 вида шаблонов: `ScriptableEntityTemplate`, `MonoEntityTemplate`.
|
||||||
|
|
||||||
## ScriptableEntityTemplate
|
## ScriptableEntityTemplate
|
||||||
Хранится как отдельынй ассет. Наследуется от `ScriptableObject`.
|
Хранится как отдельный ассет. Наследуется от `ScriptableObject`.
|
||||||
Дейсвия чтобы создать `ScriptableEntityTemplate` ассет:
|
Действия чтобы создать `ScriptableEntityTemplate` ассет:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Создать ассет: Asset > Create > DragonECS > ScriptableEntityTemplate.</summary>
|
<summary>Создать ассет: Asset > Create > DragonECS > ScriptableEntityTemplate.</summary>
|
||||||
@ -173,7 +196,7 @@ int e = _world.NewEntity(someSamplate);
|
|||||||
-----
|
-----
|
||||||
|
|
||||||
## MonoEntityTemplate
|
## MonoEntityTemplate
|
||||||
Крепится к GameObject. Наследуется от `MonoBehaviour`.
|
Крепится к `GameObject`. Наследуется от `MonoBehaviour`.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Повесить компонент: Add Component > DragonECS > MonoEntityTemplate.</summary>
|
<summary>Повесить компонент: Add Component > DragonECS > MonoEntityTemplate.</summary>
|
||||||
@ -193,20 +216,22 @@ int e = _world.NewEntity(someSamplate);
|
|||||||
-----
|
-----
|
||||||
|
|
||||||
## Шаблон компонента
|
## Шаблон компонента
|
||||||
|
|
||||||
|
### Реализация
|
||||||
Чтобы компонент попал в меню `Add Component` нужно реализовать шаблон компонента. Шаблоны компонента это типы реализующие `IComponentTemplate`.
|
Чтобы компонент попал в меню `Add Component` нужно реализовать шаблон компонента. Шаблоны компонента это типы реализующие `IComponentTemplate`.
|
||||||
|
|
||||||
* Упрощенная реализация:
|
* Упрощенная реализация:
|
||||||
```c#
|
```c#
|
||||||
// Обязательно добавить [Serializable] к ттипу компонента
|
// Обязательно добавить [Serializable] к типу компонента.
|
||||||
[Serializable]
|
[Serializable]
|
||||||
struct SomeComponent : IEcsComponent { /*...*/ }
|
struct SomeComponent : IEcsComponent { /* ... */ }
|
||||||
class SomeComponentTemplate : ComponentTemplate<SomeComponent> { }
|
class SomeComponentTemplate : ComponentTemplate<SomeComponent> { }
|
||||||
```
|
```
|
||||||
|
|
||||||
* Упрощенная реализация для компонентов-тегов:
|
|
||||||
```c#
|
```c#
|
||||||
|
// Тоже самое но для компонентов-тегов.
|
||||||
[Serializable]
|
[Serializable]
|
||||||
struct SomeTagComponent : IEcsTagComponent { /*...*/ }
|
struct SomeTagComponent : IEcsTagComponent { }
|
||||||
class SomeTagComponentTemplate : TagComponentTemplate<SomeComponent> { }
|
class SomeTagComponentTemplate : TagComponentTemplate<SomeComponent> { }
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -215,7 +240,7 @@ class SomeTagComponentTemplate : TagComponentTemplate<SomeComponent> { }
|
|||||||
|
|
||||||
```c#
|
```c#
|
||||||
[Serializable]
|
[Serializable]
|
||||||
struct SomeComponent : IEcsComponent { /*...*/ }
|
struct SomeComponent : IEcsComponent { /* ... */ }
|
||||||
class SomeComponentTemplate : IComponentTemplate
|
class SomeComponentTemplate : IComponentTemplate
|
||||||
{
|
{
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
@ -233,18 +258,24 @@ class SomeComponentTemplate : IComponentTemplate
|
|||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
</br>
|
||||||
|
|
||||||
В раскрывающемся при нажатии `Add Component` меню выбора компонента поддердивается иерархическое группирование. Производится группирование на основе мета-атрибута `[MetaGroup]`.
|
|
||||||
|
|
||||||
Компоненты в инспектрре по умолчанию отображаются окрашенными в случайный цвет сгенерированный на основе имени компонента, выбрать другой режим окраски можно в настройках фреймворка. Задать конкретный цвет можно при помощи мета-атрибута `[MetaColor]`.
|
### Кастомизирование отображения
|
||||||
|
В раскрывающемся при нажатии `Add Component` меню выбора компонента поддерживается иерархическое группирование. Производится группирование на основе мета-атрибута `[MetaGroup]`.
|
||||||
|
|
||||||
Если у компонента есть мета-атрибут `[MetaDescription]`, то рядом с крестиком удаления компонента будет иконка подсказки, при наведении курсора отобразится в виде подсказки информация из `[MetaDescription]`.
|
Компоненты в инспекторе по умолчанию отображаются окрашенными в случайный цвет сгенерированный на основе имени компонента, выбрать другой режим окраски можно в [окне настроек](#окно-настроек) фреймворка. Задать конкретный цвет можно при помощи мета-атрибута `[MetaColor]`.
|
||||||
|
|
||||||
|
Если редактор смог автоматически определить связанный с компонентом скрипт, то слева от крестика удаления компонента будет иконка файла. Клик по иконке выделит файл скрипта в папке проекта, двойной клик откроет скрип для редактирования. Связанный файл ищется по сопоставлению имени типа и имени файла скрипта.
|
||||||
|
|
||||||
|
Если у компонента есть мета-атрибут `[MetaDescription]`, то слева от крестика удаления компонента будет иконка подсказки, при наведении курсора покажется информация из `[MetaDescription]`.
|
||||||
|
|
||||||
</br>
|
</br>
|
||||||
|
|
||||||
При необходимости создания кастомного шаблона, шаблоны компонентов поддерживают отображение вне стандартных `MonoEntityTemplate` и `ScriptableEntityTemplate`.
|
### Применение шаблонов компонентов вне стандартных шаблонов сущностей
|
||||||
|
При необходимости создания пользовательского шаблона, шаблоны компонентов поддерживают отображение вне стандартных `MonoEntityTemplate` и `ScriptableEntityTemplate`.
|
||||||
```c#
|
```c#
|
||||||
// ComponentTemplateReference добавляет кнопку выбора доступной реализации IComponentTempalte
|
// ComponentTemplateReference добавляет кнопку выбора доступной реализации IComponentTemplate
|
||||||
// и отображает шаблон компонента аналогично компонентам в MonoEntityTemplate или ScriptableEntityTemplate.
|
// и отображает шаблон компонента аналогично компонентам в MonoEntityTemplate или ScriptableEntityTemplate.
|
||||||
[SerializeReference, ComponentTemplateReference]
|
[SerializeReference, ComponentTemplateReference]
|
||||||
private IComponentTempalte _someComponent1;
|
private IComponentTempalte _someComponent1;
|
||||||
@ -266,11 +297,11 @@ EcsEntityConnect connect = /*...*/;
|
|||||||
entlong entity = _world.NewEntityLong();
|
entlong entity = _world.NewEntityLong();
|
||||||
|
|
||||||
// Связывание сущности с GameObject.
|
// Связывание сущности с GameObject.
|
||||||
// Автоматически добавляется GameObjectConnect в сущность.
|
// Автоматически добавляется GameObjectConnect в сущность
|
||||||
// Автоматическки применяются шаблоны.
|
// и применяются шаблоны.
|
||||||
connect.ConnectWith(entity);
|
connect.ConnectWith(entity);
|
||||||
|
|
||||||
// Или создать без применения шаблнов.
|
// Или создать без применения шаблонов.
|
||||||
connect.ConnectWith(entity, false);
|
connect.ConnectWith(entity, false);
|
||||||
|
|
||||||
// Отвязать.
|
// Отвязать.
|
||||||
@ -296,7 +327,7 @@ connect.Disconnect();
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
`AutoEntityCreator` автоматический создает сущность и связывает с GameObject. В инспекторе ему нужно указать `EcsEntityConnect` с которым связывать сущность и [Провайдер мира](#world-provider) в котормо создать сущность.
|
`AutoEntityCreator` автоматический создает сущность и связывает с GameObject. В инспекторе ему нужно указать `EcsEntityConnect` с которым связывать сущность и [Провайдер мира](#world-provider) в котором создать сущность.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Повесить компонент: Add Component > DragonECS > AutoEntityCreator.</summary>
|
<summary>Повесить компонент: Add Component > DragonECS > AutoEntityCreator.</summary>
|
||||||
@ -409,6 +440,24 @@ public class EcsRoot : MonoBehaviour
|
|||||||
|
|
||||||
</br>
|
</br>
|
||||||
|
|
||||||
|
# Документация проекта
|
||||||
|
В интеграции так же есть окно документации проекта на основе Мета-Атрибутов. Открыть документацию: `Tools > DragonECS > Documentation`. Документация формируется при первом открытии окна и при нажатии кнопки `Update`.
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/f5795823-aeae-45df-8e25-db64df837513">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
# Окно настроек
|
||||||
|
В окне настроек есть несколько опций, включая возможность менять режимы отображения компонентов в инспекторе. Внизу расположены удобные переключатели для используемых в фреймворке define значения для директив процессора. Открыть документацию: `Tools > DragonECS > Settings`.
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://github.com/DCFApixels/DragonECS-Unity/assets/99481254/c794be8d-6884-4415-b24a-0a1a28f577a6">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
# FAQ
|
# FAQ
|
||||||
## Не могу повесить EcsEntityConncet или другие компоненты
|
## Не могу повесить EcsEntityConncet или другие компоненты
|
||||||
Такое может происходить после обновления пакета, решается либо через `Assets -> Reimport All` или перезапуск окна Unity с удалением папки `*project name*/Library`.
|
Такое иногда может происходить после обновления пакета, решается либо через `Assets -> Reimport All` или перезапуск окна Unity с удалением папки `*project name*/Library`.
|
||||||
|
30
README.md
30
README.md
@ -5,13 +5,35 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img alt="Version" src="https://img.shields.io/github/package-json/v/DCFApixels/DragonECS-Unity?color=%23ff4e85&style=for-the-badge">
|
<img alt="Version" src="https://img.shields.io/github/package-json/v/DCFApixels/DragonECS-Unity?color=%23ff4e85&style=for-the-badge">
|
||||||
<img alt="GitHub" src="https://img.shields.io/github/license/DCFApixels/DragonECS-Unity?color=ff4e85&style=for-the-badge">
|
<img alt="GitHub" src="https://img.shields.io/github/license/DCFApixels/DragonECS-Unity?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&logoColor=%23ffffff&style=for-the-badge"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
# Integration with Unity for [DragonECS](https://github.com/DCFApixels/DragonECS)
|
# Integration with Unity for [DragonECS](https://github.com/DCFApixels/DragonECS)
|
||||||
|
|
||||||
| Languages: | [Русский](https://github.com/DCFApixels/DragonECS-Unity/blob/main/README-RU.md) | [English(WIP)](https://github.com/DCFApixels/DragonECS-Unity) |
|
<table>
|
||||||
| :--- | :--- | :--- |
|
<tr></tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">Readme Languages:</td>
|
||||||
|
</tr>
|
||||||
|
<tr></tr>
|
||||||
|
<tr>
|
||||||
|
<td nowrap width="100">
|
||||||
|
<a href="https://github.com/DCFApixels/DragonECS-Unity/blob/main/README-RU.md">
|
||||||
|
<img src="https://github.com/user-attachments/assets/7bc29394-46d6-44a3-bace-0a3bae65d755"></br>
|
||||||
|
<span>Русский</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td nowrap width="100">
|
||||||
|
<a href="https://github.com/DCFApixels/DragonECS-Unity">
|
||||||
|
<img src="https://github.com/user-attachments/assets/3c699094-f8e6-471d-a7c1-6d2e9530e721"></br>
|
||||||
|
<span>English(WIP)</span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
The extension will add a set of tools for debugging and communicating with the Unity engine.
|
The extension will add a set of tools for debugging and communicating with the Unity engine.
|
||||||
|
|
||||||
@ -27,7 +49,7 @@ Versioning semantics - [Open](https://gist.github.com/DCFApixels/e53281d4628b19f
|
|||||||
## Environment
|
## Environment
|
||||||
Requirements:
|
Requirements:
|
||||||
+ Dependency: [DragonECS](https://github.com/DCFApixels/DragonECS)
|
+ Dependency: [DragonECS](https://github.com/DCFApixels/DragonECS)
|
||||||
+ Minimum version of C# 7.3;
|
+ Minimum version of C# 8.0;
|
||||||
+ Minimum version of Unity 2021.2.0;
|
+ Minimum version of Unity 2021.2.0;
|
||||||
|
|
||||||
Tested with:
|
Tested with:
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
"displayName": "DragonECS-Unity",
|
"displayName": "DragonECS-Unity",
|
||||||
"description": "Integration with Unity for DragonECS",
|
"description": "Integration with Unity for DragonECS",
|
||||||
"unity": "2021.2",
|
"unity": "2021.2",
|
||||||
"version": "0.4.1",
|
"version": "0.4.3",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/DCFApixels/DragonECS-Unity.git"
|
"url": "https://github.com/DCFApixels/DragonECS-Unity.git"
|
||||||
|
@ -145,8 +145,8 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
var unityGameObjects = _world.GetPool<GameObjectConnect>();
|
var unityGameObjects = _world.GetPool<GameObjectConnect>();
|
||||||
unityGameObjects.TryDel(oldEntityID);
|
unityGameObjects.TryDel(oldEntityID);
|
||||||
_connectedEntities.Remove(GetInstanceID());
|
|
||||||
}
|
}
|
||||||
|
_connectedEntities.Remove(GetInstanceID());
|
||||||
_world = null;
|
_world = null;
|
||||||
_entity = entlong.NULL;
|
_entity = entlong.NULL;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using static DCFApixels.DragonECS.IComponentTemplate;
|
using static DCFApixels.DragonECS.IComponentTemplate;
|
||||||
|
|
||||||
@ -50,11 +51,14 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
[Serializable]
|
[Serializable]
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
public abstract class ComponentTemplateBase<T> : ComponentTemplateBase
|
public abstract class ComponentTemplateBase<T> : ComponentTemplateBase
|
||||||
{
|
{
|
||||||
protected static TypeMeta Meta = EcsDebugUtility.GetTypeMeta<T>();
|
protected static TypeMeta Meta = EcsDebugUtility.GetTypeMeta<T>();
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
protected T component;
|
protected T component;
|
||||||
|
[SerializeField]
|
||||||
|
private byte _offset; // Fucking Unity drove me crazy with the error "Cannot get managed reference index with out bounds offset". This workaround helps avoid that error.
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
public sealed override Type Type { get { return typeof(T); } }
|
public sealed override Type Type { get { return typeof(T); } }
|
||||||
@ -66,14 +70,8 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Methods
|
#region Methods
|
||||||
public override object GetRaw()
|
public sealed override object GetRaw() { return component; }
|
||||||
{
|
public sealed override void SetRaw(object raw) { component = (T)raw; }
|
||||||
return component;
|
|
||||||
}
|
|
||||||
public override void SetRaw(object raw)
|
|
||||||
{
|
|
||||||
component = (T)raw;
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +84,7 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public abstract class TagComponentTemplate<T> : ComponentTemplateBase<T>
|
public abstract class TagComponentTemplate<T> : ComponentTemplateBase<T>
|
||||||
where T : struct, IEcsTagComponent
|
where T : struct, IEcsTagComponent
|
||||||
{
|
{
|
||||||
public override void Apply(short worldID, int entityID)
|
public override void Apply(short worldID, int entityID)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user