This site has been permanently archived. The content on this site was last updated in 2019.
Unreal Motion Controller Support
Stay organized with collections
Save and categorize content based on your preferences.

Daydream offers motion controller support for Unity and Unreal. These features
include:
Controller visualization: A 3D model of the Daydream controller that
displays which button the user is currently pressing and where the user is
currently touching the Daydream controller's touchpad.
Laser and reticle visualization: Displays a laser and reticle so the
user can easily interact with the VR environment.
Arm model: A mathematical model to make the 3D controller model in VR
approximate the physical location of the Daydream controller.
Input System: A standard and extensible framework for raycasting from
the controller model. The input system integrates with the laser and reticle
visualization to make it easy to interact with the UI and other objects in
VR.
All visualization elements are optional and reskinnable.
Controller support in Unreal
Currently this functionality is only available in
Unreal with Google VR.
Motion Controller with visualization support
- Enable the Google VR Motion Controller plugin.
(instructions).
- Open the Blueprint for the Player Pawn.
- Add the
GoogleVRMotionController
to the Components list at the same level
as the VR Camera root.
- Modify the properties on the
GoogleVRMotionController
Component to adjust
it.

Cardboard apps should use UGoogleVRGazeReticleComponent
instead, for a
gaze-based reticle.
Motion Controller without visualization support
Use the official
Unreal MotionControllerComponent.
- Open the Blueprint for the Player Pawn.
- Add the
GoogleVRPointerInput
Component to the Blueprint.
- Use the
GoogleVRPointerInput
Component's API to listen and react to events
triggered by the pointer.
- If desired, subclass the
GoogleVRPointerInput
Component in C++ to add
additional events, to add custom processing of the raycast, or to override
the raycast implementation.
The GoogleVrPointerInput
Component works with both GoogleVRGazeReticle
and
GoogleVRMotionController
. It is also integrated with UE4 Widgets, allowing you
to interact with the standard UE4 UI with the pointer.
To respond to events generated by the GoogleVRPointerInput
Component, use the
interfaces IGoogleVRActorPointerResponder
and
IGoogleVRComponentPointerResponder
in either C++ or Blueprint.
Adjusting the Arm Model
Blueprint:
- Open your Player Pawn Blueprint.
- Create a node, and search for the term "ArmModel” to see what tuning
parameters are available.
- Attach the node to the
BeginPlay
event.
C++
- Add
#include "GoogleVRControllerFunctionLibrary.h"
to your code.
- Include
GoogleVRController
as a dependency in your Build.cs
file.
Call tuning functions, for example:
UGoogleVRControllerFunctionLibrary::SetArmModelPointerTiltAngle(20.0f);
Disabling the Arm Model
You can disable or enable the Arm Model by calling the function
SetArmModelEnabled
either in a Blueprint or in code as described in the
“Adjusting the Arm Model” section of this document. If disabled, the
MotionControllerComponent
will behave the same as it did the previous version
of Unreal, in that orientation will change based on the controller.

