reckfellENGINE

EntityTree

Управляет активными Entity, текущим уровнем, группами и паузой.

На этой странице
class EntityTreeReckfellSharpНаследует MainLoop

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Конструктор
# EntityTree
C#
public EntityTree();

Свойства11

AutoAcceptQuitСвойство
# AutoAcceptQuit
C#
public bool AutoAcceptQuit { get; set; }

Автоматический выход по сигналу CloseRequested основного окна. По умолчанию включён. Отключите перед собственным подтверждением; это не отключает QuitOnGoBack и не перехватывает прямой Quit().

CurrentSceneСвойство
# CurrentScene
C#
public Entity CurrentScene { get; set; }

Текущий корень уровня под Root; во время смены временно null. Присваивание не добавляет новый объект и не освобождает старый.

DebugCollisionsHintСвойство
# DebugCollisionsHint
C#
public bool DebugCollisionsHint { get; set; }

Если true, формы столкновения будут видны при запуске игры из редактора для отладки.

DebugNavigationHintСвойство
# DebugNavigationHint
C#
public bool DebugNavigationHint { get; set; }

Если true, навигационные полигоны будут видны при запуске игры из редактора для целей отладки. Примечание: Это свойство не предназначено для изменения во время выполнения. Изменение значения EntityTree.DebugNavigationHint во время выполнения проекта не даст желаемого эффекта.

DebugPathsHintСвойство
# DebugPathsHint
C#
public bool DebugPathsHint { get; set; }

Если true, кривые от Path2D и Path3D будут видимы во время работы игры из редактора для откладки. Примечание: Это свойство не изменяемо по время выполнения. Попытки изменить значение EntityTree.DebugPathsHint пока проект выполняется не приведёт к желательному эффекту.

EditedSceneRootСвойство
# EditedSceneRoot
C#
public Entity EditedSceneRoot { get; set; }

Корень сцены, которая в данный момент редактируется в редакторе. Обычно это прямой потомок EntityTree.Root. Примечание: Это свойство ничего не делает в сборках релиза.

MultiplayerPollСвойство
# MultiplayerPoll
C#
public bool MultiplayerPoll { get; set; }

Если true (значение по умолчанию), включает автоматический опрос MultiplayerApi для этого EntityTree во время EntityTree.ProcessFrame. Если false, вам необходимо вручную вызвать MultiplayerApi.Poll для обработки сетевых пакетов и доставки RPC. Это позволяет запускать RPC в другом цикле (например, физика, поток, определенный временной шаг) и для ручной защиты Mutex при доступе к MultiplayerApi из потоков.

PausedСвойство
# Paused
C#
public bool Paused { get; set; }

Приостанавливает обычную физическую симуляцию и меняет обработку по ProcessMode. Не запрещает сигналы, прямые методы или все таймеры.

PhysicsInterpolationСвойство
# PhysicsInterpolation
C#
public bool PhysicsInterpolation { get; set; }

Если true, рендерер будет интерполировать преобразования объектов (как физических, так и не физических) между двумя последними преобразованиями, так что плавное движение будет видно даже тогда, когда физические тики не совпадают с отрисованными кадрами. Значение этого свойства по умолчанию контролируется ProjectSettings.physics/common/physics_interpolation. Примечание: Хотя это глобальная настройка, более точное управление отдельными ветвями EntityTree возможно с помощью Entity.PhysicsInterpolationMode.

QuitOnGoBackСвойство
# QuitOnGoBack
C#
public bool QuitOnGoBack { get; set; }

Автоматический выход по сигналу GoBackRequested основного окна. По умолчанию включён и настраивается отдельно от AutoAcceptQuit. Для собственного подтверждения Back отключите его и обработайте NotificationWMGoBackRequest.

RootСвойство
# Root
C#
public Window Root { get; }

Корень дерева Window. Это самый верхний Entity дерева сцены, и он всегда присутствует. Абсолютный EntityPath всегда начинается с этого сущности. Потомки корневого сущности могут включать загруженный EntityTree.CurrentScene, а также любой AutoLoad($DOCS_URL/tutorials/scripting/singletons_autoload.html), настроенный в настройках проекта. Предупреждение: Не удаляйте этот сущность. Это приведет к нестабильному поведению, за которым последует сбой.

Методы49

