Skip to content

Attachables and Points

Picker entries from Octoputs. Grouped by the category the picker shows them under.

Attachment

Can Attach Object

Whether the point can attach a specific attachable object.

Passes when the attachment point can accept a specific attachable object. When Require Free Point is on, the point must also currently hold nothing. The point already holding that object, such as the hand carrying it, never passes.

Type: CanAttachCheck

Phase

Only idle, attaching, attached, or detaching.

Passes when the attachment point is in a specific phase: Idle, Attaching, Attached, or Detaching.

Type: PhaseCheck

Attachment / Filtering

Attachable Object Filter

Finds an attachable on the candidate and runs checks against it.

Looks for an attachable object on the candidate, using the lookup strategy, and passes when every check passes. Add checks for tag, held state, eligibility, and so on. Each check only sees the found attachable, so the picker only offers options that make sense here.

Type: AttachableObjectFilterGroup

Attachment Point Filter

Finds an attachment point on the candidate and runs checks against it.

Looks for an attachment point on the candidate, using the lookup strategy, and passes when every check passes. Add checks for phase, tag, holding state, and so on. Each check only sees the found attachment point, so the picker only offers options that make sense here.

Type: AttachmentPointFilterGroup

Eligibility

Uses the object's built-in attach / detach conditions.

Reuses the attachable's own attach and detach conditions as a check. Toggle each requirement on or off to skip objects that aren't ready to attach or detach, without duplicating the conditions elsewhere.

Type: EligibilityCheck

Filter

Pass when the attachable matches GameObject conditions.

Runs GameObject conditions (tags, layers, names, components, …) against the attachable's GameObject. Add conditions below to narrow which objects pass. Under Advanced, a lookup can test a related object instead (a child or parent).

Type: GameObjectFilterAttachableCheck

Filter

Pass when the point matches GameObject conditions.

Runs GameObject conditions (tags, layers, names, components, …) against the attachment point's GameObject. Add conditions below to narrow which points pass. Under Advanced, a lookup can test a related object instead (a child or parent).

Type: GameObjectFilterAttachmentPointCheck

Held / Free

Whether the object is currently attached or free.

Passes when the attachable matches the selected state. Held accepts only currently attached objects; Free accepts only currently unattached objects.

Type: HeldStateCheck

Not Just Detached

Hides a slot after the watched object detaches from it.

Watches one attachable. When that attachable leaves an attachment point, this check hides that point until the reset condition fires. Pick a reset condition (distance, time, or detector focus) to decide when the slot becomes selectable again. Use it to stop the slot you just took something from re-grabbing the held object on the same hover.

Type: NotJustDetachedCheck

On Attached Object

Evaluates inner attachable checks against the currently attached object.

Routes inner attachable checks to the object currently held by the point. Fails when nothing is attached.

Type: OnAttachedObjectCheck

Same Tag As Point

Pass when the object matches the tag held by another point.

Passes when the object's first tag is the same as the tag of whatever another point is already holding. Use it on two input slots pointing at each other so a machine only takes a matching pair. While the other point is empty, everything passes.

Type: SameTagAsPointCheck

Attachment / State

Holding / Empty

Whether the point is holding an object or is empty.

Passes when the attachment point matches the selected occupancy. Holding accepts only occupied points; Empty accepts only points with no attached object.

Type: IsHoldingCheck

Lifecycle / Attachment

Attachable Object Cycle

Begin/End driven by an AttachableObject cycle.

Picks one AttachableObject and one of its cycles. Attaching runs during the attach itself. Attached runs while it's fully attached, until detaching starts. Detaching runs during the detach itself. Occupancy runs the whole time it's attached, from when attaching starts to when it's fully detached. Add point checks to only run when it's on a matching point.

Type: AttachableObjectCycleFrame

Attachable Object Targeted Cycle

Per-target Begin/End driven by an AttachableObject cycle.

Picks one AttachableObject and one of its cycles. Begin and End fire with the attachment point the object is on, so commands can run against the point.

Type: AttachableObjectTargetedCycleFrame

Attachment Point Cycle

Begin/End driven by an AttachmentPoint cycle.

Picks one AttachmentPoint and one of its cycles. Attaching runs during the attach itself. Holding runs while it's holding something, until detaching starts. Detaching runs during the detach itself. Occupancy runs the whole time something is attached, from when attaching starts to when it's fully detached.

