---
title: "1.3 - Grabbable GameObjects"
content_type: tutorial
url: "https://learn.unity.com/tutorial/1-3-grabbable-gameobjects?language=en"
language: en
difficulty: beginner
duration_minutes: 90
unity_version:
  - "6.3"
  - "6.2"
  - "6.1"
  - "6.0"
supported_unity_versions:
  - name: "6.3"
    url: "https://learn.unity.com/tutorial/1-3-grabbable-gameobjects.md?language=en&version=6.3"
  - name: "6.2"
    url: "https://learn.unity.com/tutorial/1-3-grabbable-gameobjects.md?language=en&version=6.2"
  - name: "6.1"
    url: "https://learn.unity.com/tutorial/1-3-grabbable-gameobjects.md?language=en&version=6.1"
  - name: "6.0"
    url: "https://learn.unity.com/tutorial/1-3-grabbable-gameobjects.md?language=en&version=6.0"
  - name: "2022.3"
    url: "https://learn.unity.com/tutorial/1-3-grabbable-gameobjects.md?language=en&version=2022.3"
  - name: "2021.3"
    url: "https://learn.unity.com/tutorial/1-3-grabbable-gameobjects.md?language=en&version=2021.3"
last_updated: "2026-08-04T14:24:29.000Z"
---

# 1.3 - Grabbable GameObjects

Configure VR objects for basic grab and throw interactions so users can pick up and toss items in the scene.

In this lesson, you will learn how to configure objects for basic grabbable interactivity in VR. By the end of this lesson, users will be able to pick up objects in the scene and throw them around.

