Прямо сейчас ваша игра, вероятно, в Update запускается последовательно. Вероятно, вы хотите заменить деталь в середине этого Update

По умолчанию все System запускаются ПОСЛЕ старого доброго обновления. Но, к счастью, у нас есть [UpdateBefore] [UpdateAfter], который можно использовать с классами в using UnityEngine.Experimental.PlayerLoop, а не только с системами или группой обновлений ECS. ([UpdateInGroup])

Стратегия состоит в том, чтобы переместить всю вашу старую логику в LateUpdate, а затем переместить только логику «ECS Starter» в Update. Кстати, убедитесь, что ваша игра работает точно так же на этом этапе! Затем мы сделаем Update - ECS - LateUpdate. Вы будете постепенно уменьшать размер LateUpdate в ECS, пока все не исчезнет, ​​но в настоящее время маловероятно, поскольку большая часть Unity по-прежнему полагается на старую систему.

Эта логика должна предоставить системе ECS некоторые данные, будет создавать некоторые объекты и удерживать их, передавая различные данные в целом из EntityManager, который является мостом в мир ECS.

В моем случае у меня есть «одноэлементная» сущность, которая содержит некоторые данные компонентов, подобные этой. Я всегда мог получить и установить эти данные как в мире ECS, так и за его пределами с помощью статических методов Get и Set, как вы можете видеть. Также мне нужно позвонить Initialize где-нибудь, прежде чем какая-либо система сможет работать.

Процесс перехода обычно заключается в том, что код, оставшийся в LateUpdate, будет что-то вычислять. Теперь мы хотим, чтобы это сделала ECS, поэтому мы прокомментируем это и добавим логику в ECS. Когда ECS завершит вычисления, чтобы получить этот ответ, он будет через EntityManager

У вас может быть метод для копирования данных из вашего старого поля в объект, но я изменил поле, которое когда-то было обычной переменной, на свойство get-set, связанное с ECS. Таким образом, текущий пользователь продолжает работать, не зная, что значение записывается и считывается из системы ECS. Теперь нам даже не нужно сообщать ECS значение, потому что все используют одно и то же хранилище этой переменной.

set немного многословен, но это struct для вас. Напоминание о том, как вы устанавливали только переменную x в Vector3.

Затем вы замените элемент в начале LateUpdate один за другим, закомментировав его, потому что он переместился в ECS, и посмотрите результат.