All rights reserved. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2024-10-09 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-10-09 UTC."],[[["\u003cp\u003eDaydream provides motion controller visualization, laser/reticle display, arm model, and input system features for both Unity and Unreal Engine.\u003c/p\u003e\n"],["\u003cp\u003eUnreal developers can integrate motion controller visualization using the \u003ccode\u003eGoogleVRMotionController\u003c/code\u003e component and handle input events using the \u003ccode\u003eGoogleVRPointerInput\u003c/code\u003e component.\u003c/p\u003e\n"],["\u003cp\u003eThe arm model's behavior in Unreal Engine can be adjusted or disabled through Blueprint or C++ by calling specific functions within the \u003ccode\u003eGoogleVRControllerFunctionLibrary\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eDaydream supports both gaze-based interactions with \u003ccode\u003eUGoogleVRGazeReticleComponent\u003c/code\u003e and motion controller interactions with \u003ccode\u003eGoogleVRMotionController\u003c/code\u003e for varied user experiences.\u003c/p\u003e\n"]]],["Daydream offers motion controller support in Unreal, featuring controller visualization with button and touchpad feedback, a laser and reticle, and an arm model for realistic positioning. An extensible input system facilitates raycasting and UI interaction. Users can enable the motion controller plugin, add components to the Player Pawn Blueprint, and modify properties. The arm model is adjustable and optional, with the ability to disable it. Developers can respond to pointer events through provided interfaces in C++ or Blueprint.\n"],null,["# Unreal Motion Controller Support\n\nDaydream offers motion controller support for Unity and Unreal. These features\ninclude:\n\n- **Controller visualization:** A 3D model of the Daydream controller that\n displays which button the user is currently pressing and where the user is\n currently touching the Daydream controller's touchpad.\n\n- **Laser and reticle visualization:** Displays a laser and reticle so the\n user can easily interact with the VR environment.\n\n- **Arm model:** A mathematical model to make the 3D controller model in VR\n approximate the physical location of the Daydream controller.\n\n- **Input System:** A standard and extensible framework for raycasting from\n the controller model. The input system integrates with the laser and reticle\n visualization to make it easy to interact with the UI and other objects in\n VR.\n\nAll visualization elements are optional and reskinnable.\n\nController support in Unreal\n----------------------------\n\nCurrently this functionality is only available in\n[Unreal with Google VR](/vr/unreal/download).\n\nMotion Controller with visualization support\n--------------------------------------------\n\n1. Enable the **Google VR Motion Controller** plugin. ([instructions](https://docs.unrealengine.com/latest/INT/Platforms/GoogleVR/Daydream/#motioncontrollers)).\n2. Open the Blueprint for the Player Pawn.\n3. Add the `GoogleVRMotionController` to the Components list at the same level as the VR Camera root.\n4. Modify the properties on the `GoogleVRMotionController` Component to adjust it.\n\nCardboard apps should use `UGoogleVRGazeReticleComponent` instead, for a\ngaze-based reticle.\n\nMotion Controller without visualization support\n-----------------------------------------------\n\nUse the official\n[Unreal MotionControllerComponent](https://docs.unrealengine.com/latest/INT/Platforms/GoogleVR/Daydream/).\n\nInput system\n------------\n\n1. Open the Blueprint for the Player Pawn.\n2. Add the `GoogleVRPointerInput` Component to the Blueprint.\n3. Use the `GoogleVRPointerInput` Component's API to listen and react to events triggered by the pointer.\n4. If desired, subclass the `GoogleVRPointerInput` Component in C++ to add additional events, to add custom processing of the raycast, or to override the raycast implementation.\n\nThe `GoogleVrPointerInput` Component works with both `GoogleVRGazeReticle` and\n`GoogleVRMotionController`. It is also integrated with UE4 Widgets, allowing you\nto interact with the standard UE4 UI with the pointer.\n\nTo respond to events generated by the `GoogleVRPointerInput` Component, use the\ninterfaces `IGoogleVRActorPointerResponder` and\n`IGoogleVRComponentPointerResponder` in either C++ or Blueprint.\n\nAdjusting the Arm Model\n-----------------------\n\n### Blueprint:\n\n1. Open your Player Pawn Blueprint.\n2. Create a node, and search for the term \"ArmModel\" to see what tuning parameters are available.\n3. Attach the node to the `BeginPlay` event.\n\n### C++\n\n1. Add `#include \"GoogleVRControllerFunctionLibrary.h\"` to your code.\n2. Include `GoogleVRController` as a dependency in your `Build.cs` file.\n3. Call tuning functions, for example:\n\n UGoogleVRControllerFunctionLibrary::SetArmModelPointerTiltAngle(20.0f);\n\nDisabling the Arm Model\n-----------------------\n\nYou can disable or enable the Arm Model by calling the function\n`SetArmModelEnabled` either in a Blueprint or in code as described in the\n\"Adjusting the Arm Model\" section of this document. If disabled, the\n`MotionControllerComponent` will behave the same as it did the previous version\nof Unreal, in that orientation will change based on the controller."]]