Перейти к основному содержанию
EntityCoordinates — это новый и современный способ представления позиции сущности относительно другой сущности. Они состоят из EntityUid, координаты X и координаты Y. В отличие от GridCoordinates, эти координаты не привязаны к конкретной сетке: они могут использоваться для представления позиции сущностей, прикреплённых к карте, прикреплённых к определённой сетке, прикреплённых к другой сущности или сущностей без родителя. Из-за природы этих координат они могут стать недействительными при определённых обстоятельствах, например, когда EntityUid недействителен или когда его сущность удалена.

Подводные камни

  • Если у сущности нет родителя, её EntityCoordinates указывают на саму себя со смещением 0. Это относится к сущностям карты или сущностям без родительской сущности.
  • Когда сущность прикрепляется к новому родителю (например, при входе в шкафчик или при пристёгивании к стулу), её EntityCoordinates становятся относительными к этой сущности. В случае шкафчиков, утилизаторов и стульев это означает, что ваша новая относительная позиция равна (0, 0), поскольку вы находитесь в том же положении, что и ваш родитель.
  • Если вы получите EntityCoordinates сущности сетки и затем вызовете на них метод GetGridId(), вы всегда получите GridId.Invalid. Это связано с тем, что сетки НИКОГДА не могут иметь другую сетку в качестве предка, а GetGridId возвращает Id сетки, на которой находится родитель. В случае карт это всегда GridId.Invalid. Это также происходит, когда вы пытаетесь получить сетку, на которой находится сущность без родителя или прикреплённая к карте.
  • Сущности в космосе не имеют родительской сетки, поэтому при вызове GetGridId() они вернут GridId.Invalid. Если ваша логика должна работать как в космосе, так и на сетке, убедитесь, что вы не полагаетесь на то, что GetGridId() вернёт валидное значение.
  • Большинство методов EntityCoordinates требуют передачи IEntityManager и/или IMapManager в качестве аргументов. Поскольку методы EntityCoordinates находятся на очень низком уровне, выполнение IoC-разрешений для них было бы очень затратным. Постарайтесь кешировать эти зависимости вместо их разрешения каждый раз при работе с EntityCoordinates, так как их отсутствие может негативно сказаться на производительности.
Последнее изменение 21 июня 2026 г.