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.

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:

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.

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.

  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>();    

  }

Last updated