reckfellENGINE

EditorEntity3DGizmoPlugin

Обработчик гизмо редактора: линии, ручки и выбор Entity3D.

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

Зарегистрируйте экземпляр через EditorPlugin.AddEntity3DGizmoPlugin(). Для простого гизмо переопределите _HasGizmo(), _Redraw() и методы ручек. Для отдельного состояния на каждый объект возвращайте собственный EditorEntity3DGizmo из _CreateGizmo().

Геометрия задаётся в локальном пространстве Entity3D. Коллизии гизмо служат выбору в редакторе, а не игровой физике. При подтверждении ручки записывайте Do/Undo через менеджер редактора; при отмене прямо восстанавливайте исходный restore.

Рабочий C#-пример.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

EditorEntity3DGizmoPluginКонструктор
# EditorEntity3DGizmoPlugin
C#
public EditorEntity3DGizmoPlugin();

Методы24

AddMaterialvoid
# AddMaterial
C#
public void AddMaterial(string name, StandardMaterial3D material);

Добавляет новый материал во внутренний список материалов для плагина. Затем к нему можно получить доступ с помощью EditorEntity3DGizmoPlugin.GetMaterial. Не следует переопределять.

Параметры
ИмяТипПо умолчанию
namestring—
materialStandardMaterial3D—
CreateHandleMaterialvoid
# CreateHandleMaterial
C#
public void CreateHandleMaterial(string name, bool billboard = false, Texture2D texture = null);

Создаёт материал ручек один раз при инициализации.

Параметры
ИмяТипПо умолчанию
namestring—
billboardboolfalse
textureTexture2Dnull
name

Ключ материала ручек.

billboard

Настройка billboard ручек.

texture

Текстура ручек или null для стандартной текстуры редактора.

CreateIconMaterialvoid
# CreateIconMaterial
C#
public void CreateIconMaterial(string name, Texture2D texture, bool onTop = false, Color? color = default);

Создает материал значка с его вариантами (выбранными и/или редактируемыми) и добавляет их во внутренний список материалов. Затем к ним можно получить доступ с помощью EditorEntity3DGizmoPlugin.GetMaterial и использовать в EditorEntity3DGizmo.AddUnscaledBillboard. Не следует переопределять.

Параметры
ИмяТипПо умолчанию
namestring—
textureTexture2D—
onTopboolfalse
colorColor?default
color

Если параметр не имеет значения, то значение по умолчанию: new Color(1.0f, 1.0f, 1.0f, 1.0f).

CreateMaterialvoid
# CreateMaterial
C#
public void CreateMaterial(string name, Color color, bool billboard = false, bool onTop = false, bool useVertexColor = false);

Создаёт варианты материала линий для выбранности и редактируемости. Вызывайте при инициализации, а в redraw получайте вариант через GetMaterial(name, gizmo).

Параметры
ИмяТипПо умолчанию
namestring—
colorColor—
billboardboolfalse
onTopboolfalse
useVertexColorboolfalse
name

Ключ материала в плагине.

color

Базовый цвет; экземпляры сцены могут использовать цвет редактора.

billboard

Поворачивать к камере; по умолчанию false.

onTop

Отключить проверку глубины для отрисовки поверх геометрии.

useVertexColor

Учитывать цвета вершин.

GetMaterialStandardMaterial3D
# GetMaterial
C#
public StandardMaterial3D GetMaterial(string name, EditorEntity3DGizmo gizmo = null);

Возвращает ранее созданный материал с учётом выбранности и редактируемости переданного гизмо. Без гизмо возвращает первый вариант.

Параметры
ИмяТипПо умолчанию
namestring—
gizmoEditorEntity3DGizmonull
name

Ключ ранее созданного материала.

gizmo

Гизмо для выбора варианта или null. Не освобождайте активный материал в redraw.

Возвращает StandardMaterial3D

Материал указанного ключа и состояния.

_BeginHandleActionvoid
# _BeginHandleAction
C#
public virtual void _BeginHandleAction(EditorEntity3DGizmo gizmo, int handleId, bool secondary);
Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
handleIdint—
secondarybool—
_CanBeHiddenbool
# _CanBeHidden
C#
public virtual bool _CanBeHidden();

Разрешает скрывать этот тип гизмо через редактор; по умолчанию true. Не меняет видимость игровой Entity.

Возвращает bool

true, если скрытие разрешено.

_CanCommitHandleOnClickbool
# _CanCommitHandleOnClick
C#
public virtual bool _CanCommitHandleOnClick();

Разрешает завершить действие, когда конечная позиция ручки совпадает с начальной. По умолчанию false; отдельно проверяйте изменение данных.

Возвращает bool

true для такого завершения.

