From 338886e92dbc70a97332361a13269807ff5cefd8 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Mon, 11 Mar 2024 08:24:22 +0800 Subject: [PATCH] Update README-RU.md --- README-RU.md | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/README-RU.md b/README-RU.md index a24188e..a9fdb9c 100644 --- a/README-RU.md +++ b/README-RU.md @@ -145,7 +145,49 @@ foreach (var e in _world.Where(out Aspect a)) // Применение шаблона сразу при создании сущности. int e = _world.NewEntity(someSamplate); ``` -По умолчанию расширение содержит 2 вида шаблонов: `ScriptableEntityTemplate` и `MonoEntityTemplate`. +По умолчанию расширение содержит 3 вида шаблонов: `ScriptableEntityTemplate`, `MonoEntityTemplate`. + +## Шаблон компонента +Чтобы компонент попал в меню `Add Component` нужно реализовать шаблон компонента. Шаблоны компонента это классы реализующие `IComponentTemplate`. + +* Упрощенная реализация: +```c# +// Обязательно добавить [Serializable] к компоненту и к шаблону +[Serializable] +struct SomeComponent : IEcsComponent { /*...*/ } +[Serializable] +class SomeComponentTemplate : ComponentTemplate { } +``` + +* Упрощенная реализация для компонентов-тегов: +```c# +[Serializable] +struct SomeTagComponent : IEcsTagComponent { /*...*/ } +[Serializable] +class SomeTagComponentTemplate : TagComponentTemplate { } +``` + +* Полная реализация: +```c# +[Serializable] +struct SomeComponent : IEcsComponent { /*...*/ } +[Serializable] +class SomeComponentTemplate : IComponentTemplate +{ + [SerializeField] + protected SomeComponent component; + public Type Type { get { return typeof(SomeComponent); } } + public void Apply(int worldID, int entityID) + { + EcsWorld.GetPoolInstance>(worldID).TryAddOrGet(entityID); + } + public object GetRaw() { return component; } + public void SetRaw(object raw) { component = (SomeComponent)raw; } + public void OnGizmos(Transform transform, IComponentTemplate.GizmosMode mode) { /*...*/ } + public void OnValidate(UnityEngine.Object obj) { /*...*/ } +} +``` +> ## ScriptableEntityTemplate Хранится как отдельынй ассет. Наследуется от `ScriptableObject`.
Дейсвия чтобы создать `ScriptableEntityTemplate` ассет: @@ -170,6 +212,8 @@ int e = _world.NewEntity(someSamplate); ----- +Чтобы компонент можно было добавить в шаблон, нужно реализовать шаблон компонента. +
# Связь с GameObject