Type: AttachmentPointCycleFrame

Attachment Point Targeted Cycle

Per-target Begin/End driven by an AttachmentPoint cycle.

Picks one AttachmentPoint and one of its cycles. Begin and End fire with the attachable that is in the cycle, so commands can run against it directly.

Type: AttachmentPointTargetedCycleFrame

Detected Attachable Cycle

Per-object Begin/End driven by a cycle on every attachable a Detector sees.

Pick a Detector and one Attachable cycle. Begin and End fire with the object, for every object the detector currently sees, and follow the detector as objects come and go. Use it to keep a set of free cargo up to date without re-checking it.

Type: DetectedAttachableCycleFrame

Detected Attachment Point Cycle

Per-point Begin/End driven by a cycle on every point a Detector sees.

Pick a Detector and one AttachmentPoint cycle. Begin and End fire with the point, for every point the detector currently sees, and follow the detector as points come and go. Use it to keep a set of usable slots up to date without re-checking them.

Type: DetectedAttachmentPointCycleFrame

Reset

After Distance

Clears the suppression once the held object has moved far enough away.

Keeps the just-detached slot hidden until you've moved the held object at least the given distance from the slot. Good when the visual cue is 'the object is now somewhere else', not 'enough time has passed'.

Type: DistanceReset

After Time

Clears the suppression after a set number of seconds.

Keeps the just-detached slot hidden for a set number of seconds, then makes it available again no matter where the held object went.

Type: TimeReset

When Detector Loses Focus

Clears the suppression once the configured detector stops seeing the point.

Keeps the just-detached slot hidden until the chosen detector stops seeing it (trigger exit, raycast moves off, …). Move away from the slot and it becomes available again the next time it is looked at.

Type: DetectorFocusReset

General

Attachable Preferred

Uses the pivot declared on the dragged AttachableObject.

Looks up the dragged object's AttachableObject component and uses its Preferred Attachment Pivot. Lets each draggable object choose its own grab point.

Type: AttachablePreferredTransformPivot

Bounds Center

Pivots from the center of a bounds value.

Uses the center of a bounds value as the pivot offset. Set up a Local GameObject Bounds source to compute from renderers or colliders, or enter bounds directly.

Type: BoundsCenterPivot

Bounds Percent

Pivots from a point inside a bounds value, set as a percentage of each axis.

Places the pivot inside a bounding box. 0 is the low face of an axis, 0.5 the middle, 1 the high face, so (0.5, 0, 0.5) sits on the bottom center. Values outside 0 to 1 push the pivot past the box. Set up a Local GameObject Bounds source to compute the box from renderers or colliders, or enter bounds directly.

Type: BoundsPercentPivot

Grip Point

Holds the object by a marker child placed on it.

Holds each object by a marker you place on it: an empty child whose name starts with Grip Point (or the name you type here). The marker goes where the hand should be, turned the way the hand should face, so a sushi is held from the top and a plate by its rim. An object can have several, such as Grip Point Top and Grip Point Side: Preferred Point picks the one the hand reached for. Objects without a marker are held the way the fallback says.

Type: GripPointPivot

Keep Start Offset

Keeps the gap and turn the object had from the target when it started following.

The object stays where it is when the movement starts, then moves along with the target, keeping the same gap. With Follow Turns on it also swings around the target and turns with it, like a child object. With it off, it only copies the target's movement and keeps its own rotation. To copy only the target's turns, turn the position off in the pipeline's Options.

Type: StartOffsetPivot

Local Pose

Pivots from a hand-authored local offset and rotation.

Type where the grab point sits on the object and how it is turned in hand. The offset is in the object's local space; the rotation is relative to the object, so a 90 degree tilt here carries the object tilted 90 degrees the other way.

Type: LocalPosePivot

Raycast Hit Point

Pivots from the point the user clicked on the object.

At grab time, casts a ray to find the point on the object that was clicked, and uses that point as the pivot. The object will visibly drag from where it was clicked.

Type: RaycastHitPointPivot

Transform Origin

No offset. The target's position is applied directly to the transform's origin.

The pivot is the transform's own origin, so no offset is applied. Use this when the target position should be the object's transform position directly.

Type: TransformOriginPivot