_CommitHandlevoid
# _CommitHandle
C#
public virtual void _CommitHandle(EditorEntity3DGizmo gizmo, int handleId, bool secondary, Variant restore, bool cancel);

Завершает действие: при cancel сразу восстановите restore без новой истории. Иначе запишите финальное значение как Do и исходное как Undo через менеджер редактора. Если данные не изменились, пропустите запись.

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
handleIdint—
secondarybool—
restoreVariant—
cancelbool—
gizmo

Гизмо, для которого вызван callback.

handleId

ID ручки из AddHandles(), не индекс Entity.

secondary

true для вторичной ручки.

restore

Исходный снимок из _GetHandleValue().

cancel

true для отмены, false для подтверждения.

_CommitSubgizmosvoid
# _CommitSubgizmos
C#
public virtual void _CommitSubgizmos(EditorEntity3DGizmo gizmo, int[] ids, Reckfell.Collections.Array<Transform3D> restores, bool cancel);

Переопределите этот метод, чтобы зафиксировать группу редактируемых subgizmos (см. EditorEntity3DGizmoPlugin._SubgizmosIntersectRay и EditorEntity3DGizmoPlugin._SubgizmosIntersectFrustum). Обычно это означает создание действия UndoRedo для изменения, используя текущие преобразования как «do» и преобразования restores как «undo». Если аргумент cancel равен true, преобразования restores должны быть установлены напрямую, без какого-либо действия UndoRedo. Как и во всех методах subgizmo, преобразования задаются в локальном пространстве относительно Entity3D gizmo. Вызывается для активных gizmos этого плагина.

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
idsint[]—
restoresReckfell.Collections.Array<Transform3D>—
cancelbool—
_CreateGizmoEditorEntity3DGizmo
# _CreateGizmo
C#
public virtual EditorEntity3DGizmo _CreateGizmo(Entity3D forNode3D);

Создаёт собственный EditorEntity3DGizmo для состояния на каждый объект. Возвращайте null для неподходящих Entity. Это альтернатива простому подходу через _HasGizmo().

Параметры
ИмяТипПо умолчанию
forNode3DEntity3D—
forNode3D

Entity3D, для которой нужен гизмо.

Возвращает EditorEntity3DGizmo

Экземпляр гизмо или null.

_GetGizmoNamestring
# _GetGizmoName
C#
public virtual string _GetGizmoName();

Имя типа гизмо в меню видимости редактора; не переименовывает Entity.

Возвращает string

Имя типа гизмо.

_GetHandleNamestring
# _GetHandleName
C#
public virtual string _GetHandleName(EditorEntity3DGizmo gizmo, int handleId, bool secondary);

Задаёт подпись ручки. Согласуйте ID и secondary с AddHandles().

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
handleIdint—
secondarybool—
gizmo

Гизмо, для которого вызван callback.

handleId

ID ручки из AddHandles(), не индекс Entity.

secondary

true для вторичной ручки.

Возвращает string

Подпись ручки.

_GetHandleValueVariant
# _GetHandleValue
C#
public virtual Variant _GetHandleValue(EditorEntity3DGizmo gizmo, int handleId, bool secondary);

Возвращает исходный снимок перед редактированием. Редактор передаёт его как restore в _CommitHandle(); не подменяйте значением предыдущего кадра.

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
handleIdint—
secondarybool—
gizmo

Гизмо, для которого вызван callback.

handleId

ID ручки из AddHandles(), не индекс Entity.

secondary

true для вторичной ручки.

Возвращает Variant

Variant, достаточный для восстановления.

_GetPriorityint
# _GetPriority
C#
public virtual int _GetPriority();

Задаёт приоритет обработки ручек и выбора subgizmo. Большее значение имеет преимущество; по умолчанию 0. Это не порядок отрисовки материала.

Возвращает int

Численный приоритет.

_GetSubgizmoTransformTransform3D
# _GetSubgizmoTransform
C#
public virtual Transform3D _GetSubgizmoTransform(EditorEntity3DGizmo gizmo, int subgizmoId);

Переопределите этот метод, чтобы вернуть текущее преобразование subgizmo. Как и все методы subgizmo, преобразование должно быть в локальном пространстве относительно Entity3D gizmo. Это преобразование будет запрошено в начале редактирования и использовано в аргументе restore в EditorEntity3DGizmoPlugin._CommitSubgizmos. Вызывается для активных gizmos этого плагина.

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
subgizmoIdint—
Возвращает Transform3D
_HasGizmobool
# _HasGizmo
C#
public virtual bool _HasGizmo(Entity3D forNode3D);

Выбирает Entity3D для стандартного экземпляра гизмо этого плагина. При отдельном _CreateGizmo() выбор выполняет тот callback.

