API: IWorldGraph, WorldGraph и EditorGraph
GraphEngine: общая база
Графы WorldGraph и EditorGraph наследуются от generic-базы GraphEngine<TSceneData, TPortData, TConnectionData, TTransitionData>, Поэтому все методы из раздела WorldGraph (ниже) доступны и в EditorGraph — только с подменой generic-типов. EditorGraph поверх этого добавляет редакторские помощники.
IWorldGraph (рантайм)
IWorldGraph — это чистый рантайм-граф, содержащий только актуальные методы для работы с графом. Устаревшие методы, которые в 1.2 вызывались через WorldGraphContainer (и ContainerEditorData в редакторе), помечены [Obsolete] и оставлены на самих этих типах — в контракт IWorldGraph они не входят. Получить граф можно через ITransitionManager.Graph.
| Метод | Назначение |
|---|---|
IReadOnlyList<SceneRuntimeData> GetScenesData() | Все сцены графа. |
IReadOnlyList<ConnectionRuntimeData> GetEdgesData() | Все связи графа. |
bool TryGetPortData(string guid, out PortRuntimeData data) | Данные порта. |
bool TryGetOppositePassageGuid(string guid, out string opposite) | Guid противоположного порта по связи. |
bool TryGetSceneDataByPortGuid(string guid, out SceneRuntimeData data) | Сцена, на которой расположен порт. |
bool TryGetSceneDataByBuildIndex(int buildIndex, out SceneRuntimeData data) | Сцена по Build Index. |
bool TryGetSceneDataByAddress(string address, out SceneRuntimeData data) | Сцена по Addressable-адресу (только под WGE_ADDRESSABLES — см. Поддержка Addressables). |
bool TryGetPassageTransitionData(string currentPortGuid, out RuntimeTransitionData data) | Данные перехода для GoFromAsync (по связи в графе). |
RuntimeTransitionData GetTeleportTransitionData(string currentPortGuid, string targetPortGuid) | Данные перехода для GoToAsync (телепорт между любыми портами). |
List<SceneRuntimeData> GetNeighboursData(SceneRuntimeData sceneData, bool ignoreShortcuts) | Соседние сцены, в которые можно перейти из портов указанной сцены. |
List<SceneRuntimeData> GetNeighboursData(IEnumerable<string> passageGuids, bool ignoreShortcuts) | Соседние сцены, в которые можно перейти из произвольного набора Guid портов. |
bool CanPassTransition(string guid, bool ignoreShortcuts) | Можно ли пройти через порт. |
bool CanPassTransition(string guid, bool ignoreShortcuts, out TransitionPassStatusType status) | Можно ли пройти через порт, с детальным status (Allowed,BlockedByDirection, BlockedByShortcut и т.д.). |
bool IsShortcutOrigin(string guid), IsShortcutDestination(string guid) | Признак shortcut типа связи у порта. |
bool IsOneWayOrigin(string guid), IsOneWayDestination(string guid) | Признак one-way типа связи у порта. |
WorldGraph (рантайм)
WorldGraph — конкретная реализация IWorldGraph. Его публичная поверхность полностью совпадает с интерфейсом (таблица выше): никаких дополнительных или устаревших методов на самом WorldGraph нет. Получить его можно через WorldGraphContainer.GetWorldGraph() или WGEProjectConfig.Instance.GetWorldGraph().
Устаревшие Get-методы (возвращавшие default при отсутствии данных) заменены на TryGet-аналоги. Сами [Obsolete]-версии оставлены не на WorldGraph, а на WorldGraphContainer (рантайм) и ContainerEditorData (редактор) — для плавной миграции. См. Замена Get-методов на TryGet.
EditorGraph (редактор)
Включает все методы из WorldGraph (с типами SceneNodeData/PortData/EdgeData/EditorTransitionData), плюс редакторские помощники:
| Метод | Назначение |
|---|---|
IEnumerable<(string Guid, string Path)> GetAllPortsDropdownData() | Все порты графа в формате "NodeName/PortName" → Guid — для PortsDropdown с выбором среди всех портов. |
IEnumerable<(string Guid, string Name)> GetPortsDropdownData(string scenePath) | Порты конкретной сцены — для PortsDropdown с выбором среди портов одной сцены. |
bool TryGetSceneDataBySceneAssetGuid(string sceneAssetGuid, out SceneNodeData data) | Сцена по Guid ассета. |
bool TryGetSceneDataByPath(string path, out SceneNodeData data) | Сцена по пути к .unity-ассету. |
В коде редактора получить EditorGraph можно через RefreshContext.EditorGraph (из Refresh(RefreshContext)) или WorldGraphContainer.EditorGraph. В рантайме граф доступен как IWorldGraph через ITransitionManager.Graph; конкретная реализация — WorldGraph (например, из WGEProjectConfig.Instance.GetWorldGraph()).