> For the complete documentation index, see [llms.txt](https://unity.progdocs.se/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://unity.progdocs.se/tillaeggspaket/xr-toolkit/controllers.md).

# Controllers

## Prefab (utseende)

Om du använder XR Origin-prefaben så syns dina kontroller som ett par generiska vita 3d-modeller i VR-rymden. Oavsett vilket kan du välja egna 3d-modeller att använda.

Expandera XR Origin och Camera Offset, och markera LeftHand Controller (eller RightHand Controller). Scrolla ner till "Model prefab". Lägg in den modell du vill använda.

De generiska vita 3d-modellerna finns under Assets → Samples → XR Interaction Toolkit → 2.4.3 → Starter Assets → Prefabs → Controllers.

## Kod

Nedanstående är den kod som du kan använda för att få saker att hända när spelaren gör olika saker med VR-handkontrollerna.

### ActionBasedController

Komponenten ActionBasedController innehåller referenser till alla actions för VR-handkontrollerna.

```csharp
using UnityEngine.XR.Interaction.Toolkit

public class InteractionController : MonoBehavior
{
  [SerializeField]
  private ActionBasedController controller;
}
```

#### Tips: Hämta referensen automatiskt

Genom att lägga scriptet på den VR-handkontroll vars inputs ska läsas av kan man slippa manuellt ange vilken komponent som ska läsas i Unity, och istället göra det enkelt med kod:

```csharp
using UnityEngine.XR.Interaction.Toolkit

public class InteractionController : MonoBehavior
{
  private ActionBasedController controller;
  
  private void Awake()
  {
    controller = GetComponent<ActionBasedController>();
  }
}
```

### Actions

ActionBasedControllern ger tillgång till de **actions** som en VR-handkontroll normalt avfyrar. Lägg till egna metoder till dessa actions för att köra egen kod som reaktion på dem.

För att det ska fungera måste metoderna ta emot en parameter med datatypen InputAction.CallbackContext, som finns i UnityEngine.InputSystem-biblioteket.

Kolla listan under **Action Based Controller (XR)**-komponenten i Unitys Inspector för att se vilka actions som finns.

```csharp
using UnityEngine.InputSystem;

// --- //

  private void Awake()
  {
    // --- //
    
    controller.activateAction.action.started += OnTriggerPress;
  }
  
  void OnTriggerPress(InputAction.CallbackContext context)
  {
    print("Trigger pressed");
  }
```

#### Värden

Många actions har tillhörande **värden** – till exempel kan man läsa av hur mycket avtryckaren är nedtryckt eller exakt var handkontrollen är just nu.

```csharp
  void OnTriggerPress(InputAction.CallbackContext context)
  {
    print("Trigger pressed");
    
    // Läser värdet från kontexten - dvs en trigger-tryckning
    float triggerValue = context.action.ReadValue<float>()
    
    // Läser ett värde direkt från controllern
    Vector3 controllerPosition = controller.positionAction.action.ReadValue<Vector3>();    

  }
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://unity.progdocs.se/tillaeggspaket/xr-toolkit/controllers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
