Release Notes

Upgrade Instructions

Current Known Issues

Google VR SDK for Unity v1.100 (October 2017)

Release notes for v1.100 are available on the GitHub releases page.

Google VR SDK for Unity v1.70 (July 2017)

Breaking Changes

  • Refactored Controller classes:
    • Deprecated GvrPointerManager. Its functionality has been moved to GvrPointerInputModule.
    • GvrArmModel is no longer a singleton and has been moved to the GvrControllerPointer prefab.
    • Renamed GvrController to GvrControllerInput. GvrController still exists for backwards compatibility.
    • GvrArmModelOffsets has been replaced by GvrFollowControllerPose. GvrArmModelOffsets still exists for backwards compatibility.
    • GvrControllerVisualManager has been replaced by GvrTrackedController. GvrControllerVisualManager still exists for backwards compatibility.
    • GvrLaserPointer has been de-coupled from the laser/reticle rendering code (which is now handled by GvrLaserVisual).
    • Tooltips have been removed from the GvrControllerPointer prefab. There are now prefabs for just tooltips.
    • Prefabs can be dynamically added to the controller visual by listing them in the attachmentPrefabs property on the GvrControllerVisual script.
    • RaycastMode is now set per-pointer instead of per-raycaster.


  • You can now simulate the controller in the Unity editor using the mouse.
    • Hold the shift key with the game view in focus to use the mouse. The controls are as follows:
      • Shift + move mouse: Change orientation.
      • Shift + left-click: ClickButton
      • Shift + right-click: AppButton
      • Shift + Middle mouse button: HomeButton/Recenter
      • Shift + Ctrl: IsTouching
      • Shift + Ctrl + Move Mouse: Change TouchPos
  • Added the ability to anchor the arm model to the local position of the head. This will be used for the standalone headsets so the arm model doesn't break with positional tracking.
  • Introduced a new experimental Hybrid raycast mode that combines Camera and Direct modes to make the Daydream controller work better in more complex scenes that include objects at many different depths and locomotion. The default raycast mode is still Camera.


  • We've updated the controller visualization. The new controller visual is both higher fidelity and more performant.
    • Removed the touch point and battery indicator.
    • Replaced controller assets and textures.
    • Added new simple tooltips.
  • The battery status UI is only displayed when the required library is available. Unity includes the required library as of Unity 5.6.2p1.
  • The GvrDaydreamApi.LaunchVrHome() API no longer requires that you first call GvrDaydreamApi.Create(). However, the Create() method still exists to give developers precise control over when the (expensive) instance creation happens. The Dispose() method remains as well, to allow developers to clean up unneeded memory. However, Dispose() is now called automatically upon OnApplicationPause(true). See class comments in GvrDaydreamApi for additional details.
  • Change DemoInputManger's default message to be less confusing when viewing its message canvas when the app is not running.
  • Included a few different improvements to scrolling in the Google VR SDK for Unity:
    • GvrPointerScrollInput no longer directly accesses GvrControllerInput. Instead, input is piped through GvrBasePointer just like it is for GvrPointerInputModule. This makes it possible for the scroll events to work cross-platform with custom GvrBasePointer implementations.
    • Added the ability to respond to Scroll Events globally in GvrAllEventsTrigger.
    • Added the ability to override scroll inertia settings on a per-GameObject basis by either implementing IGvrScrollSettings or using the script GvrScrollSettings.
  • Optimized GvrFps display by removing Canvas and replacing the Text component.
    • Renamed GvrFPSCanvas.prefab to GvrFPSDisplay.prefab.
  • Removed (unused) GvrDistortion.cginc.
  • GvrPointerPhysicsRaycaster no longer allocates memory every frame. It now uses RaycastNonAlloc/SphereCastNonAlloc. The size of the buffer for raycast hits is determined by the new serialized property maxRaycastHits.
  • It's now possible to use the pointer system with no main camera. A camera can be (optionally) specified on the overridePointerCamera field on GvrLaserPointer.
  • GvrDaydreamApi.LaunchVrHome() and Create() have new method signatures to communicate asynchronous implementation and to provide the caller with a way to know when the call has completed: GvrDaydreamApi.LaunchVrHomeAsync(Action<bool> callback), CreateAsync(Action<bool> callback).
  • Exposed TouchPosCentered, which remaps touchpad input from (-1, 1), centered on 0, and magnitude <= 1 (e.g. clamped to the circular touchpad)
  • Moved the Plugins folder underneath the GoogleVR folder so that future SDK upgrades are easier since the top level Plugins folder will no longer contain non-GVR and GVR content.
  • GVRVideoPlayerTexture no longer copies SurfaceTextures into Unity textures, but rather renders SurfaceTextures directly into the scene, optimizing it to use much less memory and GPU.
  • GVR Video Demo OBB sample video is now a stereo version of Big Buck Bunny.


  • Prevent serialized field properties in Google VR prefabs and scenes being set to null when editing them while build platform is not Android or iOS.
  • Fixed continuous calls to the Stop() method in the GvrAudioSource source.
  • Fixed a bug that caused the INTERNET permission to be added to the Android manifest unnecessarily when using the SDK.
  • GVRVideoPlayerTexture.SetDisplayTexture() now properly sets the display texture.
  • GvrBuildProcessor now ignores non-Google VR target build platforms.
  • Fixed a bug that would cause GvrReticlePointer to render behind things with a sort order > than 0.
  • Added support for tracking all of a scene's cameras (that target at least one eye) in GvrEditorEmulator.
  • Fixed audio not showing up in iOS native integration builds (issue 618).

