API Reference
Complete type reference for current Octoputs components, operations, and ScriptableObjects. For usage context, see the Usage Guide. For hands-on walkthroughs, see Your First Drag and Drop.
Core Components
The foundation MonoBehaviours that define attachable objects, the points they attach to, and the agent that moves them.
| Type |
Namespace |
Description |
AttachableObject |
Octoputs.Core |
Item that can be picked up / attached to a point. Hosts the attaching / attached / detaching lifecycle processes and conditions. Page |
AttachmentPoint |
Octoputs.Core |
Slot that accepts attachables (zero or one at a time). Hosts the matching attaching / holding / detaching processes. Page |
AttachingAgent |
Octoputs.Transfer |
The actor that grabs, moves, and drops attachables (player hand, cursor, claw, …). Resolves a grab source and a drop destination as SmartAttachableObject / SmartAttachmentPoint. Page |
Detection
Octoputs uses Jungle Core's generic Detector for object discovery — there are no longer Octoputs-specific detector classes. A Detector exposes IItemSource<GameObject> and emits filtered candidates through its selection step. Combine it with SmartAttachableObject / SmartAttachmentPoint (Dynamic mode) and the appropriate IComponentLookupStrategy to resolve the typed component on the consumer side.
For "mirror detected items into a container", put a Reactor next to it with a Detector Membership cycle reaction: its On Begin process runs a ContainerCommand with a StoreValueOperation, its On End process a RemoveValueOperation. The detector stays pure; the reaction does the side effect.
Targeting
Targets compute the destination position, rotation, and scale for transform operations.
| Type |
Description |
TransformTarget |
Follow a referenced Transform's position and rotation. |
RestPoseTransformTarget |
Stay where the object started inside its parent, so modifiers like Momentum or Spring react to the parent moving. |
RayHitTransformTarget |
Target the hit point of a raycast (surface dragging). |
BlendedTransformTarget |
Interpolate between two targets using a blend weight. |
LerpedTransformTarget |
Lerp from current position to a destination over a duration. Set its Arc offset to bend the path into a hop or a sideways swing. |
ShapeTraversalTransformTarget |
Travel a route across any shape at a set speed. Route picks the run: along the shape's U or V axis with a cross-axis offset, or a free route drawn on its UV grid. |
ShapeProjectionTransformTarget |
Slide the object along a Shape from where it was grabbed, driven by the movement of a 2D source (usually the mouse). For a fixed spot on a shape, use TransformTarget with a Point On Shape pose. |
SequenceTransformTarget |
Step through a list of targets in order. |
CompositeTransformTarget |
Combine position, rotation and scale, each from its own target. |
ConditionalTransformTransformTarget |
Switch between targets based on a Condition. Each slot holds a full target that starts over when picked, so a Sequence in a slot replays its steps. |
SequenceTransformTarget |
Follow a sequence of targets in order, advancing as each is reached. |
A transform operation is an IProcess that drives one Transform toward a target. Compose multiple operations using ParallelTransformOperation or SequenceTransformOperation. Run them from a TransformCommand (see Transformer), or wire them through AttachmentPointCommand / AttachableObjectCommand.
| Type |
Description |
DirectTransformOperation |
Sets position/rotation directly. Snappy, no physics. |
PhysicsTransformOperation |
Moves via Rigidbody forces. Springy, collision-aware. |
JointTransformOperation |
Uses a ConfigurableJoint. Rope-like, constrained movement. |
Direct2DTransformOperation |
Direct position writes for 2D Rigidbody2D objects. |
Rigidbody2DTransformOperation |
Physics forces for 2D Rigidbody2D objects. |
ParallelTransformOperation |
Run multiple child transform operations on the same subject in parallel. |
SequenceTransformOperation |
Run multiple child transform operations on the same subject in order. |
BatchTransformOperation |
Submit a subject to the Jobs-based batch pipeline. |
BatchTransformPipelineManager |
Manager component for coordinating batch pipeline execution. Page |
Modifiers adjust the target transform before the applier writes it. They execute in list order (top to bottom). See Tutorial: Transform Pipelines.
Constraint and Snapping
| Type |
Description |
PositionConstraintModifier |
Keep the position on a shape (floor plane, rail, curve), inside a volume, or on a grid. Relative To Drag Start carries the constraint to the pick-up point: a plane then holds the pick-up height, a line becomes a drag axis. |
RotationConstraintModifier |
Lock rotation axes, limit angles or snap to steps. Relative To Drag Start measures from the pick-up rotation. |
OrbitConstraintModifier |
Constrain movement to an orbital path around a center point. |
ReachSphereClampModifier |
Keeps the position within reach of a center point (like a character's arm). When aiming beyond the limit, the position follows the cursor direction along the sphere surface. |
HeightLockModifier |
Keep the object at the height of the ground below it. |
Physics and Dynamics
| Type |
Description |
SpringModifier |
Apply spring-damper physics to position. |
ElasticBandModifier |
Rubber-band effect that pulls back beyond a threshold. |
MomentumModifier |
Continue movement with inertia after release. |
KinematicsLimiterModifier |
Clamp velocity and acceleration. |
Raycast and Collision
| Type |
Description |
OcclusionRayPushModifier |
Push the position onto the first surface between the camera and the upstream wanted point. No-op when the path is clear, so it never fights an upstream offset that's already correct. (Renamed from RaycastOffsetModifier.) |
CameraRaycast2DOffsetModifier |
Offset position based on a camera raycast (2D). |
Advanced2DRaycastOffsetModifier |
Advanced 2D raycast with multiple configuration options. |
BoundingOffsetFromHitNormalModifier |
Offset from a surface using the hit normal and object bounds. |
AdvancedCollisionAvoidance |
Prevent objects from penetrating colliders using sweep tests. |
OBBCollisionAvoidanceModifier |
Collision avoidance using oriented bounding boxes. |
DepenetrationModifier |
Push objects out of overlapping geometry. |
SurfaceSlideModifier |
Slide along surfaces instead of stopping at collisions. |
Alignment and Orientation
| Type |
Description |
SurfaceNormalAlignmentModifier |
Align rotation to match a surface normal. |
GravityAlignmentModifier |
Align rotation to the gravity direction. |
TiltByVelocityModifier |
Tilt the object in the direction of movement based on speed. |
LookAtModifier |
Rotate to face a target point or direction. |
Relative Movement
| Type |
Description |
OffsetTransformModifier |
Move the pose by an offset along world, destination or the object's own axes. On top of the current position it keeps travelling while held; on top of the destination it holds a fixed distance. |
RotateTransformModifier |
Turn the pose around world, destination or the object's own axes, in place or around a pivot (measured from the object, or a point in the scene). On top of the current rotation it keeps spinning; on top of the destination it holds a fixed tilt. |
Animation and Oscillation
| Type |
Description |
OscillatorTransformTargetModifier |
Add oscillating position, rotation or scale offsets (bob, sway, breathe) while held. |
SquashStretchModifier |
React to a stretch on one axis, from incoming scale or speed, by counter-scaling the others to keep the volume, with spring inertia. |
NoiseOffsetModifier |
Apply Perlin noise offset for organic movement. |
PendulumSwingModifier |
Swing like a pendulum when picked up. |
Smoothing and Filtering
| Type |
Description |
SmoothPositionModifier |
Smooth position changes over time (damped follow). |
SmoothRotationModifier |
Smooth rotation changes over time. |
AntiJitterModifier |
Suppress small jittery movements below a threshold. |
Specialized
| Type |
Description |
PreserveViewRelativeOrientationModifier |
Compensate for perspective foreshortening so the object keeps the same visual angle to the camera. |
InfluenceModifier |
Pull toward an influence pose (e.g. BarycenterTransformDataValue over Points of Interest). Auto-activates from the influence source's own availability (ValueCount > 0) — fades in when it has a pose, out when it doesn't. |
RepelModifier |
Push out of a sphere of radius around each of sources (SmartGameObject, several allowed). The pushed distance is (radius - distance) * strength * falloff(distance / radius). Stateless, so one instance serves every object a Transformer moves. |
ScaleByDistanceModifier |
Scale the object based on distance from a reference point. |
ConditionalModifier |
Wraps another modifier and only applies it when a Condition is true. |
Pivots define the "grab frame" on the object: a point and an orientation. Each transform operation can reference an ITransformPivot which captures the grab frame at drag start and applies it every frame before modifiers run. The target's position is where the grab point lands; the target's rotation is where the grab frame points, so a pivot with a rotation carries the object turned by the inverse.
| Type |
Description |
TransformOriginPivot |
No offset — the target pose is applied directly to the transform's origin. Default. |
BoundsCenterPivot |
Pivot from the center of a bounds value (renderers or colliders). No rotation. |
RaycastHitPointPivot |
Pivot from the exact point where the user clicked on the object. No rotation. |
LocalPosePivot |
Hand-authored local offset and rotation. Turns the object by a fixed amount. |
StartOffsetPivot |
"Keep Start Offset". Measured from the target on the first frame, so the object follows from where it already is. Follow Turns on: it swings and turns with the target like a child. Off: it copies the target's movement and keeps its own rotation. |
AttachablePreferredTransformPivot |
Delegates to the pivot declared on the dragged AttachableObject. |
Constraints
Spatial limits that keep a Transform inside a region.
| Type |
Description |
Constrainer |
Component that enforces position + rotation constraints each frame on a Transform (or its Rigidbody). Page |
IPositionConstraint impls |
Bounds, sphere, plane, line, and combinator constraints. See Constraints. |
IRotationConstraint impls |
Angle-range constraints. |
Transfer
Targeted commands that execute operations against an AttachableObject or AttachmentPoint subject.
| Type |
Namespace |
Description |
AttachableObjectCommand |
Octoputs.Transfer |
Targets a single AttachableObject and runs a list of IAttachableObjectOperation items in parallel. |
AttachmentPointCommand |
Octoputs.Transfer |
Targets a single AttachmentPoint and runs a list of IAttachmentPointOperation items in parallel. |
Built-in Operations
| Operation |
Lives On |
Description |
AttachToPointOperation |
AttachmentPointCommand |
Attaches a configured attachable to this point. |
DetachPointOperation |
AttachmentPointCommand |
Detaches whatever this point is currently holding. |
TransferAttachableOperation |
AttachmentPointCommand |
Moves an attachable from one point to this one. |
DetachAttachableOperation |
AttachableObjectCommand |
Detaches this attachable from wherever it is currently held. |
Filtering
Filtering uses two typed leaf-check families. Where the candidate is already a known attachable or point — AttachmentPoint.attachableFilters, AttachableObject.pointFilter, AttachingAgent.grabFilters/dropFilters, TransferAttachableOperation.pointFilters — the slot holds the relevant checks directly (IAttachableObjectCheck / IAttachmentPointCheck); the picker is scoped to just those.
Where the candidate is a raw GameObject (detector selection steps, generic IGameObjectFilter slots) the same checks are run through an umbrella filter that resolves the component via a lookup strategy first:
| Umbrella |
Resolves |
Inner checks |
AttachableObjectFilterGroup |
AttachableObject |
IAttachableObjectCheck |
AttachmentPointFilterGroup |
AttachmentPoint |
IAttachmentPointCheck |
Available checks:
| Check |
Domain |
Description |
GameObjectFilterAttachableCheck |
Attachable |
Runs any IGameObjectFilter (e.g. JungleTagFilter) against the attachable's GameObject, or a related object via an optional lookup. |
HeldStateCheck |
Attachable |
Filter by whether the object is currently attached somewhere. |
EligibilityCheck |
Attachable |
Filter by whether the object's own conditions permit attachment. |
GameObjectFilterAttachmentPointCheck |
Point |
Runs any IGameObjectFilter (e.g. JungleTagFilter) against the point's GameObject, or a related object via an optional lookup. |
IsHoldingCheck |
Point |
Filter by whether the point currently holds an object. |
CanAttachCheck |
Point |
Filter by whether the point's conditions allow attaching a specific object. |
PhaseCheck |
Point |
Filter by current lifecycle phase. |
NotJustDetachedCheck |
Point |
Hides a point after a watched attachable detaches from it, until a configurable reset condition (distance, time, or detector focus) fires. |
OnAttachedObjectCheck |
Point |
Delegates to nested IAttachableObjectChecks evaluated on the currently held object. |
Per Jungle convention, filter fields are always allowlists — null = all allowed. Invert at the leaf if you need negation. With no checks, a direct slot accepts everything, and an umbrella degenerates to "the component exists on the candidate". The GameObjectFilterAttachableCheck and GameObjectFilterAttachmentPointCheck are the way to run any generic IGameObjectFilter — such as a JungleTagFilter — inside a typed check slot. Leave their lookup at the default (Self) to filter the candidate itself, or point it at a parent or child to test a related object instead.
The former AttachableGameObjectFilterCheck / AttachmentPointGameObjectFilterCheck pair was merged into these two checks — their lookup field now lives on the primary checks. Existing assets are redirected automatically by a RenameTypeRule in the Jungle.Core migration manifest.
Conditions
Condition types specific to Octoputs. They extend the Jungle Condition base class.
| Type |
Description |
AttachableObjectIsAttachedCondition |
True when the referenced attachable is currently attached. |
AttachmentPointHoldingCondition |
True when the point is holding any object. |
AttachmentPointAttachedFilterCondition |
True when the point holds an object that matches a configured IGameObjectFilter rule. |
AttachmentPointPhaseCondition |
True when the point is in a specific lifecycle phase. |
AttachableAtPointCondition |
True when the attachable is attached to a given point. |
PlacementOverlapCondition |
True when a candidate placement overlaps configured volumes. |
GameObject Conditions
These conditions evaluate a GameObject reference rather than a specific component.
| Type |
Description |
AttachmentPointStateCondition |
Check the lifecycle phase of an AttachmentPoint on the GameObject. |
AttachableStateCondition |
Check the lifecycle phase of an AttachableObject on the GameObject. |
IsAttachmentPointCondition |
Check whether the GameObject has an AttachmentPoint component. |
IsDraggableCondition |
Check whether the GameObject has an AttachableObject component. |
IsDragRelatedCondition |
True when the GameObject is involved in any active drag. |
CombinatoryGameObjectCondition |
Combines child GameObject conditions with All/Any. |
Measurement
Track motion and spatial data on subjects. Measurements are operations inside a measurement command, which runs in a ProcessComponent or a reaction's process. Each measurement writes into its own sink: a Data Storage key, a value asset, or any other settable value.
| Type |
Description |
MeasurementCommand |
Jungle command that resolves a GameObject target and runs a list of object measurements against it until the host stops it. |
AttachmentPointMeasurementCommand |
Octoputs command that resolves an AttachmentPoint target and runs attachment point measurements (attach counts, hold durations, Is Holding). |
AttachableObjectMeasurementCommand |
Octoputs command that resolves an AttachableObject target and runs attachable measurements (attach counts, hold durations, Is Currently Held). |
PositionMeasurement |
Tracks world position. |
VelocityMeasurement |
Tracks velocity vector. |
SpeedMeasurement |
Tracks scalar speed. |
AccelerationMeasurement |
Tracks how fast the speed is changing. |
AngularVelocityMeasurement |
Tracks angular velocity. |
DistanceTraveledMeasurement |
Tracks cumulative distance. |
BoundsMeasurement |
Tracks world-space bounds. |
ScriptableObjects
Shared assets used for configuration and identification across the framework.
| Type |
Menu Path |
Description |
Key |
Create > Jungle > Data > Key |
Shared named key used to look up values in a DataStorage, such as measurement results. |
Layout Strategies
Arrange attached objects spatially within an attachment point hierarchy. Use a Jungle Core Layout to drive them.
| Type |
Description |
GridLayoutStrategy |
Arrange in rows and columns. |
CircularLayoutStrategy |
Arrange in a circle around a center. |
FanLayoutStrategy |
Arrange in a fan/arc (cards in hand). |
LinearLayoutStrategy |
Arrange in a line along an axis. |
StackLayoutStrategy |
Stack vertically with configurable offset. |