Interactions
Object behaviors are components that allow an object to behave in a specific way. These behaviors use the Unity Physics module to make interactions more natural, especially in a VR environment. They have two modes: Normal and Expert (Debug is for developers only). You can activate the Expert Mode by checking the toggle in the right corner of the component you are using; the expert fields will be highlighted in blue, the debug ones in yellow. The expert mode allows you to modify special properties of the component, for a more precise interaction. The green Interactable button makes the component interactable or not.
The Interactions components require a Rigidbody and a Collider to work properly.
The following components are documented in this section: WEAVR Object · Interaction Point · Connectable · Executable · Door · Door Lock · Push Button · Switch · Knob · Path Movement · Screwable · Paintable · Brush
Stateful Behaviors

In some interactions like a Door or a Push Button, you will find so-called "States". States identify a certain position/rotation of the GameObject. Taking a Door as an example, we have two states: the OPEN state which represents the position/rotation of the open door, and the CLOSED state which represents the position/rotation of the closed door. For the door to work properly we need to set these two states. In the case of a door or a push button we will only have two states, but in the case of a switch we could have more than 2 states. The state has a Normal and an Expert mode; the green highlighted state is the current one.
| Property | Function |
|---|---|
| Name | The state's name ("Closed" in the picture above) |
| (position/rotation button) | Change the object's position/rotation according to the ones saved in this state |
| (save button) | Save the position/rotation of this state |
| Stable | If enabled, the object will hold the position once reached |
| Events | Enable Unity Events |
| Reset Timer | If NOT stable, indicates how long it takes for the object to return to the default state |
| On Enter / Exit Audio Clip | Audio Clip |
| On State Enter / Exit / Hold | Unity Events |
WEAVR Object

The object's mass affects its behavior when grabbed.
The WEAVR Object component enables you to pick up an object. You need to set the object's layer to Grabbable to grab an object.
| Property | Function |
|---|---|
| Name | Object's name, used to identify the object inside the scene in play mode |
| Is Grabbable | Whether the object can be grabbed or not |
| Mass | Object's mass |
| Grab Options (Enabled by Grabbable option) | Easy Grab = Makes objects easier to grab, although the hand animation will be less precise and sometimes may cause object jittering during grabbing operation. Can Collide = The grabbed object will collide with other objects. Move if Kinematic = The grabbed object will move even if it is kinematic. |
| Break Force | Force needed to lose the object or the grip |
| Handling Type | How you should take the object: No Restriction, One hand, right, left, both hands |
| Hand Poses | Define custom hand poses for your object. View hand in scene. Switch between left/right hand. Radius = hand interaction radius |
| Interaction Points | Interaction Points related to this object. You can change range and short range of it. View and modify range inside the scene. Select this interaction point inside the scene |
| Hover Color | The color to outline the object when hovering it |
| Keep Children Steady | If true, the children interactable objects will stitch to this object |
| Audio Source | Audio Source to be triggered when grabbing the object |
| On Grab / On Release | Unity Events |
Interaction Point

Point of interaction of the object. It can be attached to the main object or to a child.
| Property | Function |
|---|---|
| Range | Range in which you can interact with the object. Edit range with sphere handles inside the scene |
| Scan Triggers | If true, the trigger colliders will be considered when scanning for objects in range |
| Only Interactive Objects | If true, only interaction objects will be considered in range |
| Short Range | A smaller range of interaction |
| Layer Mask | Select the layer of the objects you want to interact with |
| On Range Enter / Exit | Unity Events |
| On Short Range Enter / Exit | Unity Events |
Connectable