Google VR SDK for Unity v1.60 (June 2017)


  • Added GvrCardboardHelpers.SetViewerParams to set the Cardboard viewer parameters from a URI.


  • GvrBuildProcessor no longer warns at build time if Player Settings > Virtual Reality SDKs contains the None device. At build time, the following checks are currently performed:
    1. Player Settings > Virtual Reality Supported must be enabled.
    2. When the selected build platform is Android, Player Settings > Virtual Reality SDKs must include Daydream or Cardboard.
    3. When the selected build platform is iOS, Player Settings > Virtual Reality SDKs must include Cardboard.
  • If an unsupported version of Daydream Keyboard is installed, you will be prompted to go to the Play Store to update it.


  • Fixed a bug where the controller emulator wasn't working on the latest Macbook Pro due to SystemInfo.graphicsDeviceID == 0. (issue)
  • Fixed a bug where GVRRecenterOnlyController did not work correctly in-editor.
  • Fixed a bug where Unity threw an exception when switching scenes.

Google VR SDK for Unity v1.50 (May 2017)

Important Changes

  • Versions of Unity older than 5.6 are no longer supported.
  • GvrViewerMain will be replaced by GvrEditorEmulator.
    • The editor preview is now mono, not stereo, but will still support simulated headtracking.
    • Instances of GvrViewerMain in scenes will change to GvrEditorEmulator. automatically. This will not affect on-device builds.
    • Be sure to follow the Upgrade Instructions to ensure a clean migration.


  • Daydream Keyboard is now supported in Unity.
    • Users need to update the keyboard app via the Play Store.
    • Includes an API similar to GvrController for ease-of-use.
  • Added distance attenuation feature to GvrAudioSoundfield.
  • Added SetScheduledStartTime and SetScheduledEndTime methods to GvrAudioSource.
  • Added spatial blend to audio sources to control the contribution of distance attenuation and doppler effects.
  • Changed the GvrAudioSource occlusion computation method to use a cached list to avoid dynamic memory allocation.


  • Fixed audio spatializer plugin registration issue in runtime on iOS. (issue)