CallGroup2 перегрузки
# CallGroup · 1/2
C#
public void CallGroup(StringName group, StringName method, params Variant[] args);

Немедленно вызывает метод у участников группы. Не фильтрует их по Paused/ProcessMode и не создаёт C#-контракт типа по имени группы.

Параметры
ИмяТипПо умолчанию
groupStringName—
methodStringName—
argsVariant[]—
# CallGroup · 2/2
C#
public void CallGroup(StringName group, StringName method, ReadOnlySpan<Variant> args);

Немедленно вызывает метод у участников группы. Не фильтрует их по Paused/ProcessMode и не создаёт C#-контракт типа по имени группы.

Параметры
ИмяТипПо умолчанию
groupStringName—
methodStringName—
argsReadOnlySpan<Variant>—
CallGroupFlags2 перегрузки
# CallGroupFlags · 1/2
C#
public void CallGroupFlags(long flags, StringName group, StringName method, params Variant[] args);

Deferred откладывает вызовы. Unique объединяет group + method только вместе с Deferred и сохраняет первые аргументы. В проверенной реализации Unique-сброс не сохраняет Reverse.

Параметры
ИмяТипПо умолчанию
flagslong—
groupStringName—
methodStringName—
argsVariant[]—
# CallGroupFlags · 2/2
C#
public void CallGroupFlags(long flags, StringName group, StringName method, ReadOnlySpan<Variant> args);

Deferred откладывает вызовы. Unique объединяет group + method только вместе с Deferred и сохраняет первые аргументы. В проверенной реализации Unique-сброс не сохраняет Reverse.

Параметры
ИмяТипПо умолчанию
flagslong—
groupStringName—
methodStringName—
argsReadOnlySpan<Variant>—
ChangeSceneToEntityError
# ChangeSceneToEntity
C#
public Error ChangeSceneToEntity(Entity node);

Запрашивает отложенную смену на корень, ещё не входящий в активное дерево. Для созданного в памяти объекта исходный путь может отсутствовать.

Параметры
ИмяТипПо умолчанию
nodeEntity—
Возвращает Error
ChangeSceneToFileError
# ChangeSceneToFile
C#
public Error ChangeSceneToFile(string path);

Загружает PackedEntity и запрашивает отложенную смену текущего уровня. Error.Ok ещё не означает готовый новый CurrentScene; дождитесь SceneChanged. Нативный API допускает обе роли дерева.

Параметры
ИмяТипПо умолчанию
pathstring—
Возвращает Error
ChangeSceneToPackedError
# ChangeSceneToPacked
C#
public Error ChangeSceneToPacked(PackedEntity packedScene);

Изменяет текущую сцену на новый экземпляр заданной PackedEntity (которая должна быть допустимой). Возвращает OK в случае успеха, ERR_CANT_CREATE, если сцена не может быть создана, или ERR_INVALID_PARAMETER, если сцена недопустима. Примечание: Подробности о порядке операций см. в EntityTree.ChangeSceneToEntity.

Параметры
ИмяТипПо умолчанию
packedScenePackedEntity—
Возвращает Error
CreateTimerEntityTreeTimer
# CreateTimer
C#
public EntityTreeTimer CreateTimer(double timeSec, bool processAlways = true, bool processInPhysics = false, bool ignoreTimeScale = false);

Создаёт одноразовый EntityTreeTimer. processAlways по умолчанию true, поэтому он идёт при паузе; false останавливает игровое ожидание. Это не Entity Timer.

Параметры
ИмяТипПо умолчанию
timeSecdouble—
processAlwaysbooltrue
processInPhysicsboolfalse
ignoreTimeScaleboolfalse
Возвращает EntityTreeTimer
CreateTweenTween
# CreateTween
C#
public Tween CreateTween();

Создает и возвращает новый Tween, обработанный в этом дереве. Tween автоматически запустится на следующем кадре процесса или физическом кадре (в зависимости от его Tween.TweenProcessMode). Примечание: Tween, созданный с помощью этого метода, не привязан ни к одному Entity. Он может продолжать работать до тех пор, пока не останется ничего для анимации. Если вы хотите, чтобы Tween автоматически уничтожался при освобождении Entity, используйте Entity.CreateTween или Tween.BindEntity.

