EntityTree
Управляет активными Entity, текущим уровнем, группами и паузой.
EntityTree — основной цикл и активное дерево; Entity получает его через GetTree после входа. Root — главный Viewport. CurrentScene — текущий корень уровня, а не все дети Root. Его присваивание само по себе не добавляет и не освобождает объекты.
После успешного запроса смены старый уровень сразу отсоединён, CurrentScene временно null; SceneChanged приходит после подключения и _Ready нового корня. Автозагрузки под Root переживают замену. Нативный API принимает PackedEntity обеих ролей, а правило только .rscene задаёт приложение. Смена уровня не является streaming.
Paused управляет обработкой и обычной физической симуляцией, но не запрещает методы, сигналы и прямые групповые вызовы. CreateTimer по умолчанию продолжает идти при паузе. Группы запрашивают участников активного дерева, не все ассеты проекта.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
EntityTreeКонструктор
public EntityTree();Свойства11
AutoAcceptQuitСвойство
public bool AutoAcceptQuit { get; set; }Автоматический выход по сигналу CloseRequested основного окна. По умолчанию включён. Отключите перед собственным подтверждением; это не отключает QuitOnGoBack и не перехватывает прямой Quit().
CurrentSceneСвойство
public Entity CurrentScene { get; set; }Текущий корень уровня под Root; во время смены временно null. Присваивание не добавляет новый объект и не освобождает старый.
DebugCollisionsHintСвойство
public bool DebugCollisionsHint { get; set; }Если true, формы столкновения будут видны при запуске игры из редактора для отладки.
DebugNavigationHintСвойство
public bool DebugNavigationHint { get; set; }Если true, навигационные полигоны будут видны при запуске игры из редактора для целей отладки.
Примечание: Это свойство не предназначено для изменения во время выполнения. Изменение значения EntityTree.DebugNavigationHint во время выполнения проекта не даст желаемого эффекта.
DebugPathsHintСвойство
public bool DebugPathsHint { get; set; }Если true, кривые от Path2D и Path3D будут видимы во время работы игры из редактора для откладки.
Примечание: Это свойство не изменяемо по время выполнения. Попытки изменить значение EntityTree.DebugPathsHint пока проект выполняется не приведёт к желательному эффекту.
EditedSceneRootСвойство
public Entity EditedSceneRoot { get; set; }Корень сцены, которая в данный момент редактируется в редакторе. Обычно это прямой потомок EntityTree.Root.
Примечание: Это свойство ничего не делает в сборках релиза.
MultiplayerPollСвойство
public bool MultiplayerPoll { get; set; }Если true (значение по умолчанию), включает автоматический опрос MultiplayerApi для этого EntityTree во время EntityTree.ProcessFrame.
Если false, вам необходимо вручную вызвать MultiplayerApi.Poll для обработки сетевых пакетов и доставки RPC. Это позволяет запускать RPC в другом цикле (например, физика, поток, определенный временной шаг) и для ручной защиты Mutex при доступе к MultiplayerApi из потоков.
PausedСвойство
public bool Paused { get; set; }Приостанавливает обычную физическую симуляцию и меняет обработку по ProcessMode. Не запрещает сигналы, прямые методы или все таймеры.
PhysicsInterpolationСвойство
public bool PhysicsInterpolation { get; set; }Если true, рендерер будет интерполировать преобразования объектов (как физических, так и не физических) между двумя последними преобразованиями, так что плавное движение будет видно даже тогда, когда физические тики не совпадают с отрисованными кадрами.
Значение этого свойства по умолчанию контролируется ProjectSettings.physics/common/physics_interpolation.
Примечание: Хотя это глобальная настройка, более точное управление отдельными ветвями EntityTree возможно с помощью Entity.PhysicsInterpolationMode.
QuitOnGoBackСвойство
public bool QuitOnGoBack { get; set; }Автоматический выход по сигналу GoBackRequested основного окна. По умолчанию включён и настраивается отдельно от AutoAcceptQuit. Для собственного подтверждения Back отключите его и обработайте NotificationWMGoBackRequest.
RootСвойство
public Window Root { get; }Корень дерева Window. Это самый верхний Entity дерева сцены, и он всегда присутствует. Абсолютный EntityPath всегда начинается с этого сущности. Потомки корневого сущности могут включать загруженный EntityTree.CurrentScene, а также любой AutoLoad($DOCS_URL/tutorials/scripting/singletons_autoload.html), настроенный в настройках проекта.
Предупреждение: Не удаляйте этот сущность. Это приведет к нестабильному поведению, за которым последует сбой.
Методы49
CallGroup2 перегрузки
public void CallGroup(StringName group, StringName method, params Variant[] args);Немедленно вызывает метод у участников группы. Не фильтрует их по Paused/ProcessMode и не создаёт C#-контракт типа по имени группы.
| Имя | Тип | По умолчанию |
|---|---|---|
group | StringName | — |
method | StringName | — |
args | Variant[] | — |
public void CallGroup(StringName group, StringName method, ReadOnlySpan<Variant> args);Немедленно вызывает метод у участников группы. Не фильтрует их по Paused/ProcessMode и не создаёт C#-контракт типа по имени группы.
| Имя | Тип | По умолчанию |
|---|---|---|
group | StringName | — |
method | StringName | — |
args | ReadOnlySpan<Variant> | — |
CallGroupFlags2 перегрузки
public void CallGroupFlags(long flags, StringName group, StringName method, params Variant[] args);Deferred откладывает вызовы. Unique объединяет group + method только вместе с Deferred и сохраняет первые аргументы. В проверенной реализации Unique-сброс не сохраняет Reverse.
| Имя | Тип | По умолчанию |
|---|---|---|
flags | long | — |
group | StringName | — |
method | StringName | — |
args | Variant[] | — |
public void CallGroupFlags(long flags, StringName group, StringName method, ReadOnlySpan<Variant> args);Deferred откладывает вызовы. Unique объединяет group + method только вместе с Deferred и сохраняет первые аргументы. В проверенной реализации Unique-сброс не сохраняет Reverse.
| Имя | Тип | По умолчанию |
|---|---|---|
flags | long | — |
group | StringName | — |
method | StringName | — |
args | ReadOnlySpan<Variant> | — |
ChangeSceneToEntityError
public Error ChangeSceneToEntity(Entity node);Запрашивает отложенную смену на корень, ещё не входящий в активное дерево. Для созданного в памяти объекта исходный путь может отсутствовать.
| Имя | Тип | По умолчанию |
|---|---|---|
node | Entity | — |
ErrorChangeSceneToFileError
public Error ChangeSceneToFile(string path);Загружает PackedEntity и запрашивает отложенную смену текущего уровня. Error.Ok ещё не означает готовый новый CurrentScene; дождитесь SceneChanged. Нативный API допускает обе роли дерева.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
ErrorChangeSceneToPackedError
public Error ChangeSceneToPacked(PackedEntity packedScene);Изменяет текущую сцену на новый экземпляр заданной PackedEntity (которая должна быть допустимой).
Возвращает OK в случае успеха, ERR_CANT_CREATE, если сцена не может быть создана, или ERR_INVALID_PARAMETER, если сцена недопустима.
Примечание: Подробности о порядке операций см. в EntityTree.ChangeSceneToEntity.
| Имя | Тип | По умолчанию |
|---|---|---|
packedScene | PackedEntity | — |
ErrorCreateTimerEntityTreeTimer
public EntityTreeTimer CreateTimer(double timeSec, bool processAlways = true, bool processInPhysics = false, bool ignoreTimeScale = false);Создаёт одноразовый EntityTreeTimer. processAlways по умолчанию true, поэтому он идёт при паузе; false останавливает игровое ожидание. Это не Entity Timer.
| Имя | Тип | По умолчанию |
|---|---|---|
timeSec | double | — |
processAlways | bool | true |
processInPhysics | bool | false |
ignoreTimeScale | bool | false |
EntityTreeTimerCreateTweenTween
public Tween CreateTween();Создает и возвращает новый Tween, обработанный в этом дереве. Tween автоматически запустится на следующем кадре процесса или физическом кадре (в зависимости от его Tween.TweenProcessMode).
Примечание: Tween, созданный с помощью этого метода, не привязан ни к одному Entity. Он может продолжать работать до тех пор, пока не останется ничего для анимации. Если вы хотите, чтобы Tween автоматически уничтожался при освобождении Entity, используйте Entity.CreateTween или Tween.BindEntity.
TweenGetCurrentSceneEntity
public Entity GetCurrentScene();EntityGetEditedSceneRootEntity
public Entity GetEditedSceneRoot();EntityGetEntitiesInGroupReckfell.Collections.Array<Entity>
public Reckfell.Collections.Array<Entity> GetEntitiesInGroup(StringName group);Возвращает участников группы активного дерева. Отсоединённый объект может сохранять IsInGroup = true и отсутствовать здесь.
| Имя | Тип | По умолчанию |
|---|---|---|
group | StringName | — |
Reckfell.Collections.Array<Entity>GetEntityCountint
public int GetEntityCount();Возвращает количество сущностей внутри этого дерева.
intGetEntityCountInGroupint
public int GetEntityCountInGroup(StringName group);Считает активных участников, не ассеты с таким именем группы на диске.
| Имя | Тип | По умолчанию |
|---|---|---|
group | StringName | — |
intGetFirstEntityInGroupEntity
public Entity GetFirstEntityInGroup(StringName group);Возвращает первый Entity, найденный внутри дерева, который был добавлен в заданную group в порядке иерархии сцены. Возвращает null, если совпадений не найдено. См. также EntityTree.GetEntitiesInGroup.
| Имя | Тип | По умолчанию |
|---|---|---|
group | StringName | — |
EntityGetFramelong
public long GetFrame();Возвращает количество обработанных шагов физического процесса с момента запуска приложения. Это не измерение прошедшего времени. См. также EntityTree.PhysicsFrame. Количество отрисованных кадров см. в Engine.GetProcessFrames.
longGetMultiplayerMultiplayerApi
public MultiplayerApi GetMultiplayer(EntityPath forPath = null);Ищет MultiplayerApi, настроенный для указанного пути, если он не существует, он ищет родительские пути, пока не найдет его. Если путь пустой или ничего не найдено, возвращается путь по умолчанию. См. EntityTree.SetMultiplayer.
| Имя | Тип | По умолчанию |
|---|---|---|
forPath | EntityPath | null |
MultiplayerApiGetProcessedTweensReckfell.Collections.Array<Tween>
public Reckfell.Collections.Array<Tween> GetProcessedTweens();Возвращает Reckfell.Collections.Array существующих в данный момент Tween-ов в дереве, включая приостановленные твины.
Reckfell.Collections.Array<Tween>GetRootWindow
public Window GetRoot();WindowHasGroupbool
public bool HasGroup(StringName name);Возвращает true, если сущность, добавленный в заданную группу name, существует в дереве.
| Имя | Тип | По умолчанию |
|---|---|---|
name | StringName | — |
boolIsAccessibilityEnabledbool
public bool IsAccessibilityEnabled();Возвращает true, если функции доступности включены и обновления информации о доступности активно обрабатываются.
boolIsAccessibilitySupportedbool
public bool IsAccessibilitySupported();Returns (Возврат) true если элементы доступности подкрепляются OS и подключен к проектным установкам.
boolIsAutoAcceptQuitbool
public bool IsAutoAcceptQuit();boolIsDebuggingCollisionsHintbool
public bool IsDebuggingCollisionsHint();boolIsDebuggingNavigationHintbool
public bool IsDebuggingNavigationHint();boolIsDebuggingPathsHintbool
public bool IsDebuggingPathsHint();boolIsMultiplayerPollEnabledbool
public bool IsMultiplayerPollEnabled();boolIsPausedbool
public bool IsPaused();boolIsPhysicsInterpolationEnabledbool
public bool IsPhysicsInterpolationEnabled();boolIsQuitOnGoBackbool
public bool IsQuitOnGoBack();boolNotifyGroupvoid
public void NotifyGroup(StringName group, int notification);Передаёт код уведомления в _Notification участников. Это не сигнал с произвольными аргументами; прямой вызов не блокируется паузой.
| Имя | Тип | По умолчанию |
|---|---|---|
group | StringName | — |
notification | int | — |
NotifyGroupFlagsvoid
public void NotifyGroupFlags(uint callFlags, StringName group, int notification);Вызывает ReckfellObject.Notification с заданным notification для всех сущностей внутри этого дерева, добавленных в group. Используйте call_flags для настройки поведения этого метода (см. EntityTree.GroupCallFlags).
| Имя | Тип | По умолчанию |
|---|---|---|
callFlags | uint | — |
group | StringName | — |
notification | int | — |
QueueDeletevoid
public void QueueDelete(ReckfellObject obj);Ставит в очередь указанный obj для удаления, вызывая его ReckfellObject.Free в конце текущего кадра. Этот метод похож на Entity.QueueFree.
| Имя | Тип | По умолчанию |
|---|---|---|
obj | ReckfellObject | — |
Quitvoid
public void Quit(int exitCode = 0);Запрашивает завершение цикла движка и устанавливает код выхода процесса. Не рассылает NotificationWMCloseRequest, не подтверждает выход и не сохраняет игру. Дождитесь нужных операций до вызова.
| Имя | Тип | По умолчанию |
|---|---|---|
exitCode | int | 0 |
exitCodeКод завершения процесса; по умолчанию 0. В установленной Windows сборке проверен возврат кода 23.
ReloadCurrentSceneError
public Error ReloadCurrentScene();Повторно загружает SourceAssetPath текущего корня. Восстанавливает состояние файла, а не текущие изменённые поля. Нужны существующий CurrentScene и исходный файл.
ErrorSetAutoAcceptQuitvoid
public void SetAutoAcceptQuit(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetCurrentScenevoid
public void SetCurrentScene(Entity childNode);| Имя | Тип | По умолчанию |
|---|---|---|
childNode | Entity | — |
SetDebugCollisionsHintvoid
public void SetDebugCollisionsHint(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetDebugNavigationHintvoid
public void SetDebugNavigationHint(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetDebugPathsHintvoid
public void SetDebugPathsHint(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetEditedSceneRootvoid
public void SetEditedSceneRoot(Entity scene);| Имя | Тип | По умолчанию |
|---|---|---|
scene | Entity | — |
SetGroupvoid
public void SetGroup(StringName group, string property, Variant value);Устанавливает заданное property в value для всех сущностей внутри этого дерева, добавленных в заданную group. сущности, не имеющие property, игнорируются. См. также EntityTree.CallGroup и EntityTree.NotifyGroup.
Примечание: Этот метод немедленно действует на все выбранные сущности одновременно, что может вызвать подтормаживание в некоторых ситуациях, требующих высокой производительности.
Примечание: В C# property должно быть в snake_case при ссылке на встроенные свойства Reckfell. Предпочитайте использовать имена, представленные в классе PropertyName, чтобы избежать выделения нового StringName при каждом вызове.
| Имя | Тип | По умолчанию |
|---|---|---|
group | StringName | — |
property | string | — |
value | Variant | — |
SetGroupFlagsvoid
public void SetGroupFlags(uint callFlags, StringName group, string property, Variant value);Устанавливает заданное property в value на всех узлах внутри этого дерева, добавленных в заданную group. сущности, не имеющие property, игнорируются. Используйте call_flags для настройки поведения этого метода (см. EntityTree.GroupCallFlags).
Примечание: В C# property должно быть в snake_case при ссылке на встроенные свойства Reckfell. Предпочитайте использовать имена, представленные в классе PropertyName, чтобы избежать выделения нового StringName при каждом вызове.
| Имя | Тип | По умолчанию |
|---|---|---|
callFlags | uint | — |
group | StringName | — |
property | string | — |
value | Variant | — |
SetMultiplayervoid
public void SetMultiplayer(MultiplayerApi multiplayer, EntityPath rootPath = null);Устанавливает пользовательский MultiplayerApi с заданным root_path (управляя также относительными подпутями) или переопределяет стандартный, если root_path пуст.
Примечание: Не нужно настраивать MultiplayerApi для подпути, содержащей root_path, вложенные пользовательские многопользовательские режимы не допускаются. То есть, если один настроен для "/root/Foo", установка одного для "/root/Foo/Bar" приведет к ошибке.
Примечание: EntityTree.SetMultiplayer следует вызывать до готовности дочерних сущностей в заданном root_path. Если многопользовательские сущности, такие как MultiplayerSpawner или MultiplayerSynchronizer, добавляются в дерево до установки пользовательского многопользовательского API, они не будут работать.
| Имя | Тип | По умолчанию |
|---|---|---|
multiplayer | MultiplayerApi | — |
rootPath | EntityPath | null |
SetMultiplayerPollEnabledvoid
public void SetMultiplayerPollEnabled(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetPausevoid
public void SetPause(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetPhysicsInterpolationEnabledvoid
public void SetPhysicsInterpolationEnabled(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetQuitOnGoBackvoid
public void SetQuitOnGoBack(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
UnloadCurrentScenevoid
public void UnloadCurrentScene();Немедленно освобождает текущий корень и очищает CurrentScene. Не обращайтесь к его объектам после вызова.
Сигналы и события9
EntityAddedСобытие
public event EntityTree.EntityAddedEventHandler EntityAdded;Выдается, когда node входит в это дерево.
| Имя | Тип | По умолчанию |
|---|---|---|
node | Entity | — |
EntityRemovedСобытие
public event EntityTree.EntityRemovedEventHandler EntityRemoved;Вызывается, когда node покидает это дерево.
| Имя | Тип | По умолчанию |
|---|---|---|
node | Entity | — |
EntityRenamedСобытие
public event EntityTree.EntityRenamedEventHandler EntityRenamed;Удалено, когда node's Entity.Name Изменился.
| Имя | Тип | По умолчанию |
|---|---|---|
node | Entity | — |
NodeConfigurationWarningChangedСобытие
public event EntityTree.NodeConfigurationWarningChangedEventHandler NodeConfigurationWarningChanged;Удалено, когда node's Entity.UpdateConfigurationWarnings Только в редакторе.
| Имя | Тип | По умолчанию |
|---|---|---|
node | Entity | — |
PhysicsFrameСобытие
public event Action PhysicsFrame;Создается непосредственно перед вызовом Entity._PhysicsProcess на каждом сущности в этом дереве.
ProcessFrameСобытие
public event Action ProcessFrame;Создается непосредственно перед вызовом Entity._Process на каждом сущности в этом дереве.
SceneChangedСобытие
public event Action SceneChanged;Испускается после подключения нового корня и выполнения его _Ready при успешной смене. Старые ссылки уже могут указывать на освобождённые объекты.
TreeChangedСобытие
public event Action TreeChanged;Генерируется каждый раз при изменении иерархии дерева (перемещении, переименовании сущностей и т. д.).
TreeProcessModeChangedСобытие
public event Action TreeProcessModeChanged;Выдается при изменении Entity.ProcessMode любого сущности внутри дерева. Выдается только в редакторе для обновления видимости отключенных сущностей.
EntityTree.GroupCallFlags
| Значение | Описание |
|---|---|
Default = 0 | Вызов сущностей внутри группы без специального поведения (по умолчанию).
|
Deferred = 2 | Вызов сущностей внутри группы в конце текущего кадра (может быть как кадр процесса, так и физический кадр), аналогично |
Reverse = 1 | Вызов сущностей внутри группы в обратном порядке иерархии дерева (все вложенные дочерние сущности вызываются раньше соответствующих им родительских сущностей). |
Unique = 4 | Вызывайте сущности внутри группы только один раз, даже если вызов выполняется много раз в одном кадре. Для работы необходимо объединить с |