mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-11-13 00:55:55 +08:00
Update README-RU.md
This commit is contained in:
parent
6354d91769
commit
32c218f852
72
README-RU.md
72
README-RU.md
@ -41,6 +41,7 @@
|
|||||||
* [Корень ECS](#Корень-ECS)
|
* [Корень ECS](#Корень-ECS)
|
||||||
* [Пример для Unity](#Пример-для-Unity)
|
* [Пример для Unity](#Пример-для-Unity)
|
||||||
* [Общий пример](#Общий-пример)
|
* [Общий пример](#Общий-пример)
|
||||||
|
* [Гибридность](#Гибридность)
|
||||||
* [Debug](#Debug)
|
* [Debug](#Debug)
|
||||||
* [Атрибуты](#Атрибуты)
|
* [Атрибуты](#Атрибуты)
|
||||||
* [EcsDebug](#EcsDebug)
|
* [EcsDebug](#EcsDebug)
|
||||||
@ -556,6 +557,77 @@ public class EcsRoot
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
## Гибридность
|
||||||
|
Для смешивания архитектурных подходов классического OOP и ECS используется специальный пул `EcsHybridPool<T>`. Принцип работы этого пула несколько отличается от других, он упрощает поддержу наследования и полиморфизма.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Как это работает?</summary>
|
||||||
|
|
||||||
|
При добавлении элемента в пул, пул сканирует его иерархию наследования и реализуемые интерфейсы в поиске типов у которых есть интерфес `IEcsHybridComponent` и автоматически добавляет компонент в соответсвующие этим типам пулы. Таким же образом происходит удаление. Сканирвоание просиходит не для типа T а для типа экземпляра, поэтому в примере ниже строчка в `_world.GetPool<ITransform>().Add(entity, _rigidbody);` добавляет не только в пул `EcsHybridPool<ITransform>` но и в остальные.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
Пример использования:
|
||||||
|
``` csharp
|
||||||
|
public interface ITransform : IEcsHybridComponent
|
||||||
|
{
|
||||||
|
Vector3 Position { get; set; }
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
public class Transform : ITransform
|
||||||
|
{
|
||||||
|
public Vector3 Position { get; set; }
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
public class Rigidbody : ITransform
|
||||||
|
{
|
||||||
|
public Vector3 Position { get; set; }
|
||||||
|
public float Mass { get; set; }
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
public class Camera : ITransform
|
||||||
|
{
|
||||||
|
Vector3 Position { get; set; }
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
// ...
|
||||||
|
|
||||||
|
EcsWorld _world;
|
||||||
|
Rigidbody _rigidbody;
|
||||||
|
// ...
|
||||||
|
|
||||||
|
// Создадим пустую сущность.
|
||||||
|
int entity = _world.NewEmptyEntity();
|
||||||
|
// Получаем пул EcsHybridPool<ITransform> и добавляем в него для сущности компонент _rigidbody.
|
||||||
|
// Если вместо ITransform подставить Transform или Rigidbody, то результат будет одинаковый
|
||||||
|
_world.GetPool<ITransform>().Add(entity, _rigidbody);
|
||||||
|
// ...
|
||||||
|
|
||||||
|
//Все эти строчки вернут экземпляр _rigidbody.
|
||||||
|
ITransform iTransform = _world.GetPool<ITransform>().Get(entity);
|
||||||
|
Transform transform = _world.GetPool<Transform>().Get(entity);
|
||||||
|
Rigidbody rigidbody = _world.GetPool<Rigidbody>().Get(entity);
|
||||||
|
//Исключение - отсутсвует компонент. Camera не является наследником или наследуемым классом для _rigidbody.
|
||||||
|
Camera camera = _world.GetPool<Camera>().Get(entity);
|
||||||
|
|
||||||
|
//Все эти строчки вернут True.
|
||||||
|
bool isITransform = _world.GetPool<ITransform>().Has(entity);
|
||||||
|
bool isTransform = _world.GetPool<Transform>().Has(entity);
|
||||||
|
bool isRigidbody = _world.GetPool<Rigidbody>().Has(entity);
|
||||||
|
//Эта строчка вернет False.
|
||||||
|
bool isCamera = _world.GetPool<Camera>().Has(entity);
|
||||||
|
// ...
|
||||||
|
|
||||||
|
// Удалим у сущности компонент.
|
||||||
|
_world.GetPool<ITransform>().Del(entity);
|
||||||
|
// ...
|
||||||
|
//Все эти строчки вернут False.
|
||||||
|
bool isITransform = _world.GetPool<ITransform>().Has(entity);
|
||||||
|
bool isTransform = _world.GetPool<Transform>().Has(entity);
|
||||||
|
bool isRigidbody = _world.GetPool<Rigidbody>().Has(entity);
|
||||||
|
bool isCamera = _world.GetPool<Camera>().Has(entity);
|
||||||
|
// ...
|
||||||
|
```
|
||||||
|
|
||||||
# Debug
|
# Debug
|
||||||
Фреймворк предоставляет дополнительные инструменты для отладки и логирования, не зависящие от среды.
|
Фреймворк предоставляет дополнительные инструменты для отладки и логирования, не зависящие от среды.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user