To set up a Connectable you can either:
- Use the wizard by drag and drop the GameObject of your choice in the green box.
- Manually create a Connection Point with Add Point and then setup all its properties.
- Automatically create a Connection Point with Fix Point with default properties: this point will have a "sibling" connectable that will move accordingly. Furthermore, if the object is in range (its label will be yellow) the 2 objects will start connected.
The Connectable component connects two game objects together. To connect successfully, both objects need to have at least a child with an Interaction Point component on it.
| Property | Function |
|---|---|
| Break Force For Sockets | The Force required to break the connection between a socket and a connector. The minimum force will be considered between the two connectables |
| Break Force for Connection | The Force required to break the connection between two connectors. The minimum force will be considered between the two connectables |
| Ghost Movement | If true, this object can move through other objects to reach its destination |
| Preview Transparency | If the preview is enabled, how transparent the previewed object should be |
| Connection Points | Manage the Connection Point (CP) related to this object. Create a new CP by clicking the apposite button and selecting an Interaction Point from the list |
Connection Points Structure
| Field | Function |
|---|---|
| Interaction Point | Each CP has an Interaction Point |
| Type | Whether this connection point is a connector or a socket |
| Object Class | Component tag that connects behaviors. Create a new one by inserting a new name and pressing ENTER key |
| Valid Classes | Select the object that can connect to other objects which have a defined Object Class. Add new one by clicking the [+] on the right corner and selecting a class from the list |
Remove the CP by clicking the [X] next to the Interaction Point.
CP Options
Customize how CP interact with another object (the displayed options depend on the CP type [Socket or Connector]).
| Option | Function |
|---|---|
| AutoConnectInRange | When the "Connector" object is released in range, it will automatically reach the "Socket" and connect |
| AlignAxis | When the "Connector" object should connect, it will automatically align its axis to "Socket's axis" |
| ShortRangeForceConnect | When "Connector" object enters a short range, it forcibly and automatically connects |
| PreviewConnection | The "Connector" object will be previewed as connected when in range |
| LockConnection | Once connected, the object can be disconnected only through a disconnect command |
| IsConnectedInRange | When in range, the connection is considered valid, even if the "Connector" is still grabbed |
| AllowGravity | When "Connector" object is connected, it will become affected by gravity |
| CanSlide | The "Connector" object can slide along a given axis for a given length |
| CanRotate | The "Connector" object can rotate around a given axis for given degrees |
CP Start Connected At [Connector Option]
Object from which the Connection Point will start connected.
| Field | Function |
|---|---|
| Connection | The point which coincides with the connection point |
| Far Point | The point representing the max distance/rotation from the connection point |
| Lock On Start Connected | If true, the movement will be locked once connected at the point |
CP Axis [Socket Option]
This axis is used both for options CanRotate and CanSlide as primary axis (for rotation and movement respectively).
The axis is relative to the Interaction Point.
CP Slide Settings [Socket Option — Enabled by CanSlide]
Define socket's distance and spring force.
| Field | Function |
|---|---|
| Disconnect On Distance | When the Connector reaches the specified point from connection point it can be disconnected |
CP Rotation Settings [Socket Option — Enabled by CanRotate]
Define socket's rotation angle and spring force.
| Field | Function |
|---|---|
| Disconnect On Angle Reached | When the Connector reaches the specified angle from the connection it can be disconnected |
CP On Connect/Disconnect
| Field | Function |
|---|---|
| Audio Clip | Audio On Connect / Disconnect |
| Unity Events | Connect / Disconnect |
| Connect / Disconnect Command | Customize icon and name of the command seen inside WEAVR Player |
The connectable may have an unexpected behavior if the rotation limits are set between [356, 359.9] degrees (and multiples of them).
Executable

The Executable component triggers generic actions when interacting with the object.
| Property | Function |
|---|---|
| Can Execute on Touch | Touching the object will execute the event |
| On Execute | Unity Event |
| Execute Command | Customize icon and name of the command seen inside the Player |
Door

To set up a Door:
- Save the Closed state.
- Move the Door's GameObject to the Open position, then save the state.
This component allows you to simulate different types of doors like a Hinge Door or a Slide Door. The door type is detected automatically from the two states you save: if the open and closed states differ only by rotation you get a Hinge Door, if they differ only by position you get a Slide Door.
| Property | Function |
|---|---|
| Door Type | Shows the type detected automatically from the states (Hinge Door or Slide Door) |
| Open Value | How much the door is open, from 0 (closed) to 1 (fully open) |
| Open Threshold | How far the door must open before it counts as "open" |
| Use Long Rotation | (Hinge doors) If enabled, the door opens the long way around, for example 270° instead of 90° |
| Closed / Open State | The two positions of the door: closed and open |
| Is Locked | Whether the door is locked. Works together with the Door Lock components |
| Door Locks | The Door Lock components linked to this door |
| Retrieve Locks | Click here to find and add all the Door Locks placed on the door's children |
| Min Locks to Open | How many locks must be unlocked before the door can open |
| Drag Resistance | How hard the door is to move or rotate |
| Snap Break Force | How much force is needed to detach the door once it is snapped fully open or fully closed |
| Ignore Collision in States | If enabled, the door ignores collisions with the colliders placed in its states |
| Force Opening Ignore Collision | Lets the door open through other objects during a procedure, ignoring collisions |
| Animate By Value | If enabled, the door is opened/closed using an animation instead of physics. Use the Create button to add the animation component, then assign an opening animation clip |
| Opening Audio Clip | Sound played while the door opens or closes |
| Opening Audio Threshold | How much the door must move before the opening sound is played again |
| Opening Duration | How long the door takes to open when opened from a procedure |
| On Fully Opened / On Fully Closed / On Locked Changed / On Open Value Changed | Unity Events triggered when the door is fully opened, fully closed, locked/unlocked, or its open value changes |
Door Lock
The Door Lock component defines the GameObject as a locking element of a door object. It must be on a Door's child active GameObject. It works with: Executable, Connectable, Push Button, Switch, Knob, and Screwable.
Push Button / Switch: The door lock retrieves the state's names (e.g., LOCKED and UNLOCKED) from the Push Button and Switch interaction. When the interaction is in the LOCKED state, the door is locked; otherwise it is UNLOCKED.
Connectable: The door lock retrieves the two states Connected and Disconnected from the Connectable interaction. When the interaction is in the Connected state, the door is unlocked; otherwise it is locked.
Executable: The door lock retrieves the state of the Executable interaction. When the interaction is executed, it locks and unlocks the object.
Screwable: The door lock retrieves the two states Screwed and Unscrewed from the Screwable interaction. When the interaction is in the Screwed position, the door is locked; otherwise it is unlocked.
Knob: The door lock is based on the value of the Knob interaction. When the knob has a value greater than the threshold the door is locked; otherwise it is unlocked.
Door Lock with Push Button
Door Lock with Connectable
Door Lock with Executable
Door Lock with Screwable
Door Lock with Knob