Возвращает Tween
GetCurrentSceneEntity
# GetCurrentScene
C#
public Entity GetCurrentScene();
Возвращает Entity
GetEditedSceneRootEntity
# GetEditedSceneRoot
C#
public Entity GetEditedSceneRoot();
Возвращает Entity
GetEntitiesInGroupReckfell.Collections.Array<Entity>
# GetEntitiesInGroup
C#
public Reckfell.Collections.Array<Entity> GetEntitiesInGroup(StringName group);

Возвращает участников группы активного дерева. Отсоединённый объект может сохранять IsInGroup = true и отсутствовать здесь.

Параметры
ИмяТипПо умолчанию
groupStringName—
Возвращает Reckfell.Collections.Array<Entity>
GetEntityCountint
# GetEntityCount
C#
public int GetEntityCount();

Возвращает количество сущностей внутри этого дерева.

Возвращает int
GetEntityCountInGroupint
# GetEntityCountInGroup
C#
public int GetEntityCountInGroup(StringName group);

Считает активных участников, не ассеты с таким именем группы на диске.

Параметры
ИмяТипПо умолчанию
groupStringName—
Возвращает int
GetFirstEntityInGroupEntity
# GetFirstEntityInGroup
C#
public Entity GetFirstEntityInGroup(StringName group);

Возвращает первый Entity, найденный внутри дерева, который был добавлен в заданную group в порядке иерархии сцены. Возвращает null, если совпадений не найдено. См. также EntityTree.GetEntitiesInGroup.

Параметры
ИмяТипПо умолчанию
groupStringName—
Возвращает Entity
GetFramelong
# GetFrame
C#
public long GetFrame();

Возвращает количество обработанных шагов физического процесса с момента запуска приложения. Это не измерение прошедшего времени. См. также EntityTree.PhysicsFrame. Количество отрисованных кадров см. в Engine.GetProcessFrames.

Возвращает long
GetMultiplayerMultiplayerApi
# GetMultiplayer
C#
public MultiplayerApi GetMultiplayer(EntityPath forPath = null);

Ищет MultiplayerApi, настроенный для указанного пути, если он не существует, он ищет родительские пути, пока не найдет его. Если путь пустой или ничего не найдено, возвращается путь по умолчанию. См. EntityTree.SetMultiplayer.

Параметры
ИмяТипПо умолчанию
forPathEntityPathnull
Возвращает MultiplayerApi
GetProcessedTweensReckfell.Collections.Array<Tween>
# GetProcessedTweens
C#
public Reckfell.Collections.Array<Tween> GetProcessedTweens();

Возвращает Reckfell.Collections.Array существующих в данный момент Tween-ов в дереве, включая приостановленные твины.

Возвращает Reckfell.Collections.Array<Tween>
GetRootWindow
# GetRoot
C#
public Window GetRoot();
Возвращает Window
HasGroupbool
# HasGroup
C#
public bool HasGroup(StringName name);

Возвращает true, если сущность, добавленный в заданную группу name, существует в дереве.

Параметры
ИмяТипПо умолчанию
nameStringName—
Возвращает bool
IsAccessibilityEnabledbool
# IsAccessibilityEnabled
C#
public bool IsAccessibilityEnabled();

Возвращает true, если функции доступности включены и обновления информации о доступности активно обрабатываются.

Возвращает bool
IsAccessibilitySupportedbool
# IsAccessibilitySupported
C#
public bool IsAccessibilitySupported();

Returns (Возврат) true если элементы доступности подкрепляются OS и подключен к проектным установкам.

Возвращает bool
IsAutoAcceptQuitbool
# IsAutoAcceptQuit
C#
public bool IsAutoAcceptQuit();
Возвращает bool
IsDebuggingCollisionsHintbool
# IsDebuggingCollisionsHint
C#
public bool IsDebuggingCollisionsHint();
Возвращает bool
IsDebuggingNavigationHintbool
# IsDebuggingNavigationHint
C#
public bool IsDebuggingNavigationHint();
Возвращает bool
IsDebuggingPathsHintbool
# IsDebuggingPathsHint
C#
public bool IsDebuggingPathsHint();
Возвращает bool
IsMultiplayerPollEnabledbool
# IsMultiplayerPollEnabled
C#
public bool IsMultiplayerPollEnabled();
Возвращает bool
IsPausedbool
# IsPaused
C#
public bool IsPaused();
Возвращает bool
IsPhysicsInterpolationEnabledbool
# IsPhysicsInterpolationEnabled
C#
public bool IsPhysicsInterpolationEnabled();
Возвращает bool
IsQuitOnGoBackbool
# IsQuitOnGoBack
C#
public bool IsQuitOnGoBack();
Возвращает bool
NotifyGroupvoid
# NotifyGroup
C#
public void NotifyGroup(StringName group, int notification);

