Unclaimed Package Is this your package? Claim it to unlock full analytics and manage your listing.
Claim This Package

Install via UPM

Add to Unity Package Manager using this URL

https://www.pkglnk.dev/ecs-unityintegration.git

README Markdown

Copy this to your project's README.md

Style
Preview
pkglnk installs badge
## Installation

Add **LeoECS Unity Integration** to your Unity project via Package Manager:

1. Open **Window > Package Manager**
2. Click **+** > **Add package from git URL**
3. Enter:
```
https://www.pkglnk.dev/ecs-unityintegration.git
```

[![pkglnk](https://www.pkglnk.dev/badge/ecs-unityintegration.svg?style=pkglnk)](https://www.pkglnk.dev/pkg/ecs-unityintegration)

README

Интеграция в редактор Unity для LeoECS

Интеграция в редактор с мониторингом состояния миров и систем.

Проверено на Unity 2020.3 (зависит от Unity) и содержит asmdef-описания для компиляции в виде отдельных сборок и уменьшения времени рекомпиляции основного проекта.

Содержание

Социальные ресурсы

discord

Установка

ВАЖНО! Зависит от LeoECS - фреймворк должен быть установлен до этого расширения.

В виде unity модуля

Поддерживается установка в виде unity-модуля через git-ссылку в PackageManager или прямое редактирование Packages/manifest.json:

"com.leopotam.ecs-unityintegration": "https://github.com/Leopotam/ecs-unityintegration.git",

По умолчанию используется последняя релизная версия. Если требуется версия "в разработке" с актуальными изменениями - следует переключиться на ветку develop:

"com.leopotam.ecs-unityintegration": "https://github.com/Leopotam/ecs-unityintegration.git#develop",

В виде исходников

Код так же может быть склонирован или получен в виде архива со страницы релизов.

Классы

EcsWorldObserver

EcsWorldObserver реализует паттерн "наблюдатель" для отслеживания изменений в мире. Интеграция осуществляется посредством вызова метода LeopotamGroup.Ecs.UnityIntegration.EcsWorldObserver.Create() - этот вызов должен быть обернут в #if UNITY_EDITOR-блок:

public class Startup : MonoBehaviour {
    EcsSystems _systems;

    void Start () {
        var world = new EcsWorld ();
        
#if UNITY_EDITOR
        UnityIntegration.EcsWorldObserver.Create (world);
#endif  
        _systems = new EcsSystems(world)
            .Add (new RunSystem1());
            // Остальная инициализация...
        _systems.Init ();
    }
}

ВАЖНО! Обозреватель должен быть создан до создания любой сущности в мире.

EcsSystemsObserver

EcsSystemsObserver реализует паттерн "наблюдатель" для отслеживания изменений в системах. Интеграция осуществляется посредством вызова метода LeopotamGroup.Ecs.UnityIntegration.EcsSystemsObserver.Create() - этот вызов должен быть обернут в #if UNITY_EDITOR-блок:

public class Startup : MonoBehaviour {
    EcsSystems _systems;

    void Start () {
        var world = new EcsWorld ();
        
#if UNITY_EDITOR
        UnityIntegration.EcsWorldObserver.Create (world);
#endif        
        _systems = new EcsSystems(world)
            .Add (new RunSystem1());
            // Остальная инициализация...
        _systems.Init ();
#if UNITY_EDITOR
        UnityIntegration.EcsSystemsObserver.Create (_systems);
#endif
    }
}

Лицензия

Фреймворк выпускается под двумя лицензиями, подробности тут.

В случаях лицензирования по условиям MIT-Red не стоит расчитывать на персональные консультации или какие-либо гарантии.

ЧаВо

Я не могу редактировать значения полей компонентов в инспекторе. Как я могу это сделать?

Так и задумано, наблюдатель работает с данными только в режиме чтения.

Я хочу сделать кастомный инспектор для отрисовки моего типа. Как я могу это сделать?

Допустим, у нас есть компонент MyComponent1:

public enum MyEnum { True, False }

public class MyComponent1 {
    public MyEnum State;
    public string Name;
}

Инспектор для MyComponent1 может быть реализован следующим способом (файл должен быть размещен внутри папки Editor):

class MyComponent1Inspector : IEcsComponentInspector {
    Type IEcsComponentInspector.GetFieldType () {
        return typeof (MyComponent1);
    }

    void IEcsComponentInspector.OnGUI (string label, object value, EcsWorld world, ref EcsEntity entityId) {
        var component = value as MyComponent1;
        EditorGUILayout.LabelField (label, EditorStyles.boldLabel);
        EditorGUI.indentLevel++;
        EditorGUILayout.EnumPopup ("State", component.State);
        EditorGUILayout.TextField ("Name", component.Name);
        EditorGUI.indentLevel--;
    }
}

Comments

No comments yet. Be the first!