Push Button

To set up a Push Button:
- Save the Default Position.
- Move the Push Button's GameObject to the Down position, then save the state.
The Push Button component allows you to press the GameObject like a push button.
| Property | Function |
|---|---|
| Push Value | How much the button is currently pressed, from 0 (up) to 1 (fully down) |
| Apply Value On Start | If enabled, the button already starts at the Push Value you set when the scene begins |
| Allow Rotation | Lets the button turn slightly around its axis while it is pressed |
| Up / Down State | The two positions of the button: released (Up) and pressed (Down) |
| Ignore Collision in States | If enabled, the button ignores collisions with the colliders placed in its states |
| Down Exit Duration | How long (in seconds) you must keep the button pressed before it pops back up |
| Down Exit Distance | Once pressed, how far the button can still move before it returns to the Up position |
| Down Threshold | How far you must push before the button counts as "pressed" |
| Up Threshold | How far the button must come back before it counts as "released" |
| Spring Force | How strongly the button pushes itself back up |
| Damper Force | How much the return movement is slowed down, to avoid bouncing |
| Instant Commands | If enabled, the Player Press/Release commands switch the button instantly, without animation |
| Press / Release Command | Change the icon and name of the Press and Release commands shown in the Player |
| On Press / On Release / On Push Value Changed / On State Changed | Unity Events triggered when the button is pressed, released, its value changes, or its state changes |
Switch

To set up a Switch:
- Save the Default Position.
- Choose the Switch's type.
- Add a new state, move the GameObject to the desired position/rotation, save the state.
The Switch component allows you to interact with the GameObject like a switch.
| Property | Function |
|---|---|
| Type | The switch's type: Rotary or Linear |
| Use Reflex Angle | Whether your angle will be >180 degrees (Enabled by Rotary Switch) |
| Starting State | The state the switch is in when the scene begins |
| Distance Threshold | Distance threshold for state transition |
| Ignore Collision in States | If true, the collisions with colliders in the states will be disabled |
| Drag Resistance | Physical resistance to linear movement or rotation |
| States | Switch States. Click on "Add state" to create a new state. You can enable/disable them or even reorder them |
Knob

To set up a Knob:
- Save the Start Rotation.
- Choose the Max Rotation and the Local Axis.
The Knob component allows you to interact with the GameObject like a knob.
| Property | Function |
|---|---|
| Clockwise | Direction of rotation |
| Max Rotation | Maximum degrees of rotation the knob can perform starting from the initial rotation |
| Local Rotation Axis | Local rotation axis for the knob |
| Start Rotation | Initial rotation of the knob. Use the START button to save the rotation |
| Value | Current normalized rotation value |
| Rotation Degrees | Current rotation degrees |
| Drag Resistance | Physical resistance to rotation |
| Rotating Audio Clip | Audio clip that will play while rotating |
| On Value Changed | Unity Event |
| Raise Event On Stop | The event will be raised when the knob has stopped rotating and has assumed the new value |
| Raise Event Delay | Delay with which the event is launched after the stop |
Path Movement
The Path Movement component makes an object move along a path (a curve, called a spline). It is useful for objects that must follow a set track — for example a handle sliding along a rail, a lever, or a part that moves along a curved guide. The object can also follow an animation instead of a straight line.