Передаёт код уведомления в _Notification участников. Это не сигнал с произвольными аргументами; прямой вызов не блокируется паузой.

Параметры
ИмяТипПо умолчанию
groupStringName—
notificationint—
NotifyGroupFlagsvoid
# NotifyGroupFlags
C#
public void NotifyGroupFlags(uint callFlags, StringName group, int notification);

Вызывает ReckfellObject.Notification с заданным notification для всех сущностей внутри этого дерева, добавленных в group. Используйте call_flags для настройки поведения этого метода (см. EntityTree.GroupCallFlags).

Параметры
ИмяТипПо умолчанию
callFlagsuint—
groupStringName—
notificationint—
QueueDeletevoid
# QueueDelete
C#
public void QueueDelete(ReckfellObject obj);

Ставит в очередь указанный obj для удаления, вызывая его ReckfellObject.Free в конце текущего кадра. Этот метод похож на Entity.QueueFree.

Параметры
ИмяТипПо умолчанию
objReckfellObject—
Quitvoid
# Quit
C#
public void Quit(int exitCode = 0);

Запрашивает завершение цикла движка и устанавливает код выхода процесса. Не рассылает NotificationWMCloseRequest, не подтверждает выход и не сохраняет игру. Дождитесь нужных операций до вызова.

Параметры
ИмяТипПо умолчанию
exitCodeint0
exitCode

Код завершения процесса; по умолчанию 0. В установленной Windows сборке проверен возврат кода 23.

ReloadCurrentSceneError
# ReloadCurrentScene
C#
public Error ReloadCurrentScene();

Повторно загружает SourceAssetPath текущего корня. Восстанавливает состояние файла, а не текущие изменённые поля. Нужны существующий CurrentScene и исходный файл.

