CollisionObject3D
Базовый объект физического обнаружения 3D.
Тела и зоны наследуют CollisionObject3D. Геометрию задают дочерние CollisionShape и ресурсы Shape; видимый спрайт/меш не создаёт её автоматически. Layer задаёт принадлежность объекта, Mask — фильтр обнаружения/взаимодействия.
Номер слоя 3 соответствует биту 4. Методы SetCollisionLayerValue/SetCollisionMaskValue принимают номер 1–32, а не готовую битовую маску. Для лучевого исключения используйте GetRid, а не GetInstanceId. Индекс shape в запросе относится к физическим формам; он не равен произвольному индексу ребёнка в иерархии.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства6
CollisionLayerСвойство
public uint CollisionLayer { get; set; }Физические слои это CollisionObject3D в. Объекты столкновения могут существовать в одном или более из 32 различных слоев. CollisionObject3D.CollisionMaskДля облегчения изменения этого значения скрипта см. CollisionObject3D.SetCollisionLayerValue.
Примечание: Object A может обнаружить контакт с объектом B только в том случае, если объект B находится в любом из слоев объекта A сканирования. Слои и маски столкновений в документации для дополнительной информации.
CollisionMaskСвойство
public uint CollisionMask { get; set; }Физические слои это CollisionObject3D сканирование. Объекты столкновения могут просканировать один или более из 32 различных слоев. CollisionObject3D.CollisionLayerДля облегчения изменения этого значения скрипта см. CollisionObject3D.SetCollisionMaskValue.
Примечание: Object A может обнаружить контакт с объектом B только в том случае, если объект B находится в любом из слоев объекта A сканирования. Слои и маски столкновений в документации для дополнительной информации.
CollisionPriorityСвойство
public float CollisionPriority { get; set; }Приоритет, используемый для решения столкновений при возникновении проникновения. Чем выше приоритет, тем ниже будет проникновение в объект. Это может быть использовано, например, для предотвращения прорыва игрока через границы уровня.
DisableModeСвойство
public CollisionObject3D.DisableModeEnum DisableMode { get; set; }Определяет поведение в физике, когда Entity.ProcessMode установлен в Entity.ProcessModeEnum.Disabled.
InputCaptureOnDragСвойство
public bool InputCaptureOnDrag { get; set; }Если true, CollisionObject3D продолжит получать входные события при перемещении мыши по его фигуре.
InputRayPickableСвойство
public bool InputRayPickable { get; set; }Если true, этот объект можно выбрать. Можно выбрать, обнаружив вход/выход указателя мыши, и если мышь находится внутри него, сообщать о событиях ввода. Требуется установить хотя бы один бит CollisionObject3D.CollisionLayer.
Методы35
CreateShapeOwneruint
public uint CreateShapeOwner(ReckfellObject owner);Создает нового владельца формы для данного объекта. Возвращает owner_id нового владельца для дальнейшего использования.
| Имя | Тип | По умолчанию |
|---|---|---|
owner | ReckfellObject | — |
uintGetCaptureInputOnDragbool
public bool GetCaptureInputOnDrag();boolGetCollisionLayeruint
public uint GetCollisionLayer();uintGetCollisionLayerValuebool
public bool GetCollisionLayerValue(int layerNumber);Возвращает, включен ли указанный слой CollisionObject3D.CollisionLayer, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetCollisionMaskuint
public uint GetCollisionMask();uintGetCollisionMaskValuebool
public bool GetCollisionMaskValue(int layerNumber);Возвращает, включен ли указанный слой CollisionObject3D.CollisionMask, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetCollisionPriorityfloat
public float GetCollisionPriority();floatGetDisableModeCollisionObject3D.DisableModeEnum
public CollisionObject3D.DisableModeEnum GetDisableMode();CollisionObject3D.DisableModeEnumGetShapeOwnersint[]
public int[] GetShapeOwners();Возвращает Reckfell.Collections.Array идентификаторов owner_id. Вы можете использовать эти идентификаторы в других методах, которые принимают owner_id в качестве аргумента.
int[]IsRayPickablebool
public bool IsRayPickable();boolIsShapeOwnerDisabledbool
public bool IsShapeOwnerDisabled(uint ownerId);Если true, владелец фигуры и его фигуры отключены.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
boolRemoveShapeOwnervoid
public void RemoveShapeOwner(uint ownerId);Удаляет указанного владельца фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
SetCaptureInputOnDragvoid
public void SetCaptureInputOnDrag(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetCollisionLayervoid
public void SetCollisionLayer(uint layer);| Имя | Тип | По умолчанию |
|---|---|---|
layer | uint | — |
SetCollisionLayerValuevoid
public void SetCollisionLayerValue(int layerNumber, bool value);Включает/выключает принадлежность слою по номеру 1–32. Номер 3 меняет бит 4; передавайте номер, а не предварительно вычисленную маску.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetCollisionMaskvoid
public void SetCollisionMask(uint mask);| Имя | Тип | По умолчанию |
|---|---|---|
mask | uint | — |
SetCollisionMaskValuevoid
public void SetCollisionMaskValue(int layerNumber, bool value);Меняет фильтр по номеру слоя 1–32. Mask и Layer имеют разные роли; этот вызов не меняет геометрию формы или все фильтры других объектов.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetCollisionPriorityvoid
public void SetCollisionPriority(float priority);| Имя | Тип | По умолчанию |
|---|---|---|
priority | float | — |
SetDisableModevoid
public void SetDisableMode(CollisionObject3D.DisableModeEnum mode);| Имя | Тип | По умолчанию |
|---|---|---|
mode | CollisionObject3D.DisableModeEnum | — |
SetRayPickablevoid
public void SetRayPickable(bool rayPickable);| Имя | Тип | По умолчанию |
|---|---|---|
rayPickable | bool | — |
ShapeFindOwneruint
public uint ShapeFindOwner(int shapeIndex);Возвращает owner_id заданной фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
shapeIndex | int | — |
uintShapeOwnerAddShapevoid
public void ShapeOwnerAddShape(uint ownerId, Shape3D shape);Добавляет Shape3D к владельцу фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
shape | Shape3D | — |
ShapeOwnerClearShapesvoid
public void ShapeOwnerClearShapes(uint ownerId);Удаляет все фигуры у владельца фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
ShapeOwnerGetOwnerReckfellObject
public ReckfellObject ShapeOwnerGetOwner(uint ownerId);Возвращает родительский объект указанного владельца фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
ReckfellObjectShapeOwnerGetShapeShape3D
public Shape3D ShapeOwnerGetShape(uint ownerId, int shapeId);Возвращает Shape3D с указанным идентификатором от указанного владельца фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
shapeId | int | — |
Shape3DShapeOwnerGetShapeCountint
public int ShapeOwnerGetShapeCount(uint ownerId);Возвращает количество фигур, содержащихся в заданном владельце фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
intShapeOwnerGetShapeIndexint
public int ShapeOwnerGetShapeIndex(uint ownerId, int shapeId);Возвращает дочерний индекс Shape3D с указанным идентификатором от указанного владельца фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
shapeId | int | — |
intShapeOwnerGetTransformTransform3D
public Transform3D ShapeOwnerGetTransform(uint ownerId);Возвращает Transform3D владельца фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
Transform3DShapeOwnerRemoveShapevoid
public void ShapeOwnerRemoveShape(uint ownerId, int shapeId);Удаляет фигуру у указанного владельца фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
shapeId | int | — |
ShapeOwnerSetDisabledvoid
public void ShapeOwnerSetDisabled(uint ownerId, bool disabled);Если true, отключает владельца данной фигуры.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
disabled | bool | — |
ShapeOwnerSetTransformvoid
public void ShapeOwnerSetTransform(uint ownerId, Transform3D transform);Устанавливает Transform3D для данного владельца формы.
| Имя | Тип | По умолчанию |
|---|---|---|
ownerId | uint | — |
transform | Transform3D | — |
_InputEventvoid
public virtual void _InputEvent(Camera3D camera, InputEvent @event, Vector3 eventPosition, Vector3 normal, int shapeIdx);Обнаружение мыши и прикосновения InputEvents - event когда они происходят во время зависания над объектом. camera это Camera3D что событие возникло в (для камер внутри обзорных порталов, помимо основного, который будет обнаружен, родитель Viewport.PhysicsObjectPicking должны быть установлены следующим образом: true). event_position - положение, на которое бьет луч от камеры до мыши в глобальном пространстве. normal - обычный вектор поверхности в этой точке мирового пространства. shape_idx - индекс обнаруженной формы из PhysicsServer3D.
См. также Entity._UnhandledInput, CollisionObject3D.ShapeFindOwner, и CollisionObject3D.ShapeOwnerGetOwner.
Примечание: InputEventScreenDrag События возникают, если при нахождении объекта в зависании или когда объект находится на пути движения.
Примечание: CollisionObject3D.InputEvent требуется CollisionObject3D.InputRayPickable Должен быть true и по крайней мере один CollisionObject3D.CollisionLayer Немного нужно.
| Имя | Тип | По умолчанию |
|---|---|---|
camera | Camera3D | — |
event | InputEvent | — |
eventPosition | Vector3 | — |
normal | Vector3 | — |
shapeIdx | int | — |
_MouseEntervoid
public virtual void _MouseEnter();Вызывается, когда указатель мыши входит в любую из фигур этого объекта. Требует, чтобы CollisionObject3D.InputRayPickable был true и был установлен хотя бы один бит CollisionObject3D.CollisionLayer. Обратите внимание, что перемещение между различными фигурами в пределах одного CollisionObject3D не приведет к вызову этой функции.
_MouseExitvoid
public virtual void _MouseExit();Вызывается, когда указатель мыши покидает все формы этого объекта. Требует, чтобы CollisionObject3D.InputRayPickable был true и был установлен хотя бы один бит CollisionObject3D.CollisionLayer. Обратите внимание, что перемещение между различными формами в пределах одного CollisionObject3D не приведет к вызову этой функции.
Сигналы и события3
InputEventСобытие
public event CollisionObject3D.InputEventEventHandler InputEvent;Обнаружение мыши и прикосновения InputEvents - event когда они происходят во время зависания над объектом. camera это Camera3D что событие возникло в (для камер внутри обзорных порталов, помимо основного, который будет обнаружен, родитель Viewport.PhysicsObjectPicking должны быть установлены следующим образом: true). event_position - положение, на которое бьет луч от камеры до мыши в глобальном пространстве. normal - обычный вектор поверхности в этой точке мирового пространства. shape_idx - индекс обнаруженной формы из PhysicsServer3D.
См. также Entity._UnhandledInput, CollisionObject3D.ShapeFindOwner, и CollisionObject3D.ShapeOwnerGetOwner.
Примечание: InputEventScreenDrag События возникают, если при нахождении объекта в зависании или когда объект находится на пути движения.
Примечание: CollisionObject3D.InputEvent требуется CollisionObject3D.InputRayPickable Должен быть true и по крайней мере один CollisionObject3D.CollisionLayer Немного нужно.
| Имя | Тип | По умолчанию |
|---|---|---|
camera | Entity | — |
event | InputEvent | — |
eventPosition | Vector3 | — |
normal | Vector3 | — |
shapeIdx | long | — |
MouseEnteredСобытие
public event Action MouseEntered;Выдается, когда указатель мыши входит в любую из форм этого объекта. Требует, чтобы CollisionObject3D.InputRayPickable был true и был установлен хотя бы один бит CollisionObject3D.CollisionLayer.
Примечание: Из-за отсутствия непрерывного обнаружения столкновений этот сигнал может не выдаваться в ожидаемом порядке, если мышь движется достаточно быстро, а область CollisionObject3D мала. Этот сигнал также может не выдаваться, если другой CollisionObject3D перекрывает рассматриваемый CollisionObject3D.
MouseExitedСобытие
public event Action MouseExited;Выдается, когда указатель мыши выходит за пределы всех форм этого объекта. Требует, чтобы CollisionObject3D.InputRayPickable был true и был установлен хотя бы один бит CollisionObject3D.CollisionLayer.
Примечание: Из-за отсутствия непрерывного обнаружения столкновений этот сигнал может не выдаваться в ожидаемом порядке, если мышь движется достаточно быстро, а область CollisionObject3D мала. Этот сигнал также может не выдаваться, если другой CollisionObject3D перекрывает рассматриваемый CollisionObject3D.
CollisionObject3D.DisableModeEnum
| Значение | Описание |
|---|---|
KeepActive = 2 | Если |
MakeStatic = 1 | Когда |
Remove = 0 | Когда |