| Property | Function |
|---|---|
| Spline Container | The spline (path) the object follows |
| Normalized Value | The object's position along the path, from 0 (start) to 1 (end) |
| Direction Constraint | Which way the object may move along the path: Both, only Forward, or only Backwards |
| Animation Clip | An optional animation the object follows along the path |
| Adapt Spline To Animation | If enabled, the path is shaped automatically to match the animation |
| Spline Points | How many points are used to shape the path when adapting it to the animation |
| Interpolation Factor | How quickly the object reaches the target value — a higher value makes it move more quickly |
| State Transitions | The states placed along the path, each with a start and end point and a progress value, used to react at specific points of the movement |
| States | The positions along the path saved as states |
| Command | Change the icon and name of the command shown in the Player |
Screwable
The Screwable component allows you to interact with the GameObject like a Screwable. Taking a screw to be tightened with a screwdriver as an example, we can identify 3 components:
- Screwable Tool — represents the tool, so the screwdriver.
- Screwable Hole — represents the hole where the screw will be inserted.
- Screwable Object — represents the screw.
The easiest way to set these up is the Screwable Wizard, which guides you through configuring the tool, the hole and the object step by step:
Screwable Tool

| Property | Function |
|---|---|
| Screwing Local Axis | Rotation axis for screwing relative to the interaction point |
| Tool Class | Screwable tool class |
| Valid Classes | Classes of screwables this tool can interact with |
| Disconnection Break Force | Force needed to break the connection |
Screwable Hole
| Property | Function |
|---|---|
| Valid Screwable Class | Align the closest screwable of chosen class |
| Fix the interaction point position according to unscrewed position of the closest screwable |
Screwable Object

| Property | Function |
|---|---|
| Screwable Options | Tool Needed = The object can only be screwed using a tool. Is Captive = The object is captive; it cannot be disconnected from its hole. Start Connected = When the game starts, the object is connected to the closest hole. |
| Rotations | Number of 360-degree rotations to screw the object |
| Screwed Value | Normalized screwing value. If a value is set before connection, the screwable will automatically reach that value on first connection |
| Screwed Position | Screwable state |
| Unscrewed Position | Screwable state |
| Screwable Class | Class of this object |
| Show Screwing Preview | Show preview prefab when screwing an object |
| Screwing Preview Prefab | The preview prefab |
| Disconnection Break Force | Force needed to break connection |
Paintable
The Paintable component marks a mesh so it can be painted at runtime (for example a wall to spray, a part to coat). The paint is stored per object and follows the real 3D shape, so painting one face never bleeds onto another; it works on opaque, transparent and custom-shader meshes, and the object's original material is left untouched (the paint is drawn as an overlay).
Mesh painting works in URP and requires the object to have a Mesh Renderer and Mesh Filter. The device must support compute shaders and 3D render textures.
| Property | Function |
|---|---|
| Resolution | Detail of the paint: Low, Medium, High or Max. Higher gives sharper paint but uses more memory. |
| Make All Children Paintable | If enabled, a Paintable is added automatically to every child mesh. |
| Coverage Threshold | How much color a spot must have to count as "painted" (0–1). Used by the paint coverage conditions. |
| Paint Visibility | How much the paint ignores scene lighting: 0 = fully lit, 1 = shows its true color everywhere (best visibility in shadow). |
| Lightweight Overlay | Uses a cheaper drawing mode (recommended on mobile / Quest). |
| Force Triplanar | Projects the paint texture in object space instead of using the mesh UVs (used automatically for meshes without UVs). |
| Paint Material | Optional material defining how the paint looks (color, normal, metallic, smoothness). A Brush carrying its own paint material overrides this at runtime. |
Brush
The Brush component is the tool that paints a Paintable. It paints while its paint colliders touch a paintable surface (no Rigidbody required, so any object can be a brush), on particle collision, or as a forward spray cone. Because the painting colliders are an explicit list, a grabbed brush can have a handle that does not paint and a tip that does.
| Property | Function |
|---|---|
| Paint Color | The color applied by the brush. |
| Eraser | If enabled, the brush removes paint instead of adding it. |
| Paint Material | Optional material whose base color (and look) is used for the paint. |
| Radius | Fallback size (world units) used for spray/particle painting and when a paint collider is not a simple shape. |
| Strength | How much paint is deposited (0–1). |
| Hardness | How sharp the painted edge is (0–1). |
| Paint Colliders | The colliders that actually paint. Leave empty to use the collider on this object; use child colliders (e.g. only the brush tip) so a handle collider does not paint. |
| Is Painting | When off, the brush does not paint. Toggle it at runtime (e.g. from a controller trigger) to control painting. |
| Is Spray | Paints along a forward cone (like a spray can) instead of on contact. |
| Spray Distance / Spray Angle | The reach and the half-angle of the spray cone. |
| Particle | An optional particle system used for the spray visuals; the brush can drive its cone, color and emission. |
| Spray Audio Clip | A sound looped while spraying (with smoothed fade in/out). |
| On Painting / On Painting Changed / On Effective Painting / On Effective Painting Changed | Unity Events fired while the brush is painting and when it actually deposits paint on a surface. |
The brush's options (color, radius, strength, spray, eraser…) can also be changed during a procedure with the Set Paint Brush action.