Возвращает Error
SetAutoAcceptQuitvoid
# SetAutoAcceptQuit
C#
public void SetAutoAcceptQuit(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
SetCurrentScenevoid
# SetCurrentScene
C#
public void SetCurrentScene(Entity childNode);
Параметры
ИмяТипПо умолчанию
childNodeEntity—
SetDebugCollisionsHintvoid
# SetDebugCollisionsHint
C#
public void SetDebugCollisionsHint(bool enable);
Параметры
ИмяТипПо умолчанию
enablebool—
SetDebugNavigationHintvoid
# SetDebugNavigationHint
C#
public void SetDebugNavigationHint(bool enable);
Параметры
ИмяТипПо умолчанию
enablebool—
SetDebugPathsHintvoid
# SetDebugPathsHint
C#
public void SetDebugPathsHint(bool enable);
Параметры
ИмяТипПо умолчанию
enablebool—
SetEditedSceneRootvoid
# SetEditedSceneRoot
C#
public void SetEditedSceneRoot(Entity scene);
Параметры
ИмяТипПо умолчанию
sceneEntity—
SetGroupvoid
# SetGroup
C#
public void SetGroup(StringName group, string property, Variant value);

Устанавливает заданное property в value для всех сущностей внутри этого дерева, добавленных в заданную group. сущности, не имеющие property, игнорируются. См. также EntityTree.CallGroup и EntityTree.NotifyGroup. Примечание: Этот метод немедленно действует на все выбранные сущности одновременно, что может вызвать подтормаживание в некоторых ситуациях, требующих высокой производительности. Примечание: В C# property должно быть в snake_case при ссылке на встроенные свойства Reckfell. Предпочитайте использовать имена, представленные в классе PropertyName, чтобы избежать выделения нового StringName при каждом вызове.

Параметры
ИмяТипПо умолчанию
groupStringName—
propertystring—
valueVariant—
SetGroupFlagsvoid
# SetGroupFlags
C#
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 при каждом вызове.

Параметры
ИмяТипПо умолчанию
callFlagsuint—
groupStringName—
propertystring—
valueVariant—
SetMultiplayervoid
# SetMultiplayer
C#
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, они не будут работать.

Параметры
ИмяТипПо умолчанию
multiplayerMultiplayerApi—
rootPathEntityPathnull
SetMultiplayerPollEnabledvoid
# SetMultiplayerPollEnabled
C#
public void SetMultiplayerPollEnabled(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
SetPausevoid
# SetPause
C#
public void SetPause(bool enable);
Параметры
ИмяТипПо умолчанию
enablebool—
SetPhysicsInterpolationEnabledvoid
# SetPhysicsInterpolationEnabled
C#
public void SetPhysicsInterpolationEnabled(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
SetQuitOnGoBackvoid
# SetQuitOnGoBack
C#
public void SetQuitOnGoBack(bool enabled);
Параметры
ИмяТипПо умолчанию
enabledbool—
UnloadCurrentScenevoid
# UnloadCurrentScene
C#
public void UnloadCurrentScene();

Немедленно освобождает текущий корень и очищает CurrentScene. Не обращайтесь к его объектам после вызова.

Сигналы и события9

EntityAddedСобытие
# EntityAdded
C#
public event EntityTree.EntityAddedEventHandler EntityAdded;

Выдается, когда node входит в это дерево.

Параметры обработчика
ИмяТипПо умолчанию
nodeEntity—
EntityRemovedСобытие
# EntityRemoved
C#
public event EntityTree.EntityRemovedEventHandler EntityRemoved;

Вызывается, когда node покидает это дерево.

Параметры обработчика
ИмяТипПо умолчанию
nodeEntity—
EntityRenamedСобытие
# EntityRenamed
C#
public event EntityTree.EntityRenamedEventHandler EntityRenamed;

Удалено, когда node's Entity.Name Изменился.

Параметры обработчика
ИмяТипПо умолчанию
nodeEntity—
NodeConfigurationWarningChangedСобытие
# NodeConfigurationWarningChanged
C#
public event EntityTree.NodeConfigurationWarningChangedEventHandler NodeConfigurationWarningChanged;

Удалено, когда node's Entity.UpdateConfigurationWarnings Только в редакторе.

Параметры обработчика
ИмяТипПо умолчанию
nodeEntity—
PhysicsFrameСобытие
# PhysicsFrame
C#
public event Action PhysicsFrame;

Создается непосредственно перед вызовом Entity._PhysicsProcess на каждом сущности в этом дереве.

ProcessFrameСобытие
# ProcessFrame
C#
public event Action ProcessFrame;

Создается непосредственно перед вызовом Entity._Process на каждом сущности в этом дереве.

SceneChangedСобытие
# SceneChanged
C#
public event Action SceneChanged;

Испускается после подключения нового корня и выполнения его _Ready при успешной смене. Старые ссылки уже могут указывать на освобождённые объекты.

TreeChangedСобытие
# TreeChanged
C#
public event Action TreeChanged;

Генерируется каждый раз при изменении иерархии дерева (перемещении, переименовании сущностей и т. д.).

TreeProcessModeChangedСобытие
# TreeProcessModeChanged
C#
public event Action TreeProcessModeChanged;

Выдается при изменении Entity.ProcessMode любого сущности внутри дерева. Выдается только в редакторе для обновления видимости отключенных сущностей.

EntityTree.GroupCallFlags

ЗначениеОписание
Default = 0

Вызов сущностей внутри группы без специального поведения (по умолчанию).

  • ГРУППА_КАЛЛ*
Deferred = 2

Вызов сущностей внутри группы в конце текущего кадра (может быть как кадр процесса, так и физический кадр), аналогично ReckfellObject.CallDeferred.

Reverse = 1

Вызов сущностей внутри группы в обратном порядке иерархии дерева (все вложенные дочерние сущности вызываются раньше соответствующих им родительских сущностей).

Unique = 4

Вызывайте сущности внутри группы только один раз, даже если вызов выполняется много раз в одном кадре. Для работы необходимо объединить с EntityTree.GroupCallFlags.Deferred. Примечание: Различные аргументы не учитываются. Поэтому, когда один и тот же вызов выполняется с разными аргументами, будет выполнен только первый вызов.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.