Параметры
ИмяТипПо умолчанию
forNode3DEntity3D—
forNode3D

Проверяемая Entity3D редактируемой сцены.

Возвращает bool

true для подходящей Entity3D.

_IsHandleHighlightedbool
# _IsHandleHighlighted
C#
public virtual bool _IsHandleHighlighted(EditorEntity3DGizmo gizmo, int handleId, bool secondary);

Переопределите этот метод, чтобы он возвращал true всякий раз, когда указанный дескриптор должен быть выделен в редакторе. Аргумент secondary равен true, когда запрошенный дескриптор является вторичным (см. EditorEntity3DGizmo.AddHandles для получения дополнительной информации). Вызывается для активных гизмо этого плагина.

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
handleIdint—
secondarybool—
Возвращает bool
_IsSelectableWhenHiddenbool
# _IsSelectableWhenHidden
C#
public virtual bool _IsSelectableWhenHidden();

Разрешает выбор скрытого гизмо; по умолчанию false. Это выбор редактора, не физическая коллизия.

Возвращает bool

true для выбора скрытого гизмо.

_Redrawvoid
# _Redraw
C#
public virtual void _Redraw(EditorEntity3DGizmo gizmo);

Пересоздаёт геометрию гизмо: сначала Clear(), затем локальные линии, данные выбора и ручки. Материалы создавайте при инициализации, а не на каждом обновлении.

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
gizmo

Гизмо, для которого вызван callback.

_SetHandlevoid
# _SetHandle
C#
public virtual void _SetHandle(EditorEntity3DGizmo gizmo, int handleId, bool secondary, Camera3D camera, Vector2 screenPos);

Обновляет данные при движении ручки. Преобразуйте луч камеры в пространство редактируемого свойства; не создавайте Undo-действие каждый кадр.

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
handleIdint—
secondarybool—
cameraCamera3D—
screenPosVector2—
gizmo

Гизмо, для которого вызван callback.

handleId

ID ручки из AddHandles(), не индекс Entity.

secondary

true для вторичной ручки.

camera

Камера редактируемого 3D-вида.

screenPos

Позиция в координатах соответствующего viewport, не мировая точка.

_SetSubgizmoTransformvoid
# _SetSubgizmoTransform
C#
public virtual void _SetSubgizmoTransform(EditorEntity3DGizmo gizmo, int subgizmoId, Transform3D transform);

Переопределите этот метод для обновления свойств узла во время редактирования subgizmo (см. EditorEntity3DGizmoPlugin._SubgizmosIntersectRay и EditorEntity3DGizmoPlugin._SubgizmosIntersectFrustum). transform задается в локальной системе координат Entity3D. Вызывается для активных gizmos этого плагина.

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
subgizmoIdint—
transformTransform3D—
_SubgizmosIntersectFrustumint[]
# _SubgizmosIntersectFrustum
C#
public virtual int[] _SubgizmosIntersectFrustum(EditorEntity3DGizmo gizmo, Camera3D camera, Reckfell.Collections.Array<Plane> frustumPlanes);

Переопределите этот метод, чтобы разрешить выбор подобъектов с помощью выделения области перетаскивания мыши. При наличии camera и frustum_planes этот метод должен возвращать, какие подобъекты содержатся в усеченных пирамидах. Аргумент frustum_planes состоит из массива со всеми Plane, которые составляют усеченную пирамиду выбора. Возвращаемое значение должно содержать список уникальных идентификаторов подобъектов, эти идентификаторы могут иметь любое неотрицательное значение и будут использоваться в других виртуальных методах, таких как EditorEntity3DGizmoPlugin._GetSubgizmoTransform или EditorEntity3DGizmoPlugin._CommitSubgizmos. Вызывается для активных гизмо этого плагина.

Параметры
ИмяТипПо умолчанию
gizmoEditorEntity3DGizmo—
cameraCamera3D—
frustumPlanesReckfell.Collections.Array<Plane>—
Возвращает int[]
_SubgizmosIntersectRayint
# _SubgizmosIntersectRay
C#
public virtual int _SubgizmosIntersectRay(EditorEntity3DGizmo gizmo, Camera3D camera, Vector2 screenPos);

Переопределите этот метод, чтобы разрешить выбор подгимов с помощью щелчков мыши. При наличии camera и screen_pos в экранных координатах этот метод должен возвращать, какой подгимов следует выбрать. Возвращаемое значение должно быть уникальным идентификатором подгимов, который может иметь любое неотрицательное значение и будет использоваться в других виртуальных методах, таких как EditorEntity3DGizmoPlugin._GetSubgizmoTransform или EditorEntity3DGizmoPlugin._CommitSubgizmos. Вызывается для активных подгимов этого плагина.

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

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

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

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