Skip to content

CVR Pickup Object

Add this component to configure a GameObject as a pickup. Players can grab pickup objects with their hands. At runtime the component derives from Pickupable and adds a Rigidbody (kinematic if missing) plus a CVRSharedPhysicsController on awake.

int. Schema version; LATEST_VERSION = 1. Older pickups are migrated by ConfigureOlderPickups: when updateWithPhysics is false or gripType == Origin, moveMode is forced to Transform; a maximumGrabDistance of 0 is upgraded to 100.

bool. When true, the item auto-holds once grabbed instead of being released when the grab input is released.

bool. Prevents other players from grabbing the pickup while it is already in someone else’s hand. Owner grace: the original owner can still pick it up. Objects grabbed longer than 0.4s are transferred smoothly on network sync.

bool. Disables push/pull on the pickup while held. Only relevant when gripType == Free.

bool. Prevents the telepathic grab (flinging the object into the hand).

float. Maximum distance in metres at which the pickup can be grabbed. In desktop mode, an extra 1.5 * playSpaceScale is added. Clamped to [0, 100]. Default 5.

GripType enum:

  • Free (default) — the object stays where it is and is not moved to the player’s grip location.
  • Origin — the object is moved so that its Grip Origin aligns with the hand.

Only Free allows object rotation and push/pull.

Transform. Pose used when gripType == Origin. In desktop mode, if a child transform named [Desktop] exists under gripOrigin, it is used instead (letting you author a different desktop pose).

List<SnappingReference>. Each entry has:

  • referencePoint — transform on the pickup that lines up with a snapping point.
  • allowedType — string filter matched against CVRSnappingPoint.type.
  • target — local offset applied when snapped.
  • distance — maximum distance at which snapping activates (default 9999).
  • point — cached CVRSnappingPoint reference.

Entries are registered with CVRSnappingPointManager while the pickup is held.

bool. Legacy flag (default true). If false on version 0 data, the pickup is migrated to MoveMode.Transform.

MoveMode enum:

  • Rigidbody (Physics) — default. Uses RigidbodyPickupHandler.
  • Transform (Update)UpdatePickupHandler. Writes the transform directly instead of applying physics.

CollisionWithPlayer enum:

  • DisableWhileHeldAndColliding — disable pickup/player collisions while held and currently colliding (default).
  • DisableWhileHeld — disable for the whole held duration.
  • DontDisable — never disable.

float. Multiplier applied to hand-motion velocity on drop. Default 1.5.

float. Minimum hand velocity before a throw is considered. Default 1.

Transform. Optional transform used as the IK target for hand posing while held.

  • CanPickup — true when pickupable, active, collider present and enabled, and (when theft is disallowed) not currently held by a different owner.
  • IsAutoHold, DisallowTheft, IsTelepathicGrabAllowed, IsObjectRotationAllowed, IsObjectPushPullAllowed, IsObjectUseAllowed, RootTransform, MaxGrabDistance, MaxPushDistance — overrides of Pickupable behaviour derived from the fields above.
  • Initialized — true once Start has completed.
  • IsTelepathicGrabbed — true while a fling / telepathic grab is active.
  • GrabStartTimeTime.time when the current grab started.
  • GetTimeSinceGrabStart() — convenience elapsed time.
  • SetRespawnLocation(Vector3, Quaternion) — override the respawn pose.
  • SetRespawnHeight(float) — override the Y threshold below which the pickup resets.
  • ResetLocation() — teleport back to the saved pose and zero velocity (drops if held by you).
  • SetAutoHold(bool), ForceRelease(), ForcePickup() — runtime controls.
  • FlingTowardsTarget(ControllerRay) — start a physics- or direct-fling coroutine for telepathic grab.
  • ResetFlungStatus() — clear the flung / telepathic flag.

CVR-GameFiles/ABI.CCK.Components/CVRPickupObject.cs, CVR-GameFiles/ABI.CCK.Components/CollisionWithPlayer.cs, CVR-GameFiles/ABI.CCK.Components/SnappingReference.cs