Интеграция в редактор с мониторингом состояния миров и систем.
Проверено на Unity 2020.3 (зависит от Unity) и содержит asmdef-описания для компиляции в виде отдельных сборок и уменьшения времени рекомпиляции основного проекта.
ВАЖНО! Зависит от LeoECS - фреймворк должен быть установлен до этого расширения.
Поддерживается установка в виде 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
реализует паттерн "наблюдатель" для отслеживания изменений в мире. Интеграция осуществляется посредством вызова метода 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
реализует паттерн "наблюдатель" для отслеживания изменений в системах. Интеграция осуществляется посредством вызова метода 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--;
}
}