This lesson is part of the [Create with VR course](https://learn.unity.com/course/create-with-vr).

## Choose hand models

One of the first things users often do in VR is look for their hands—it's a natural way to feel more present and understand your place in the virtual world.

Instead of using basic spheres to represent the hands, you can choose custom 3D models that look and move more like real hands. This small change can significantly boost immersion and help users feel more connected to the experience.

[Video](https://connect-mediagw.unity.com/h1/20250912/videos/c898253d-4e5d-4e9c-b585-3f304c7ab4b8_1.3.1.mp4)

**1.  Browse options for hand models:**

- In the **Project** window, open the **\_Course Library** > **\_Prefabs** > **VR** > **Hands** folders, then determine which **VR_Hand** option you prefer.

**2.  Assign a model to your left hand:**

- In the **Hierarchy** window, disable the **XR Origin (VR)** > **Left Hand Controller** > **LeftSphere** GameObject.
- Drag and drop your **Hand_Left** prefab of choice into the **Hierarchy** window as a child GameObject of the **Left Hand Controller** GameObject.

**3.  Assign a model to your right hand:**

- In the **Hierarchy** window, disable the **XR Origin (VR)** > **Right Hand Controller** > **RightSphere** GameObject.
- Drag and drop your **Hand_Right** prefab of choice into the **Hierarchy** window as a child GameObject of the **Right Hand Controller** GameObject.

When you test your app, you should now see the hand models you selected instead of grey spheres.

If your hand models appear in the wrong position, make sure the **Position** property of their **Transform** component is set to **X** = **0**, **Y** = **0**, and **Z** = **0** in the **Inspector** window.

![](https://connect-mediagw.unity.com/h1/20250912/learn/images/bf7445b3-e923-40b8-a55b-f6918227c0ec_HandModels.png)

## Add a grabbable GameObject

Now that you can see your VR hands, you should add GameObjects to grab with them.

[Video](https://connect-mediagw.unity.com/h1/20250922/videos/8fc90bef-468a-4629-a585-90299bb02ae4_1.3.2.mp4)

**1.  Add a ball to the scene:**

- Open the **\_Course Library** > **\_Prefabs** > **Objects** > **Sports** folders.
- Drag a **Ball** GameObject onto an accessible surface in the room.

**2.  Make the ball grabbable:**

- Add an **XR** **Grab** **Interactable** component to the **Ball** GameObject. The **XR** **Grab** **Interactable** component lets GameObjects be picked up and moved around in VR.

**Note**: This will automatically add a **Rigidbody** component to the **Ball** GameObject as well. The **Rigidbody** component enables GameObjects to be affected by physics, like gravity and collisions.

**3.  Test your grabbable GameObject:**

- Use the **Move tool** to reposition the **XR Origin** **(VR)** GameObject to be in front of the table with the grabbable **Ball** GameObject.
- Enter Play mode
- Test grabbing the **Ball** GameObject by aiming your ray at it and pressing the **Grip** button.
- Exit Play mode.

**4. Bring the grabbed GameObject to your hand:**

You have the option to to pull distant GameObjects towards you in VR, simulating a "force pull" effect.

- Select the **Right Hand Controller** > **Right Ray Interactor** GameObject.
- In the **XR Ray Interactor** component, enable **Force Grab**.
- Do the same for the **Left Hand Controller** > **Left Ray Interactor** GameObject.

You’ll now be able to pull distant GameObjects towards you in VR, simulating a "force pull" effect when you aim your ray and press the **Grip** button

![](https://connect-mediagw.unity.com/h1/20250912/learn/images/f58a3475-6a87-4d55-aab6-c6c34a65749b_ForceGrabActive.png)

**5.  Make sure that the GameObject is the correct scale:**

Getting the scale right in VR is crucial because it makes the virtual environment feel realistic and comfortable to the user. Unity works in meters by default, so you can use that knowledge to make sure that GameObjects in the scene are the correct size.

- In the **Hierarchy** window, create a new **3D Object** > **Cube** GameObject, and rename it “Measuring Stick”.
- Research the correct official diameter of the ball you chose and then convert the dimensions you found into meters.
- In the **Measuring** **Stick** GameObject’s **Transform** component, set the **Scale** property’s **X** and **Z** values to **0.01** and the **Y** value to the length you calculated.
- Position the **Measuring** **Stick** GameObject next to your **Ball** GameObject to make sure it’s accurately sized. If it isn’t, use the **Scale** tool to correct it.

You should now be able to pick up the **Ball** GameObject using the **Grip** button, and release the **Grip** button to throw it.

**Note:** If you’re using the **XR Interaction Simulator** GameObject**,** you can toggle a controller with ‘**\[**‘ or ‘**\]**’, rotate it to point at a GameObject by holding the middle mouse button, then press and hold **G** to grab and hold the GameObject.

## Hide hands and disable anchor control

Currently, there are two main issues with the grab function in your scene: first, the hand model overlaps with  the GameObject you’re holding, making it awkward to interact with the scene; second, when grab is enabled and you move the thumbstick, the grabbed GameObject rotates in your hand unintentionally.

Let’s fix these problems.

[Video](https://connect-mediagw.unity.com/h1/20210309/videos/160026c6-5231-4824-93d7-d87a9e86b672_1_3_3_v2.mp4) ([Transcript (en)](https://connect-mediagw.unity.com/h1/20210331/941ed28b-0624-4e87-85e9-285396c3c481_1_3_3_v2.vtt))

**1.  Disable the Manipulate Attach Transform control:**

- In the **Hierarchy** window**,** select the **Left Ray Interactor** GameObject**.**
- In the **XR** **Ray** **Interactor** component, disable the **Manipulate Attach Transform** property

**2.  Hide the hand model when you grab something:**


- In the **XR Ray Interactor** component, use the foldout (triangle) to expand the **Interactor Events** section.
- In the **Select Entered Event** property, select the **Add** (**+**) button.
- Drag the **Hand_Left** prefab from the **Hierarchy** window into the box.
- Open the dropdown and select **GameObject** > **SetActive(Bool)** to hide the hand when you grip.

![](https://connect-mediagw.unity.com/h1/20250912/learn/images/cd97170f-aaf0-4e44-b3c6-ed6b96175f9c_SelectInactive.png)

**3.  Show the hand model when you let go:**


- In the **Select Exited Event** property, select the **Add** (**+**) button.
- Drag the **Hand_Left** prefab from the **Hierarchy** window into the box.
- Open the dropdown and elect **GameObject** > **SetActive(Bool)** and make sure the checkbox is enabled to show the hand again.

![](https://connect-mediagw.unity.com/h1/20250912/learn/images/c30351a4-25f3-4682-902b-5ab63cf534fd_SelectActive.png)

**4.** **Repeat for the other hand:**


- Follow these same steps for the **Right Ray Interactor** GameObject.



Your hand models will now hide when you pick up a GameObject and reappear when you release it.

## Fine-tune the throwing experience

Currently, you can grab and throw the ball, but there are a few small adjustments that can make its behaviour more realistic.

[Video](https://connect-mediagw.unity.com/h1/20250912/videos/733f6e30-5a47-4c4f-bdad-44ca36a310cd_1.3.4.mp4)

**1.  Make the ball bouncy:**

- In the **Ball** GameObject’s **Sphere** **Collider** component, locate the **Material** property.
- Select the **Material** picker (**⊙**) and select one of the provided **Physics** **Materials**.

![](https://connect-mediagw.unity.com/h1/20250912/learn/images/1d1370e2-669c-4083-940b-7ab5592290d5_SphereCollider.png)

**2.  Prevent a dropped GameObject from going through the floor:**

- In the **Ball** GameObject’s **Rigidbody** component, set the **Collision Detection** property to **Continuous Dynamic**.

![](https://connect-mediagw.unity.com/h1/20250912/learn/images/4217e95a-8d14-4e2f-9fe9-c967cfbb97ee_ContinousDynamic.png)

The **Collision Detection** property controls how collisions are calculated and resolved during gameplay, affecting how accurately GameObjects detect and respond to collisions. Below is an explanation of the different options:

- **Discrete:** Fast and simple, but can miss collisions with fast GameObjects.
- **Continuous:** Prevents fast GameObjects from passing through others.
- **Continuous Dynamic**: Like **Continuous** but also checks fast-moving GameObjects against each other.

**3.  Allow the ball’s Rigidbody component’s physics to work while in your hand:**

- In the **Ball** GameObject’s **XR** **Grab** **Interactable** component, ensure that the **Movement Type** property is set to **Kinematic**.

The **Movement Type** property determines how a GameObject moves when grabbed in VR. Below is an explanation of the different options:

- **Kinematic**: The GameObject is moved directly to match the interactor’s position, ignoring physics forces for a stable and predictable grab.
- **Velocity Tracking**: The GameObject’s **Rigidbody** component uses calculated forces to move it towards the interactor’s position, creating more physically accurate motion.
- **Instantaneous**: The GameObject instantly snaps to the interactor’s position, regardless of how fast or slow the motion is.



In this step, you set it to **Kinematic** for precise control and stable grabbing behavior.

**4.  Smooth the motion of the GameObject:**

- In the **Ball** GameObject’s **XR** **Grab** **Interactable** component, enable the **Smooth Position** and **Smooth Rotation** properties.

![](https://connect-mediagw.unity.com/h1/20250912/learn/images/57e5fd1b-06f9-4bb2-9f10-cb89bbae702d_MovementKinematic.png)

The ball should now bounce, not fall through the floor, and move smoothly in your hand.

## Add a GameObject with a handle

You’ve added a **Ball** GameObject that’s held at its center and where orientation is not important. Next you’ll add a GameObject that’ll be grabbed at a very particular point and orientation.

[Video](https://connect-mediagw.unity.com/h1/20250912/videos/3eb17f56-24d1-4637-abcf-ad4313a1cc40_1.3.5.mp4)

**1.  Add a sports racket, paddle, or bat into the scene:**

- Open the **\_Course Library** > **\_Prefabs** > **Objects** > **Sports**
- Drag one of the sports implements onto the surface next to the ball.

**2.  Make the new GameObject grabbable:**

- Select the new GameObject and add an **XR** **Grab** **Interactable** component to it.
- In the **XR** **Grab Interactable** component, enable both the **Smooth Position** and **Smooth Rotation** properties to decrease jitter.
- In the **Rigidbody** component (which was added automatically), open the **Collision Detection property** dropdown and select **Continuous Dynamic** to prevent the GameObject from going through the floor.

**3.  Create a specific attach point for the GameObject:**

- In the **Hierarchy** window, right-click the new GameObject and create an empty child GameObject.
- Rename this empty child GameObject “Attach”.
- Reposition and rotate the **Attach** GameObject so that it matches the position and orientation your hand model should be when you grab the new GameObject.

**4.  Assign the attach point to your sports implement:**

- In the **Hierarchy** window, re-select the parent sports GameObject.
- In the **XR** **Grab** **Interactable** component, locate the **Attach Transform** property.
- Drag and drop your new **Attach** GameObject to assign it to the **Attach** **Transform** property.

You should now be able to grab the sports implement GameObject by the handle and hit the **Ball** GameObject with it.

## Organize the Hierarchy window

Before you get too many GameObjects in the **Hierarchy** window, it’s good to set up an organizational system for your GameObjects. This will help you manage your GameObjects and scenes as the project scales up.

[Video](https://connect-mediagw.unity.com/h1/20250912/videos/ea734636-acca-4b85-b84d-f0a71e301679_1.3.6.mp4)

**1.  Make organizer GameObjects in your Hierarchy window:**

- In the **Hierarchy** window, create new empty GameObjects named “XR,” “LIGHTING”, “STATIC,” and  “DYNAMIC,”
- Reset all of their **Transform** component’s **Position** properties to **X** = **0**, **Y** =  **0**, and **Z** = **0**.

**2.** **Organize your GameObjects into categories:**

- Drag GameObjects from the **Hierarchy** window onto the organizer GameObjects - the advantage of this technique is that it keeps your **Hierarchy** window nice and neat.
- Alternatively, drag your GameObjects underneath these organizer GameObjects - the advantage of this technique is that it keeps your GameObjects easily accessible.

## Recap

[Video](https://connect-mediagw.unity.com/h1/20210322/videos/583c2893-4205-418d-a1cd-011b42f1d3b9_1_3_recap_v1.mp4) ([Transcript (en)](https://connect-mediagw.unity.com/h1/20210331/9fd12fc2-a10c-4f5a-ac49-491bc7822a91_1_3_recap_v1.vtt))

**New features:**

- Hand models
- Simple, grabbable ball
- Grabbable tool with attach point
- Organized **Hierarchy** window

**New concepts and skills:**

- Unity vs real-world scale
- Grabbable GameObject properties
- Collision detection modes
  - (discrete, continuous, and continuous dynamic)
- Movement types
  - (kinematic, instantaneous, and velocity-tracking)

**Next lesson:**

- Sockets

## Extensions _(Optional)_

If you want to further develop your skills, explore new concepts, and improve your project, check out some of the optional extension activities below.

Each one is tagged as \[Easy\], \[Medium\], \[Difficult\], or \[Expert\] and will also include a \[Requires Programming\] tag if some coding is required.

**1.  Fill your room with GameObjects \[Easy\]:**

Add fun decorative and grabbable GameObjects to your scene to make it feel more interactive, even if those GameObjects aren’t fully functional yet:

- Browse through the **\_Course** **Library** > **\_Prefabs** > **Objects** folders for ideas.

![](https://connect-mediagw.unity.com/h1/20250912/learn/images/af42308f-7539-4293-a97f-d195af99c5a7_ObjectsInRoom.png)

**2.  Experiment with the grab interactable properties \[Easy\]:**

Add a new grabbable GameObject to your scene and experiment with the various properties of the **XR** **Grab** **Interactable** component, including the following:

- **Movement type:** **Kinematic**, **Instantaneous**, and **Velocity** **Tracking**.
- **Smooth Position/Rotation Amount** and **Tighten Position**.

**Throw** **On** **Detach** properties.

**3.  Add a magnifying glass \[Difficult\]:**

Add a functional magnifying glass to your scene that you can pick up and use to examine GameObjects:

- You could use a **Camera** **Render** **Texture** similar to the way the mirror works.
- Don’t worry if the ray gets in the way - that will be resolved when you can toggle the rays on and off

[Video](https://connect-mediagw.unity.com/h1/20250912/videos/2906bbe5-77c1-448f-90d8-31e5ca3e6675_1.3_Ext_Magnify.mp4)

**4.  Add a notebook that swings open \[Expert\]:**

Add a notebook with a front cover that swings open when you grab it:

**Hint:** The **Notebook_Cover** GameObject needs a [hinge joint](https://docs.unity3d.com/Manual/class-HingeJoint.html) with its **Connected Body** property set to the **Notebook** GameObject’s **Rigidbody** component.

- If you want, try adding some text to the notebook.

[Video](https://connect-mediagw.unity.com/h1/20250912/videos/b4131cc8-255c-4deb-84bc-5cd3b97cc55b_1.3_Ext_SwingHinge.mp4)