Google VR SDK for Unity v1.40 (April 2017)


  • Daydream iOS development now supported in Unity 5.6.
  • Added controller battery indicator to GvrControllerPointer.
    • To use this feature dynamic library loading must be enabled and you must be using VrCore version 1.40 or later.
  • Added an API to GvrController to query controller battery state.
    • Updated controller visuals to include this feature in the demo scenes.
  • Added GvrBaseControllerVisual to easily inherit controller alpha fading.
  • Added GvrDaydreamApi and a method LaunchVrHome.
    • Added to GVRDemo when running on Daydream devices.
  • Added a build-time notification dialog if the user forgets to enable Daydream or Cardboard in 5.6.
  • GVRDemo and VideoDemo: Added support for runtime changes between Daydream View and Cardboard viewer.
  • ScrollingUIDemo: Added an Object pooling system as part of the Scrolling UI Demo for reusing pages instead of reallocating them. The tab named Pooled shows how to use it.


  • No longer supports VrCore versions earlier than 1.0.
  • Disabled reverb (room effects) cutoff at max rolloff distance for GvrAudioSources.
  • Removed the minimum time between down event and click event in GvrPointerInputModule. This guarantees that click events will always happen in the same frame as GvrController.ClickButtonUp.
  • GvrPointerInputModule now supports velocity and inertia for scroll events generated by touching the touch pad. Look at GvrPointerScrollInput for details.


  • Fixed a GvrAudioSoundfield rotation bug. (issue)
  • Fixed a GvrAudioSource bug where audible spikes occur with distance attenuation.
  • Enabled spatializePostEffects for `GvrAudioSources. (issue).
  • Fixed a bug in TiledPage that would cause the staggered animation to be calculated incorrectly when the page wasn't positioned in the forward direction relative to the origin of the scene.
  • Fixed a bug in PagedScrollRect that could put it into a bad state when it is disabled.

Google VR SDK for Unity v1.30


  • Fixed Unity 5.6.0b5 editor emulation. (issue)
  • Fixed editor unsaved bit churning.
  • (X) now closes demo scenes.


  • Added GvrActivityHelper, a utility/helper class for Android activities.
  • Added GvrControllerVisual.AlphaValue, which allows you to control the transparency of the controller visual. This value can also be accessed through C# scripting.
  • Added GvrRecenterOnlyController.cs. This is intended for 360° apps (e.g. 360° video) that should recenter only the controller, and not the headset. To use it:

    • Add the script as a component to any GameObject in the scene
    • Set the Camera and controller (GvrControllerPointer > Controller) to recenter.

    The VideoDemo's Pano (360) example has been updated to use this script.


  • IGvrPointer has been removed, and its functionality has been merged with GvrBasePointer. If you were using IGvrPointer, simply use GvrBasePointer instead as their APIs are identical.
  • Deleted GazeInputModule. GvrPointerInputModule should be used instead.

Google VR SDK for Unity v1.20


  • In the editor, head pose changes from moving the mouse would be reset between scenes, which was inconsistent with how it works on device. Head pose is now maintained between scenes in both device and editor.

  • GvrPointerInputModule will now correctly call IGvrPointer.OnPointerExit when the object being pointed at was destroyed.


  • Added the GvrControllerVisualManager script to the prefab GvrControllerPointer. This script activates/deactivates its children based upon the controller connection status. This allows the controller model to be hidden when the controller is disconnected, while the top-level object of GvrControllerPointer can still be safely activated and deactivated manually.

  • Added the GvrEventSystem prefab. This includes GvrPointerInputModule and GvrPointerManager in a single prefab.

  • Moved GvrPointerManager from GvrViewerMain to GvrEventSystem.

  • GvrToolTips.cs has been replaced by GvrTooltip.cs. Tooltips are now controlled on an individual basis (i.e. one GvrTooltip script per-tooltip) instead of managed centrally from a single instance of GvrToolTips. GvrTooltip contains a drop-down menu where you can select the location of the tooltip (TouchPadInside, TouchPadOutside, AppButtonInside, AppButtonOutside). Tooltips are part of GvrControllerPointer, and can be removed or changed as desired.

  • Added the ability to change Handedness in the editor preview. This impacts multiple systems, including the arm model and tooltip rendering. The handedness setting is changed through GoogleVR > Editor Settings, or by clicking the Change Handedness button on a GvrTooltip script.

  • Added support for Scroll and Drag events in GvrPointerInputModule so that all Unity UI components will work.

  • Added GvrDropdown script, a replacement for Unity’s Dropdown UI Component which works with GvrPointerInputModule/GvrPointerGraphicRaycaster. The built-in Dropdown component has a hardcoded dependency on GraphicRaycaster making it incompatible with the GVR SDK.

Known issues

  • Unity 5.6.0b5: Editor emulation does not render properly. (issue)

Google VR SDK for Unity v1.10

Additions and Changes

  • The included demo scenes have changed. There are now four demos:
    • GVRDemo (Daydream/Cardboard)
    • VideoDemo (Daydream/Cardboard)
    • PermissionsDemo (Daydream only)
    • ScrollingUIDemo (Daydream only)
  • Added Google VR video support to Unity, see the VideoDemo scene for example usage.
  • Added VR permissions request flow, see the PermissionsDemo scene for example usage.
  • Added GVR versions of Graphic and Physics raycasters. GvrGaze is deprecated in favor of GvrPointerGraphicRaycaster.
  • Added a Daydream controller model to provide a visual representation in the application.
  • Changed GvrControllerMain prefab to use an arm model script.
  • Changed GvrReticlePointer to use the new GVR raycaster.

Google VR SDK for Unity v1.0

Google VR is now natively supported in the Unity Daydream technical preview! This release marks the debut of native Daydream integration in Unity, which enables Daydream developers to take full advantage of all of Unity and Daydream's optimizations in VR rendering. Get the Daydream technical preview now!

The v1.0 release of the Google VR SDK for Unity is compatible with Unity 5.2.1 or later, but future releases will require a version of Unity with native Google VR support. To use the Google Daydream platform, you must be using a version of Unity with native support.

Upgrade Instructions

The first time you open/create a project using the v1.0 Google VR SDK, you may see some dialog boxes guiding you through the upgrade. If your project has modified the AndroidManifest.xml file pay close attention, as you will need to manually merge the new Android Manifest template with your existing file.

Upgrading from Google VR SDK for Unity v0.8.5 and above:

  • Open a scene that does not use any Google VR functionality. One way to do this is to save your work and create a new, temporary scene.
  • In the Projects panel, delete the GoogleVR and Plugins directories in the Assets folder.
  • Import the Google VR SDK for Unity unitypackage.

Upgrading from Google VR SDK for Unity v0.8.1 and below:

  • Follow the upgrade instructions from v0.8.5.
  • Enable Daydream and/or Cardboard in Player Settings > Other Settings > Virtual Reality SDKs.

v1.0.1 Update


  • Fixed issue with eye flashing artifacts.
  • Prevent GvrFPS divide-by-zero error.
  • Changed VRModeEnabled in GvrViewer to be a no-op for the native integration.

v1.0.0 Initial Release

  • Fixed spatial audio bug when setting the max distance parameter via scripting.
  • Fixed spatial audio reverb gain parameter adjustments to ensure smoother transitions.
  • Added the GvrIntent class to expose information about the current Android Intent/Activity. This can be used to implement deep linking in your application.
  • Added the GvrSettings class to work with Daydream-specific settings. These include the viewer type, sustained performance mode and controller handedness. Requires native Google VR support in Unity.
  • Added the GvrFPSCanvas prefab in Assets/GoogleVR/Prefabs/Utilites. This displays the rendering speed in milliseconds per frame.
  • Added higher order ambisonic playback support in the Google VR audio engine.
  • Added the Metal material type to surface materials of Google VR audio rooms.
  • Added a no distance attenuation option to distance rolloff methods for Google VR spatial audio sound object sources.
  • Major performance improvements in binaural rendering of audio sources.
  • The Daydream controller requires native Google VR support in Unity. This impacts the GvrController script and Controller Demo scene.
  • The GvrViewer script is no longer required with native Google VR support in Unity. It is still used to provide VR emulation in the editor, or for magic window mode in your application. If your application is using a version of Unity without native support, you will still need to include the GvrViewer script.
  • Removed the "Unity" distortion correction mode from the GvrViewerMain prefab.
  • Magic window mode is no longer supported with native Google VR support.
Known Issues
  • In the Unity technical preview, using 8x MSAA will result in a black screen.
  • On versions of Unity without native Daydream integration, one eye may flash/freeze when transitioning between magic window mode.
  • Metal is not fully supported on iOS.
  • iOS Cardboard applications may crash under iOS 10 because the generated Xcode project does not request camera permissions in its info.plist file. Add the permission to fix the crash.

  • See also the v0.9 Known Issues.

Google VR SDK for Unity v0.9

v0.9.1 Update

  • The GVR_SDK_VERSION string has been corrected.

  • Project export to Android Studio should no longer ask for the READ_PHONE_STATE permission.

v0.9.0 Initial Release

  • Added PlayScheduled() to GvrAudioSource in order to set a sound to play at a specific time.

  • In-editor spatial audio playback works on Linux installations.

  • GvrAudioSource is no longer duplicated after a delete followed by undo.

  • Stereo separation is correctly applied to the GvrEye component in Start(), rather than only after a Resume(). This bug was not visible (or a problem) when using the now-deprecated prefabs.

  • Fixed matrix math in GvrDistortion.cginc for surface shaders only, using vertex-displacement distortion correction. (Most applications do not use this technique.)

  • The Windows audio library is now statically linked, making the MSVC redistributable no longer required.

  • See also the v0.8.5 Changes below for information on how to prepare for the upcoming native integration of GoogleVR in Unity.

  • The C# events in GvrViewer were vulnerable to order-of-execution bugs that can cause the app to crash, so they have been removed. Check the state variables in Update() and related functions per usual Unity practice.

  • The old Electronic Display Stabilization (synchronous reprojection) setting has been removed in favor of Daydream’s upcoming asynchronous reprojection.

  • Magnetic trigger detection has been removed from the SDK, so 2014 Google Cardboard viewers and related models are no longer supported. Please use an older SDK if these viewers are still important to your product.

Known Issues

  • (Fixed in v0.9.1) When a project is exported to Android Studio, the resulting app may ask the user for the READ_PHONE_STATE permission. This is due to an empty manifest in the unitygvractivity.aar file, which causes Android Studio to assume the target Android SDK is 1, in terms of permissions that the user must grant.

  • The neck model is currently inoperative, due to the recent architectural changes for Unity VR integration.

  • (Fixed in v0.9.1) The GVR_SDK_VERSION string in GvrViewer.cs is slightly out of date.

  • See also the v0.8 Known Issues.

Google VR SDK for Unity v0.8

v0.8.5 Update


The following instructions may be followed with "v0.9" in place of "v0.8.5".

The v0.8.5 release of the Google VR SDK for Unity includes a preview of the new workflow for using the SDK after Google VR is a native part of the Unity. Instead of using prefabs, the Unity camera will render as mono or stereo depending on the target platform and Google VR settings will be built into the editor.

We have made a number of changes to support this workflow:

  • Most of the prefabs are deprecated in the v0.8.5 release. They will be removed entirely in a future release.
  • The remaining scripts and prefabs have been modified to work similar to how the native integration will function.

We recommend that new projects using Google VR use the preview workflow to reduce the number of changes necessary in the future. Documentation has been updated to reflect the preview workflow.

For existing projects using Google VR, you have three options.

Option 1: Continue using prefabs
Remain on the v0.8.5 release of the Google VR SDK for Unity indefinitely, which will be the final release that supports prefabs. Cardboard applications should continue to work.

Option 2: Upgrade with each Google VR release
Follow the steps to use the preview workflow in v0.8.5. Later releases may have additional small changes, but you will always be on the latest and greatest.

Option 3: Upgrade after native integration
Remain on the v0.8.5 release of the Google VR SDK for Unity using prefabs until the native integration is available, then upgrade your workflow all at once.

Upgrade Instructions
  • Open a scene that does not use any Google VR functionality. One way to do this is to save your work and create a new, temporary scene.
  • In the Projects panel, delete the GoogleVR and Plugins directories in the Assets folder.
  • Import the Google VR SDK for Unity unitypackage.

If migrating an existing Google VR project:

  • Delete the GvrMain prefab.
  • Add a Camera to the scene, e.g. under GameObject > Camera.
  • Select the new Camera. In the Inspector panel, find the Tag drop-down selection at the top and set it to MainCamera.
  • Confirm that the camera has the following default components:
    • Flare Layer
    • GUI Layer
    • Audio Listener
  • Add the GvrViewerMain prefab to the scene, found in Assets/GoogleVR/Prefabs.

If using the default gaze-based reticle:

  • Add the GvrReticle prefab as a child object to the Camera, found under Assets/GoogleVR/Prefabs/UI.
  • If using the GazeInputModule system:
    • Add a Physics Raycaster component to the Camera.
    • Adjust the Event Mask as needed for your scene. The sample scenes use the following settings: Default, TransparentFX, Water
  • If using the GvrGaze script, attach it to the Camera.

v0.8.1 Update

  • The Auto Drift Correction option on the GvrViewer script has been removed since gyro drift correction is now an intrinsic feature of the GoogleVR NDK.

v0.8.0 Initial Release

Upgrade Instructions
  • Delete the old Cardboard and Plugin directories before upgrading to the new version of the SDK. Do not have a Cardboard scene open in the editor when doing this.

  • Update your code that refers to renamed entities (see Changes below).

  • The motion-based idle detector was too eager to detect idleness, resulting in occasional screen dimming.

  • On iOS, the screen brightness no longers goes to 100% in VR Mode. Instead it stays fixed at what it was before VR Mode was enabled.

  • Added support for the Daydream Controller. Use the GvrControllerMain prefab to enable, and communicate with it in code via GvrController.Instance.

  • Added a new demo scene to test controller connectivity.

  • Added a GetOutputData() method to GvrAudioSource, which passes through to AudioSource.GetOutputData(). Note that the data returned is the raw audio data, which is not spatialized.

  • Cardboard has been rebranded GoogleVR. The name prefix on all scripts and prefabs is now Gvr.

  • The Cardboard class in particular is now called GvrViewer.

  • The singleton instance of it, Cardboard.SDK, is now GvrViewer.Instance.

  • The formerly split SDK and Demo unitypackages have been combined into GoogleVRForUnity.unitypackage.

Known Issues

  • Ensure that there is exactly one instance of GvrViewer in any VR scene. In particular, if you call DontDestroyOnLoad on one so that it carries over into the next scene, make sure the new scene does not already contain one.

  • Starting with 5.3.4p2, a bug in Unity prevents rendering World Space uGUI Canvases into a RenderTexture. Since RenderTextures are used for distortion correction, this effects all such canvases in VR.

  • See also the v0.7 Known Issues.

Cardboard SDK for Unity v0.7

Upgrade Instructions
  • Delete the old Cardboard and Plugin directories before upgrading to the new version of the SDK. Some newer versions of Unity (5.3+) do this for you automatically, but not all.
  • Fixed a crash bug from using the magnetic trigger or tilt event before loading a level.

  • Fixed a bug caused by calling RenderTexture.Create() on some phones too early.

  • Allow the CardboardReticle to change distance with non-interactive objects too.

  • Worked around a crashing bug in Unity when using a native audio plugin.

  • For iOS, bitcode is supplied in the native libraries.

  • Added spread and bypass room effect parameters to CardboardAudioSource.

  • Minimum supported Android SDK is now KitKat (19).

  • For Android, package the Java support code and resources in a .aar file.

  • For iOS, the -ObjC Xcode flag is now required by native Cardboard code, and will be added at project build time.

  • For iOS, manual Xcode project changes to support Cardboard are no longer required.

  • Removed legacy support for Unity 4.x

  • Removed the TapIsTrigger setting. A screen tap is always treated as a trigger now.

  • Removed obsolete Cardboard.cs properties from pre-v0.5

  • Removed the onboarding dialog and "sync with Cardboard" option.

Known Issues

  • Unity’s Daytime Water (Pro) does not appear to reflect the sky properly in VR.

  • iOS Simulator is not supported.

  • Can't reliably start a CardboardAudioSource from Awake(). Use Start() instead.

  • Only one CardboardAudioListener can exist in the scene. Workaround is to put it on a "Microphone" game object, and reparent it to the current camera.

  • See also the v0.6 Known Issues.

Cardboard SDK for Unity v0.6

v0.6.0 Initial Release

Upgrade Instructions
  • Delete the old Cardboard and Plugin directories before upgrading to the new version of the SDK. Some newer versions of Unity (5.3+) do this for you automatically, but not all.
Deprecation Notice
  • In the next release of the SDK, the Legacy folder will be retired, along with all C# functions marked "Obsolete".

  • In the next release, the minimum officially supported version of Unity will be 5.2.

  • The UI layer no longer flashes at app startup.

  • Ensure that a custom Skybox component on the parent camera is reflected on the stereo child cameras.

  • The -ObjC flag on iOS no longer causes a link-time error in Cardboard apps.

  • Fixed a null-pointer exception that caused scenes to render one or both eyes black if the scene started out with VR mode turned off, and turned it on in code later.

  • Apps no longer crash on Quit or LoadLevel calls if the phone has been tilted on its side by the user.

  • Support for Spatial Audio.

  • Main Menu entry Cardboard which makes it easy to reach documentation and file bugs.

  • Support for gaze-based interaction, either with uGUI EventSystem or independently of it. Implement C# interfaces ICardboardGazePointer and/or ICardboardGazeResponder to interact with the gaze system.

  • A C# event on CardboardHead for callbacks after the head tracking has been updated.

  • The Cardboard.SDK property no longer auto-instantiates a Cardboard object. Instead it logs an error message if the property is null. Ensure that a Cardboard object exists in the scene before accessing the property. The CardboardManager prefab can be used if the Cardboard instance should be independent of any scene camera, or you can call the Cardboard.Create() static function to ensure that the SDK property is initialized.

  • Reverted a change in v0.5.2 that allocated a padded RenderTexture (intended to account for barrel distortion). The extra size of the texture caused an unreasonable performance hit, especially on 2K phones. Now the texture size matches the screen resolution, as in older releases.

  • Reverted a change in gyro-drift correction on iOS that actually made drift worse on iPhones.

  • CardboardCamera prefab is now CardboardManager, a standalone instance of the Cardboard script.

  • The "gaze pointer" object in GazeInputModule is now a reticle, with customizable behavior and appearance.

  • (iOS only) The automatically launching onboarding dialog has been removed.

  • Removed obsolete RadialUndistortionEffect shader and script.

  • On iOS, the Sync with Cardboard option has been removed.

  • The Tilt sensor has been disabled to prevent the tilt-based app crash noted above. The Tilt and OnTilt members of Cardboard may be removed in a future SDK release.

Known Issues

  • Be sure the screen orientation is locked to Landscape Left when the Cardboard SDK is initialized and active. On iOS, do this by leaving the Orientation set to Automatic in Player Settings, with the only allowed orientation being Landscape Left.

  • (Fixed in v0.7) A bug in Unity 5.2 and 5.3's Spatial Audio support causes mobile apps to crash at unexpected times. On Android, this occurs when the app is resumed. On iOS, it may happen at startup.

  • See also the v0.5.2 Known Issues.

Cardboard SDK for Unity v0.5

v0.5.2 Update

Upgrade Instructions
  • Due to changes in the plugin contents, we recommend you delete the Cardboard directory and (if you have no other iOS plugins) the Plugins/iOS directory before importing the v0.5.2 SDK.
  • General performance improvements and CPU load reduction to reduce thermal throttling.

  • New gyro drift correction method for better stability across more phones.

  • Recent versions of Unity (5.1.x and 5.2.x) have changed the way they report DPI, which is affecting the SDK's calculation of screen size. This has been worked around.

  • A bug in the StereoController.AddStereoRig() function caused it to cache the StereoController.Eyes array before the eye cameras were created. Fixed.

  • The offscreen RenderTexture used for distortion correction takes properties from project settings (e.g. antialiasing, pixel format). Depth now defaults to 24 bits.

  • The GL.IssuePluginEvent() Unity call is now passed a unique ID in order to be compatible with other native plugins. (This only matters if you use the old Native distortion method.)

  • Onboarding and Setup dialogs now support localized language strings. For Android this is automatic. For iOS, enable Localizations in the Xcode project.

  • Default distortion correction method is now done entirely in Unity to avoid the overhead of using GL.IssuePluginEvent() with our native code (due to the native code needing to carefully manage GL state internally). The old native C++ version is still available if issues arise.

  • A new CardboardCamera prefab manages both full screen clear and distortion correction. It is included in CardboardMain, or created automatically if needed.

  • The Cardboard object has a simple slider to adjust the scale of the RenderTexture resolution. Dial it down to increase performance.

  • There is now an onscreen Back Button that functions like the normal Android back button (which is hidden in immersive mode). You can turn it on or off, and choose how to respond.

  • Distortion correction is now done during the Camera rendering phase, which means that uGUI Canvases in Screen Space Overlay mode (and OnGUI calls) will now appear onscreen.

  • The new distortion correction method is compatible with Metal (iOS) and multi-threaded rendering (Android).

  • The offscreen RenderTexture resolution is padded to account for the barrel distortion, in order to reduce relative fuzziness in pixels near the center.

  • Stereo cameras are no longer fully mirrored from the parent Camera object on ever frame, only when either the device profile changes (after a QR code scan) or you call StereoController.UpdateStereoCameras. If you enable the StereoController.keepStereoUpdated checkbox, then the mirroring will occur every frame. This option is useful if you are animating parameters on the Camera and want to keep the stereo cameras up to date. Otherwise, leave this option off, as it has a performance cost.

Known Issues

  • On Android, do not build with the targetSDKVersion set to 23 (Android 6.0). The new runtime permission model in Android 6.0 will prevent your app from reading the QR code settings unless the user manually adds Storage permission in the App Info screen for your app, which is very non-obvious. The bug is that Cardboard should prompt the user for Storage permission after install and first launch, but it does not. As a result, it silently falls back to the default Cardboard QR code settings (which is a V1 Cardboard). Clarification: Only affects your users that have Android 6.0 phones.

  • On iOS, if you are building with Xcode 7 and the iOS 9 SDK, you must enable http: connections in order for QR code scanning to succeed. The details of this issue are explained on the App Transport Security Technote page in Apple's developer site.

    The quick fix:

    • Open your Info.plist.
    • Add a dictionary key named NSAppTransportSecurity.
    • Inside that dictionary add a boolean key named NSAllowsArbitraryLoads and give it the value YES.
  • In Unity 5 on iOS, it is recommended to set the Orientation to Auto, and then in the Allowed Orientations, remove all but Landscape Left.

  • For gyro drift correction, note that if you are experiencing a steady drift, it helps to place the phone on a solid surface for a few seconds (or until drift subsides).

  • If the phone's gyro is too noisy, the drift correction will never consider the phone as being in a "stable" pose in order to estimate the drift.

  • Gyro readings are a bit jittery in multi-threaded rendering, possibly due to CPU scheduling or frame buffering. The cause is under investigation.

  • The Update Stereo Cameras button does not copy the values of any Image Effects attached to both mono and stereo cameras, only the values of the Camera component itself.

  • Make sure GazeInputModule is placed above other input modules like TouchInputModule in the EventSystem's component list, or it will not be able to activate.

  • (Fixed in v0.7) Switching between Native and Unity distortion modes at runtime is not fully supported. The screen may stop updating until the app is paused and resumed. Set the desired distortion method in the Cardboard component's Inspector panel in the editor.

  • The UI layer elements (settings gear icon, alignment marker) may remain active when switching from a Cardboard scene to a non-Cardboard scene. Workarounds are to add a Cardboard component to the target scene, setting its VRModeEnabled = false, or to disable the UI components by code (_Cardboard.SDK.EnableSettingsButton = false, etc) before loading the non-VR scene.

  • See also the v0.5.1 Known Issues.

v0.5.1 Update

Upgrade Instructions
  • Due to extensive changes in the plugin contents, it is recommended to delete the Cardboard directory and (if you have no other Android plugins) the Plugins/Android directory before importing the v0.5.1 SDK.
  • Fixed a deprecated code warning in Unity 5.1.1 projects, relating to Graphics APIs.

  • Fixed a null reference error when changing the simulated viewer or phone in the Cardboard inspector panel.

  • For iOS apps, the screen idle timer was not disabled, so the screen could turn off while the phone is in a Cardboard viewer. Fixed.

  • VR Mode was being left enabled when loading a scene that had no Cardboard script, which affected rendering and input handling in the new scene. All VR Mode state is reset on scene load now.

  • An incorrect Input.touchCount was returned due to Cardboard hiding the first screen tap (turning it into a trigger event). Fixed.

  • A crash on certain phone models, in a native constructor called PlatformInfo has been fixed.

  • GazeInputModule can be used with a mouse, screen tap, or other inputs as well as with the Cardboard trigger.
  • Removed Simulate Distortion Correction flag in the Editor.

  • The SDK no longer forces Android screen brightness to maximum, which was introduced in v0.5.

  • The android.permission.INTERNET tag has been removed from AndroidManifest.xml.

  • The Demo scenes have been split off into a separate unitypackage.

  • The gyro drift correction setting is not used on iOS, as it appears not to be needed.

Known Issues

  • (Fixed in v0.5.2) The settings gear button icon lives in two places: Cardboard/Resources/CardboardSettingsButton.png.bytes for Android, and Plugins/iOS/resources.bundle/gearButton.png for iOS.

  • The screen timeout is disabled when the Cardboard script initializes, regardless of whether the app is in VR Mode or not. Use Screen.screenTimeout to control this.

  • (Fixed in v0.5.2) A minor bug in CardboardProfile.cs uses halfWidth instead of halfHeight on a line computing a vertical offset. This has no effect on the phone but may be slightly visible in the editor.

  • (Removed in v0.6) The new-user onboarding wizard launches not at app startup, but in the first loaded scene that has a Cardboard component in it. To ensure it happens at startup if the first scene is not VR, add a Cardboard component to the scene and set its VRModeEnabled property to false.

  • If a Cardboard component is carried over into a new scene (via DontDestroyOnLoad), but the new scene already has a Cardboard component, then the Cardboard SDK stops working: no triggers, no settings button, and other effects. This occurrence is logged. To avoid this problem, ensure that no scene ever has more than one Cardboard component.

  • (Fixed in v0.5.2) Distortion correction on iOS when using native distortion (which requires OpenGL) looks erroneous. It is advised to use Metal, or if OpenGL is required, to force the use of the Unity distortion correction by setting CardboardAndroidDevice.debugDisableNativeDistortion to true.

  • (Removed in v0.6) In versions of Unity prior to 5.1.1, disallow portrait mode or else the onboarding dialog can result in a flickering screen if the user changes orientation. (This appears to have been a bug in Unity.)

  • See also the v0.5.0 Known Issues.

v0.5.0 Initial Release

Upgrade Instructions
  • Due to extensive changes in the plugin contents, it is recommended to delete the Cardboard directory and (if you have no other Android plugins) the Plugins/Android directory before importing the v0.5 SDK.
  • If native code distortion correction is not supported, fall back to using an Image Effect.

  • If native code UI layer is not supported, fall back to rendering it in Unity.

  • The iOS build platform is now supported.

  • Added a new C++ native code implementation for head tracking and distortion correction.

  • The Java-based native code implementation has been moved to the Legacy folder.

  • Refactored Cardboard.cs into a front-end Unity API and a back-end VRDevice class.

  • VRDevice implementations provided for Android, iOS, and Unity editor.

  • Some Cardboard properties have been renamed (but the old names still work).

  • Added a Tilt event for when the viewer is turned on its side.

  • Added C# events to Cardboard for responding to Trigger and Tilt events.

  • Added more phone and viewer profiles to the in-editor simulation menus.

  • The Cardboard.SDK.BackButtonExitsApp property.

  • The Cardboard.SDK.IsInCardboard property.

Known Issues

  • (Fixed in v0.5.2) Multi-threaded rendering: Currently not supported.

  • Incorrect screen rectangle on some phones: There are several functions in Android to query the phone's dpi, from which the size of the screen is derived. For every such function, there are some phone models that return an incorrect dpi value, which leads to an incorrect screen size estimate.

  • (Fixed in Unity 5.1) Unity 5 rendering issues: As of Unity build 5.0.0f4, the following steps should be taken to fix or ameliorate any rendering issues, such as an all-black screen, flashing textures, or non-stereo views:

    • Enable the Development Build option in the Build dialog. This seems to fix various rendering glitches, like flashing textures.

    The root cause of the rendering glitches is under analysis, with assistance from Unity.

    Note: If you are using any Image Effects, make sure that StereoController's Direct Render property is set to false. Check if that fixes the issue first.

Cardboard SDK for Unity v0.4

v0.4.10 Update

Upgrade Instructions
  • See the v0.4.9 Upgrade Intructions if upgrading from v0.4.5 or earlier.
  • The neck model used in the Editor had the wrong sign in the Z coordinate.

  • Coroutine management is moved to OnEnable and OnDisable so that deactivating the game object works properly.

  • In the Legacy demo scene, the CardboardGUI object's Head property was set to (None), so that the pointer did not appear.

  • For performance, the StereoController.Eyes array is cached rather than recomputed each time it is accessed. The method InvalidateEyes() may be called to reset the cache if necessary.

  • Fixed a bug in CardboardEditor.cs which did not save the Editor-only settings.

Known Issues

  • See the v0.4.9 Known Issues, which are unchanged in this release.

v0.4.9 Update

Upgrade Instructions
  • Plugin layout: This release rearranges the layout of the package. In a Cardboard project which is being upgraded from v0.4.5 or earlier, it is recommended to delete the Cardboard subdirectory before importing the new package.

  • New native libraries: In a Cardboard project which is being upgraded from v0.4.1 or earlier, it is recommended to delete the following files:

    • Plugins/Android/guava-jdk5-14.0.1.jar
    • Plugins/Android/
    • Plugins/Android/libprotobuf-java-2.3-nano.jar
  • Sensor Drift: Added Cardboard.SDK.AutoDriftCorrection to control gyro drift.

  • Clearing the whole screen: The entire screen is correctly cleared in VR mode.

  • Unity 5 Import Issues: The scripts have been fixed to eliminate compiler messages when importing the SDK into a Unity 5 project.

  • Canvas UI (uGUI) Support: The SDK provides a script to add gaze-based interaction to the Unity Event System. The main demo scene has been changed to illustrate this feature.

  • Alignment Marker in Editor: A simulated alignment marker is drawn in the Editor if the feature is enabled for the phone.

  • Distortion Correction in Editor: The editor simulates the same distortion correction during Play mode as occurs on the phone. This can be disabled in the SDK object's Inspector.

  • Neck model: A neck model is applied to the head tracking. The scale can be controlled by setting Cardboard.SDK.neckModelScale [0..1].

  • CardboardGUI: The CardboardGUI scripts and related assets have been moved to the Legacy folder. On Unity 4.6+, the new Canvas UI is the preferred UI system. The original demo scene, which uses this feature, has been moved to Legacy as well.

  • SkyboxMesh and StereoLensFlare: These scripts are not required in Unity 5.

Known Issues

  • (Fixed in Unity 5.1) Unity 5 rendering issues: As of Unity build 5.0.0f4, the following steps should be taken to fix or ameliorate any rendering issues, such as an all-black screen, flashing textures, or non-stereo views:

    • Enable the Development Build option in the Build dialog. This seems to fix various rendering glitches, like flashing textures.

    The root cause of the rendering glitches is under analysis, with assistance from Unity.

    Note: If you are using any Image Effects, make sure that StereoController's Direct Render property is set to false. Check if that fixes the issue first.

  • Build error "Unable to convert classes into dex format": See the Upgrade Instructions above.

v0.4.5 Update

Upgrade Instructions
  • New native libraries: In a Cardboard project which is being upgraded, it is recommended to delete the following files:

    • Plugins/Android/guava-jdk5-14.0.1.jar
    • Plugins/Android/
    • Plugins/Android/libprotobuf-java-2.3-nano.jar
  • CPU Support: The x86 architecture is now supported.

  • "Unable to find unity activity in manifest" message during build: The Android manifest has been fixed.

  • Aspect ratio wrong on tablets in Unity Free: The rendered screen area is determined by the device profile. Note that this may result in only using a portion of a tablet's screen -- the size is determined by the Cardboard device's dimensions.

  • VR Toolkit's UI Layer in Unity Free: Now works in Unity Free. Note this only refers to the alignment marker and the settings button, not to distortion correction.

  • Distortion correction toggle Added nativeDistortionCorrection option to Cardboard.SDK, which turn on or off the built-in distortion correction.

  • Recenter orientation Added Recenter() function to Cardboard.SDK, which resets the head tracker so the phone's current heading becomes the forward direction (+Z axis).

  • Stereo screen resolution control Added CreateScreen(xres, yres) function to Cardboard.SDK, which creates texture used for rendering stereo, with the specified resolution. It it not necessary to call this function directly, unless you specifically want a resolution different from the phone's screen.

  • Back button handling option: Added BackButtonExitsApp option to Cardboard.SDK, which controls whether the Android back button exits the app or appears in Unity as an Escape keypress.

  • Control culling mask of left and right eyes: Added toggleCullingMask to CardboardEye, allowing some render layers to be enabled or disabled independently in each eye.

  • Match by zoom: Added matchByZoom slider to StereoController, which makes the stereo cameras do a zoom when adjusting their FOV to match the parent mono camera. Intended for use in effects such as when the player is looking through binoculars / scope.

  • SkyboxMesh layer: Added layer option to set the layer of the SkyboxMesh.

Known Issues

  • (Fixed in Unity 5.1) Unity 5 import and rendering issues: As of Unity build 5.0.0f4, the following steps should be taken to fix or ameliorate various import and rendering issues, such as an all-black screen, flashing textures, or non-stereo views:

    • Remove CardboardGUI, and avoid using GUI class methods (e.g. GUI.Button).
    • Edit the Teleport script in the demo scene to remove all references to CardboardGUI and GUI.
    • Remove SkyboxMesh. Unity's skybox shaders handle parallax correctly, so it is not needed.
    • Remove StereoLensFlare. Ditto. These two scripts also cause the import errors.
    • Enable the Development Build option in the Build dialog. This seems to fix various rendering glitches, like flashing textures.

    The root cause of the rendering glitches is under analysis, with assistance from Unity.

  • Incorrect screen rectangle on some phones: There are several functions in Android to query the phone's dpi, from which the size of the screen is derived. For every such function, there are some phone models that return an incorrect dpi value, which leads to an incorrect screen size estimate.

  • Build error "Unable to convert classes into dex format": See the Upgrade Instructions above.

v0.4.1 Update

  • (Deprecated for Unity 5) CardboardGUI in Unity Free: The CardboardGUI script automatically disables itself in Unity Free.

v0.4.0 Initial Public Release

Known Issues

  • (Fixed in v0.5.2) Multi-threaded rendering: Currently not supported.

  • (Deprecated for Unity 5) CardboardGUI in Editor: Does not react to resizing the play window properly.

  • (Deprecated for Unity 5) Single SkyboxMesh: Make sure only one SkyboxMesh script exists or is enabled at one time. Otherwise the user will see multiple overlapping skyboxes because each one is visible to all cameras.

  • (See v0.4.5 Known Issues) Unity 5: Plugin not yet extensively tested with the Unity 5 beta release. We plan to provide Unity 5 support in the near future.

  • (Fixed in Unity 4.5+) Compile errors from [Tooltip] attribute: The Tooltip attribute is supported in Unity 4.5+. If this is causing compile issues then, if possible, upgrade. Otherwise, commenting out these lines in the scripts will work.

  • (Fixed in v0.4.5) CPU Support: Shipped plugin targets ARMv7. We have built versions of for other CPU architectures.

  • (Fixed in v0.4.9) Sensor Drift: Some phone models and individual units are susceptible to drift in the orientation. VR Toolkit does not at present provide any correction for drift. However, some phones have been observed to drift less after being used regularly for a period of time.

  • (Fixed in Unity 5) Gyro and Accelerometer: A bug in the current implementation of the Unity plugin prevents Unity from reading these sensors through the InputManager.

  • (Fixed in v0.4.5) "Unable to find unity activity in manifest": The message Unable to find unity activity in manifest. You need to make sure orientation attribute is set to landscape manually. appears in the console during builds. It appears to be harmless - no other side effect have been observed.

  • (Fixed in v0.4.5) Aspect ratio wrong on tablets in Unity Free: On larger screens the scene may appear squished. This is due to a combination of several factors: Lacking information on the specifics of the device (from NFC tag or QR code), rendering the scene to be viewed through lenses, and lack of RenderTexture support in Unity Free.

  • (Fixed in v0.4.5) VR Toolkit's UI Layer in Unity Free: The UI layer of VR toolkit, consisting of the alignment marker and the settings button icon, do not appear for Unity Free builds, also because of RenderTexture not being supported.

  • (Fixed in v0.4.1) CardboardGUI in Unity Free: The demo scene has the CardboardGUI script activated, which causes a black screen in Unity Free (since it uses RenderTextures). Disable or remove the CardboardGUI object from the scene.