Copyright (c) 2016-2024, HTC Corporation. All rights reserved.
-
Changes
- Add support for Unity 6
- Fix compile errors & warnnings
- Add support for VIVE OpenXR Unity SDK
- Now support hand tracking thru Unity XR Hand
- Goto PackageManager > install "XR Hands" (com.unity.xr.hands)
- Goto ProjectSettings > XR Plug-in Management > OpenXR > Enabled Interaction Profiles > add "VIVE XR Hand Interaction"
- Goto ProjectSettings > XR Plug-in Management > OpenXR > OpenXR Feature Groups > enable "Hand Tracking Subsystem"
- Tracked hand will identify as VRModuleDeviceModel.UnityXRHandRight/Left
- Now support hand tracking thru Unity XR Hand
- Add support for latest Wave XR plugin
- Fix selecting wrong left/right device in some cases
- Add support for latest Oculus plugin
- Fix tracked hand model not working
- Add support for Unity 6
-
Bug Fix
- Fix grabber(ColliderEventCaster) emitting incorrect button
- Changes
- Add support for latest Wave XR plugin
- Add support for Vive Ultimate Tracker
- Requires latest Wave XR plugin (AIO) or SteamVR Plugin (PC)
- Add enum value VRModuleDeviceModel.ViveUltimateTracker
- Changes & Fixes
- Fix unable to get controller button on OpenVR(SteamVR) platform
- Seems latest Unity XR Plugin chages behaviour causes not actvating SteamVRv2Module correctly
- Now recommanded settings button will show up in VIUSettings if there's ignored settings
- Fix ViveColliderEventCaster button not working in some cases
- Fix ControllerButton.BKeyTouch typo
- Fix unable to get controller button on OpenVR(SteamVR) platform
- Bug Fixes
- Fix Meta Pro controller input not handled when using latest Oculus plugin
- Fix unable to enable platform support in VIU Settings when using latest Unity XR Plugin Management
-
Changes
- Update compatibility with com.unity.xr.openxr 1.4.2
- Update compatibility with Oculus Integration v50
- Handle removal of OVR Avatar
- Add Quest Pro & Touch Pro support
- Deprecate old Oculus graphics & quality recommended settings check on newer version
-
Bug Fixes
- Fix GetPadPressVector/GetPadTouchVector always return zero value
- Fix missing controller models after suspend/resume
- Fix Focus 3 controller not recoginzed in OpenXR mode
-
Changes
- Now support Focus 3 Tracker through VBS
- Now button for Focus 3 Tracker is mapping to ControllerButton.ApplicationMenu instead of ControllerButton.A
- Remove Graphic Jobs recommended settings for Wave
- According to Unity document, Graphics Jobs only supported on certain environment(Vulkan) on Android.
-
Bug Fixes
- Fix Grabbable object with PoseFreezer calculating wrong pose when the object root is not at (0,0,0)
- Fix device status for WaveHandTracking doesn't reset correctly
-
Changes
- Add Vive Wrist Tracker support
- Requires latest Wave XR plugin (v4.3+)
- Able to work with ViveRole binding system
- More Oculus platform support
- Now able to recognize Quest 2 controllers (VRModuleDeviceModel.OculusQuest2ControllerLeft/Right)
- Add new setting options
- Enable/Disable Oculus Hand Tracking
- Enable/Disable Tracked Hand Render Model
- Enable/Disable Oculus Controller Render Model
- Enable/Disable Hand Attached to Oculus Controller Render Model
- Add Vive Wrist Tracker support
-
Bug fixes
- Fix HandRole doesn't map other controller role correctly
- Fix sometimes unable to enable/disable Wave HandTracking/WristTracker features in VIUSettings
- Fix Oculus SDK Render Model broken when switching back from tracked hand
- Fix compatibility with older Oculus SDK version
-
Changes
- New OpenXR support options in VIU Settings (experimental)
- OpenXR Desktop
- OpenXR Android for WaveXR
- OpenXR Android for Oculus
- Add Oculus Quest 2 controller input support
- New OpenXR support options in VIU Settings (experimental)
-
Known Issues
- Oculus SDK Render Model brakes when switch back from tracked hand
-
Changes
- Add compatibility with Vive Wave 4.3
- Add compatibility with Open XR Plugin
- Fix ambiguous PoseControl type
- Remove unused dropdown button for WMR settings
-
Bug Fixes
- Fix compile error when SteamVR installed and platform is Android
- Fix RenderModelHook unable to enable/disable custom/fallback render model in some cases
- Changes
- Add Wave Hand Tracking support (Wave XR Plugin v4.1 or newer required)
- Add fallback model for ViveFlowPhoneController and ViveFocus3Controller
-
Changes
- Add ability to identify ViveFlowPhoneController
- Add plain fallback model for ViveFocus3Controller & ViveTracker3
- Add Input System support
- Required Input System installed in project
- For example, now able to bind v3 position action from HandRole.RightHand device by setting binding path to
- {RightHand}/position
- Add new role type "PrimaryHandRole"
- PrimaryHand maps first found controller/tracker/trackedhand accrodeing to which dominent hand
- API to control PrimaryHandRole dominant hand:
- ViveRole.DefaultPrimaryHandRoleHandler.DominantHand
- ViveRole.DefaultPrimaryHandRoleHandler.SetRightDominantAndRefresh()
- ViveRole.DefaultPrimaryHandRoleHandler.SetLeftDominantAndRefresh()
- ViveRole.DefaultPrimaryHandRoleHandler.SwapDominantHandAndRefresh()
-
Bug Fixes
- Fix LiteCoroutine DelayUpdateCall not working in some cases
- Fix RenderModelHook shaderOverride not working
-
Changes
- Add static API to retrieve pinch ray from Wave SDK
- WaveHandTrackingSubmodule.TryGetLeftPinchRay(out Vector3 origin, out Vector3 direction)
- WaveHandTrackingSubmodule.TryGetLeftPinchRay(out Vector3 origin, out Vector3 direction)
- Returns true if the pinch ray is currently valid, that is having valid tracking and the app got input focus
- Add 4 fingers curl & grip button values for Wave tracked hand device
- Change GestureIndexPinch button active threshold from 0.95 to 0.5 for Wave tracked hand device
- Add static API to retrieve pinch ray from Wave SDK
-
Package Changes
- Now support Unity 2018.4 or newer due to the Asset Store publish restriction
- Remove asmdef files from package archive
-
New Features
- Add support for Wave 4.1
- Add support for Vive Hand Tracking 0.10
-
Changes
- Now Grabbable able to be stretch around using 2 grabbers
- Requires enabling "multiple grabbers" option
- Able to scale if min/maxScaleOnStretch set to proper values (min < max)
- Optimize process creating Wave Render Model by reducing redundent instances
- Now Grabbable able to be stretch around using 2 grabbers
-
Bug Fixes
- Fix Grip axis returns joystick value on Oculus controller (Unity XR only)
- Fix ControllerRole doesn't map left hand device correctly
- Fix unable to get Grip/A/B/X/Y button values on Wave controllers (Wave 3.2 only)
-
New Features
- Add support for Wave 4.0
- New tracked hand rigs API (Experimental)
- New tooltip framework (Experimental)
-
Known Issue
- Latest Oculus SDK not compatible (controller not recognized)
- New Features
- Add ControllerButtonMask to able to mask out multiple buttin input simultaneously
// return true if right controller trigger or pad button pressed
ViveInput.GetAnyPress(HandRole.RightHand, new ControllerButtonMask(ControllerButton.Trigger, ControllerButton.Pad))
// return true if both right controller trigger and pad button pressed
ViveInput.GetAllPress(HandRole.RightHand, new ControllerButtonMask(ControllerButton.Trigger, ControllerButton.Pad))
- Bug Fixes
- Fix error when Wave Essence RenderModel module is installed
- Fix teleport in wrong height for some device in example 6
-
New Features
- Add support for Wave XR Plugin
- Add support for OpenVR XR Plugin preview4 and above
- Add support for Oculus Link Quest
-
Changes
- Move VIUSettings.asset default path to folder under Assets\VIUSettings\Resources
-
Bug Fixes
- Optimize performance updating define symbols #186
- Fix recommended settings did not skip check for values that are already using recommended value
- Fix compile error when using Oculus Integration Unity Plugin v19 and above
- Fix losing materials in example scenes when Universal Render Pipeline is applied
- Fix GetReferencedAssemblyNameSet() for Unity 2017.3 and 2017.4
- Fix SymbolRequirement.reqAnyMethods validation throwing exception when any argument type not found
- Fix UnityWebRequest.SendWebRequest() in early Unity version (5.4 - 2017.1)
-
Known Issue
- Importing Oculus Integration v19 before upgrading VIU to v1.12.0 will cause compile error and brake VIUSettings.
- Workaround: manually clear the "Scripting Define Symbols" in Player Settings should solve it
- Importing Oculus Integration v19 before upgrading VIU to v1.12.0 will cause compile error and brake VIUSettings.
-
New Features
- Add compatibility with Unity 2020.1
- Add support for Unity XR Platform (OpenVR, Oculus, and Windows MR)
- VIU Settings automatically installs proper XR Loader from PackageManager for supported devices
- OpenVR XR Plugin
- Oculus XR Plugin
- Windows XR Plugin
- VIU Settings automatically installs proper XR Loader from PackageManager for supported devices
- Add support for Oculus controller render model (Requires Oculus SDK)
- Add new ControllerButton.DPadCenter & ControllerButton.DPadCenterTouch
- Also change VIUSettings.virtualDPadDeadZone default value from 0.15 to 0.25
- This settings is not available in VIU Settings UI yet, but can be manually modified in HTC.UnityPlugin/ViveInputUtility/Resources/VIUSettings.asset
-
Changes
- Now use relative path when choosing Oculus Android AndroidManifest.xml file with picker (#175)
- Update ControllerManagerSample
- Fix support for StickyGrabbables
- Clean up side cases where updateactivity was needed
- Add more button options for laser pointer
- Fix typo
- Slightly change ColliderEventCaster's behaviour
- Now IColliderEventPressUpHandler will be treggered only if IColliderEventPressDownHandler also implemented
- This is for aligning IPointerUpHandler and IPointerDownHandler behaviour
- Improve Grabbable
- Now BasicGrabbable & StickyGrabbable able to accept more then one grab button
- Add new property primaryGrabButton so it can be specified with VIU ControllerButton
- Obsolete property grabButton and add new property secondaryGrabButton as a substitute
- Note that you must setup ViveColliderEventCaster properly to send the specified grab button event
- Now BasicGrabbable & StickyGrabbable able to accept more then one grab button
- Improve Teleportable
- Now Teleportable able to accept more then one teleport button
- Add new property PrimeryTeleportButton so it can specify with VIU ControllerButton
- Obsolete property teleportButton and add new property SecondaryTeleportButton as a substitute
- Note that you must setup ViveRaycaster properly to send the specified teleport button event
- Add new property TriggeredType
- ButtonUp : perform teleport on button press up (default)
- ButtonDown : perform teleport on button press down
- ButtonClick : perform teleport on button press up only if pointed object when press down/up are the same
- Add new property RotateToHitObjectFront
- When set to true, teleportation will rotate pivot front to hit object front
- Add new property TeleportToHitObjectPivot
- When set to true, teleportation will move pivot to hit object pivot instead of the hit point
- Add new property UseSteamVRFade
- Only works when SteamVR Plugin is installed
- When set to false or SteamVR Plugin is not installed, the teleportation will delay for half of fadeDuration without fading effect
- This provides an option for developer to implement their custom fading effect in the OnBeforeTeleport event
- Add event OnBeforeTeleport(Teleportable src, RaycastResult hitResult, float delay)
- Emit before fade duration start counting down
- Usually delay argument is half of fade duration (0 if fadeDuration is ignored)
- Possible usage is to start custom fading effect in this callback
- Add event OnAfterTeleport(Teleportable src, RaycastResult hitResult, float delay)
- Emit after teleportation is performed
- Add static event OnBeforeAnyTeleport(Teleportable src, RaycastResult hitResult, float delay)
- Static version of OnBeforeTeleport
- Emit before OnBeforeTeleport
- Add static event OnAfterAnyTeleport(Teleportable src, RaycastResult hitResult, float delay)
- Static version of OnAfterTeleport
- Emit before OnAfterTeleport
- Add property AdditionalTeleportRotation
- The rotation value will be multiplied on the target (around pivot) when teleporting
- Possible usage is to set the value (according to other input like pad or joystick direction) in the OnBeforeTeleport callback
- Add method AbortTeleport()
- Cancel the teleportation during fading
- Possible usage is to abort in the OnBeforeTeleport callback to perform a custom teleportation
- Another usage is to interrupt the fade-in effect progress so that the Teleportable able to trigger next teleport event immediatly
- Add new property PrimeryTeleportButton so it can specify with VIU ControllerButton
- Now Teleportable able to accept more then one teleport button
-
Bug Fixes
- Fix left Cosmos controller did not bind button X and Y
- Fix saving of Oculus Android XML path setting (#175)
- Fix applying some recommended settings didn't trigger editor to compile
- Fix "recommended settings" button in VIU Settings disappeared after exiting editor play mode
-
Bug Fix
- Fix device AngularVelocity have zero value when UnityEngineVRModule activated
- Fix showing wrong model when Oculus Quest Controller connected
- Fix SteamVR_Action callback function isn't working when VIU input system is activated
- Fix bumper key isn't working when Vive Cosmos Controller connected
- Fix controller scroll isn't working in WaveVRModule
-
Improvement
- Now support WaveVR SDK new haptic API
- Hide most "field never assigned" warnings for serialized field in MonoBehaviour
- Add static controller model for Valve Index Controller
- Avoid ListPool from ambiguous reference (when Core RP Library installed)
- Bug Fix
- Fix SteamVR Plugin v2.4.5 incompatibility due to action manifest path changes 5fb63198
- Fix some Oculus(Android) recommend settings not working in Unity 2019.1 or newer 1c8ebf78
-
Improvement
- Add platform supported define symbols
- Add VIVE Cosmos support
- Add Valve Index support
- Update bindings for Index controller to allow trackpad and thumbstick to work individually
- Add Oculus Quest support
- Add Oculus Rift S support
- Add Unity XR input supports Oculus (Android)
- Update support WaveVR SDK 3.0.2 requires VR Supported
- Add support to WaveVR SDK 3.1
- Add default and custom AndroidManifest path in VIU Settings
- Add custom controller model in Simulator
- Add system input for left Oculus controller (OculusVRModule/UnityNativeModule)
- Reduce Component Menu path (HTC/VIU -> VIU)
- [VIUSettings] Update VIVE to OpenVR
- [VIUSettings] Update VIVE Focus to WaveVR
- [VIUSettings] Update Oculus (Android) to Oculus Android
- [VIUSettings] Update Oculus Rift & Touch to Oculus Desktop
- [VIUSettings] Update Oculus VR SDK download link
- [VIUSettings] Update Oculus Go to Oculus (Android)
-
Bug Fix
- [GoogleVRModule] Fix null exception and no input issue
- [PackageManager] Fix assertion error and null exception
- [VIUSettings] Fix no Oculus (Android) option
- [WaveVRModule] Fix cannot teleport in ControllerManagerSample scene
- [SteamVRInputBinding] Fix partial input bindings for VIVE Tracker
- [SteamVRModule] Fix Override Model bug
- [OculusVRModule] Fix no Axis2D(Touchpad) for Oculus Go controller
- [SteamVRModule] Fix no Cosmos grip button input
-
Improvement
- Replace WWW to UnityWebRequest
- Pointer3DInputModule no longer set EventSystem to DontDestroyOnLoad
- Add VRModuleInput2DType
- Split VIUSettings into partials
- Add VIVE Cosmos controller enum
- Improve OculusVR support
- Add install package button in VIUSettings
- Add WaveVR SDK 3.0.2 support
- Add autoScaleReticle setting
-
Bug Fix
- [OculusVRModule] Fix serial number conflict on Oculus device
- [UnityEngineVRModule] Fix input manager index out of bound
- [SteamVRModule] Fix swapping controllers will cause input events showing on wrong device
- [WaveVRModule] Fix left hand mode cannot show controller model
- [ExampleScene] Fix BodyRole center position transformation
- [ExampleScene] Fix ResetButton teleports if moved after Start()
-
Improvement
- [WaveVRModule] Support WaveVR simulator (Enable VIVE Focus support in Editor mode)
-
Bug Fix
- [WaveVRModule] Fix WaveVR tracking glitter issue
- [WaveVRModule] Fix VIU simulator cannot launch (ONLY enable VIU simulator)
- Improvement
- [ViveInput] Add new procedure vibration API (only works with SteamVR v2)
using HTC.UnityPlugin.Vive;
ViveInput.TriggerHapticVibrationEx<TRole>(
TRole role,
float durationSeconds = 0.01f,
float frequency = 85f,
float amplitude = 0.125f,
float startSecondsFromNow = 0f)
- Bug Fix
- [ViveInput] Fix issue that TriggerHapticPulse is not working
- [Utility] Fix bug in IndexedSet indexer setter.
- [WaveVRModule] Fix VIU example freezes after launched
- [OculusVRModule] Fix OculusVRModule not recognizing GearVR or OculusGO correctly
- [ExternalCamera] Fix not working with SteamVR v2
- [ExternalCamera] Fix SteamVR_ExternalCamera setting sceneResolutionScale incorrectly in some cases
- [ExternalCamera] Fix potential RenderTexture created by SteamVR_ExternalCamera having incorrect ColorSpace
-
New Features
- SteamVR Plugin v2.0/v2.1 support
- SteamVR New Input System support (Guide)
-
Improvement
- Now compatible with Google VR SDK v1.170.0
- Add ControllerAxis.Joystick for Windows Mixed Reality Motion Controller
- Extend ControllerButton (DPadXXX are virtual buttons simulated from trackpad/thumbstick values)
- BKey (Menu)
- BkeyTouch (MenuTouch)
- Bumper (Axis3)
- BumperTouch (Axis3Touch)
- ProximitySensor
- DPadLeft
- DPadLeftTouch
- DPadUp
- DPadUpTouch
- DPadRight
- DPadRightTouch
- DPadDown
- DPadDownTouch
- DPadUpperLeft
- DPadUpperLeftTouch
- DPadUpperRight
- DPadUpperRightTouch
- DPadLowerRight
- DPadLowerRightTouch
- DPadLowerLeft
- DPadLowerLeftTouch
-
Known Issue
- When working with SteamVR Plugin v2, VIU can get poses or send vibration pulses for all connected devices, but only able to connect button inputs from up to 2 Vive Controllers or 10 Vive Trackers (due to the limitation of SteamVR input sources). If you know how to work around, please let us know.
-
New Features
- Wave VR Plugin v2.1.0 support
- Add Oculus Go support (requires Oculus VR plugin)
-
Improvement
- [WaveVRModule] Add 6 DoF Controller Simulator (Experimental)
- [RenderModelHook] Now able to load Wave VR generic controller model
- [Example2] Add drop area that using physics collider
- [Example3] Make scroll delta tunable from the Editor
- [VIUSettings] Add WVR virtual arms properties
- [BindingUI] Make un-recognized device visible in the device view (shown in VIVE device icon)
-
Bug Fix
- [VRModule] Fix sometimes SteamVRModule activated but not polling any device pose/input
-
Improvement
- Improve simulator module
- Add instruction UI
- Add group control (devices move alone with camera)
- See Simulator for more detail
- Add ReticlePose.IReticleMaterialChanger interface, better way to indicate different type of pointing object
- Add support for WaveVR SDK v2.0.37
- Improve simulator module
-
Bug fix
- Fix tracking device pose not applying scale from the origin transform
- Fix SteamVRModule reporting wrong input-focus state
- Fix ViveRigidPoseTracker broke after re-enabled
- Fix PoseModifier not work correctly ordered by priority value
- Bug fix
- Fix define symbols sometimes not handle correctly when switching build target
- Disable vr support if device list is empty
- Add code to avoid NullReferenceException in VRModule
- Add SetValueByIndex method to IndexedTable
- Fix StickyGrabbable not working in certain cases
-
New features
- VIVE Focus Support
- Required Unity 5.6 or later version
- Download and install WaveVR SDK Unity plugin from https://hub.vive.com/profile/material-download
- Enable VIVE Focus support under Edit > Preference > VIU Settings
- VIVE Focus Support
-
Bug fix
- Fix no tracking devices dectected when SteamVR plugin v1.2.3 is installed
- Fix compile error in Unity 2018.1
- Fix VIUSettings changes not saved into asset data file
-
New features
-
Improvement
- Now compatible with SteamVR v1.1.1~v1.2.3
- Move some properties into VIU Settings
- Removed:
- ViveRoleBindingHelper.OverrideConfigPath
- ViveRoleBindingHelper.BindingConfig.apply_bindings_on_load
- ViveRoleBindingHelper.BindingConfig.toggle_interface_key_code
- ViveRoleBindingHelper.BindingConfig.toggle_interface_modifier
- ViveRoleBindingHelper.BindingConfig.interface_prefab
- Replaced with:
- VIUSettings.bindingConfigFilePath
- VIUSettings.autoLoadBindingConfigOnStart
- VIUSettings.bindingInterfaceSwitchKey
- VIUSettings.bindingInterfaceSwitchKeyModifier
- VIUSettings.bindingInterfaceObject
- Removed:
-
Bug fix
- Fix compiler error caused by wrong define symbols.
-
VIU Settings
- Setting changes is saved in project resource folder named VIUSettings.asset.
- VIU Settings will load default setting automatically if VIUSettings.asset resource not found.
-
Daydream Support
- Requires Android platform support, Unity 5.6 or later and GoogleVR plugin.
- Requires checking the Daydream support toggle in Edit -> Preferences -> VIUSettings
- Beware of Daydream controller have less buttons.
- Remember to define and give the VR origin a headset height for Daydream device user.
-
Simulator
- Simulator is a fake VRModule that spawn/remove fake devices, create fake tracking and fake input events.
- Requires checking the Simulator support toggle in Edit -> Preferences -> VIUSettings
- Simulator only enabled when no VR device detected.
- There are 2 ways to manipulate the fake devices
- Handle events by script manually
- HTC.UnityPlugin.VRModuleManagement.VRModule.Simulator.onUpdateDeviceState
- Invoked each frame when VRModule performs a device state update
- Write device state into currState argument to manipulate devices
- Read-only argument prefState preserved device state in last frame
- HTC.UnityPlugin.VRModuleManagement.VRModule.Simulator.onUpdateDeviceState
- Use Keyboard-Mouse control (can be disabled in VIUSettings)
- Add/Remove/Select devices
- [0~9] Add and select device N if device N is not selected, otherwise, deselect it
- [` + 0~5] Add and select device 10+N if device 10+N is not selected, otherwise, deselect it
- [Shift + 0~9] Remove and deselect device N
- [Shift + ` + 0~5] Remove and deselect device 10+N
- Control selected device
- [W] Move selected device forward
- [S] Move selected device backward
- [D] Move selected device right
- [A] Move selected device left
- [E] Move selected device up
- [Q] Move selected device down
- [C] Roll+ selected device
- [Z] Roll- selected device
- [X ] Reset selected device roll
- [ArrowUp] Pitch+ selected device
- [ArrowDown] Pitch- selected device
- [ArrowRight] Yaw+ selected device
- [ArrowLeft] Yaw- selected device
- [MouseMove] Pitch/Yaw selected device
- [MouseLeft] Press Trigger on selected device
- [MouseRight] Press Trackpad on selected device
- [MouseMiddle] Press Grip on selected device
- [Hold Shift + MouseMove] Touch Trackpad on selected device
- Control HMD
- [T] Move hmd forward
- [G] Move hmd backward
- [H] Move hmd right
- [F] Move hmd left
- [Y] Move hmd up
- [R] Move hmd down
- [N] Roll+ hmd
- [V] Roll- hmd
- [B] Reset hmd roll
- [I] Pitch+ hmd
- [K] Pitch- hmd
- [L] Yaw+ hmd
- [J] Yaw- hmd
- Add/Remove/Select devices
- Handle events by script manually
- Notice that when the simulator is enabled, it is started with 3 fake device
- [0] HMD (selected)
- [1] Right Controller
- [2] Left Controller
-
Bug fix
- [VRModule] Fix compile error in OculusVRModule.cs #14
- [Pointer3D] Fix IPointerExit not handled correctly when disabling a raycaster #16
- [Pointer3D] Fix IPointerPressExit, IPointerUp doesn't execute in some cases
- Add Pointer3DEventData.pressProcessed flag to ensure Down/Up processed correctly
-
Improvement
- Add new struct type HTC.UnityPlugin.Utility.RigidPose to replace HTC.UnityPlugin.PoseTracker.Pose
- Utility.RigidPose inherit all members in PoseTracker.Pose
- Add forward, up, right property getter
- Obsolete struct HTC.UnityPlugin.PoseTracker.Pose (will be removed in future version) to avoid type ambiguous with UnityEngine.Pose (new type in Unity 2017.2)
- If you somehow want to using HTC.UnityPlugin.PoseTracker and UnityEngine.Pose in your script at the same time, please use full type name or add type alias to avoid ambiguous compile error
using HTC.UnityPlugin.PoseTracker; using UnityEngine; using Pose = UnityEngine.Pose; public class MyPoseTracker : BasePoseTracker { public Pose m_pose; ... }
- Change some recommended setting value
- Now binding interface switch is recommended as enable only if Steam VR plugin is imported
- Now external camera interface switch is recommended as enable only if Steam VR plugin is imported
- Now VIU system game object will be auto generated only if nessary
- Add new struct type HTC.UnityPlugin.Utility.RigidPose to replace HTC.UnityPlugin.PoseTracker.Pose
-
New features
- Add recommended VR project settings notification window
-
Bug fix
- Fix compile error in Unity 5.5/5.6
- [VRModule] Fix UnityEngineVRModule not removing disappeared device correctly
- In Unity 2017.2, InputTracking.GetNodeStates sometimes returns ghost nodes at the beginning of play mode.
- [Teleportable] Remove a potential null reference
- This happens when SteamVR plugin is imported and no SteamVR_Camera exist.
-
Improvement
- [Pointer3D] Now Pointer3DInputModule shows status in EventSystem's inspector preview window
- [Pointer3D] Let Pointer3DInputModule behave more consistent with StandaloneInputModule
- Now IPointerEnterHandler / IPointerExitHandler only triggered once for each pointer, pressing buttons won't trigger Enter/Exit anymore.
- [Pointer3D] Add IPointer3DPressEnterHandler / IPointer3DPressExitHandler
- Their behaviours are like IPointerEnterHandler/IPointerExitHandler, but press enter happend when the button is pressed and moved in, and press exit on button released or pointer moved out.
- [SteamVRCameraHook] Fix not expending head-eye-ear correctly
- [VRModule] Fix update timing issue
- This fix VivePoseTracker tracking is delayed in editor playing mode.
- New features
- [ExternalCameraHook] Add externalcamera.cfg config interface
- The interface is built into project when VIU_EXTERNAL_CAMERA_SWITCH symbol is defined.
- It is automatically activated with the external camera quad view.
- [ExternalCameraHook] Add externalcamera.cfg config interface
-
Changes
- Now you can fully disable the binding interface switch by removing the VIU_BINDING_INTERFACE_SWITCH symbol
- That means nologer
- Now you can fully disable the binding interface switch by removing the VIU_BINDING_INTERFACE_SWITCH symbol
-
Bug fix
- [ViveRole] Fix HandRole.ExternalCamera not mapping to tracker in some cases
- [ViveRole] Fix ViveRole.IMap.UnbindAll() to work correctly
- [BindingInterface] Fix some info updating and animation issue
- [VivePose] Now GetPose returns Pose.identity instead of default(Pose) for invalid device
-
New features
- Add notification when new version released on Github.
- Add VRModule class to bridge various VR SDK. It currently supports SteamVR plugin, Oculus VR plugin and Unity native VR/XR interface.
- void VRModule.Initialize(): Create and initilize VRModule manager instance.
- VRModuleActiveEnum VRModule.activeModule: Returns the activated module.
- IVRModuleDeviceState VRModule.GetCurrentDeviceState(uint deviceIndex): Returns the virtual VR device status.
- event NewPosesListener VRModule.onNewPoses: Invoked after virtual VR device status is updated.
- event DeviceConnectedListener VRModule.onDeviceConnected: Invoked after virtual VR device is connected/disconnected.
- event ActiveModuleChangedListener VRModule.onActiveModuleChanged: Invoked when a VR module is activated.
- New binding interface using overlay UI. By default, the binding interface can be enabled by pressing RightShift + B in play mode.
- Add define symbols
- VIU_PLUGIN: Defined when Vive Input Utility plugin is imported in the project.
- VIU_STEAMVR: Defined when SteamVR plugin is imported in the project.
- VIU_OCULUSVR: Defined when OculusVR plugin (OVRPlugin) is imported in the project.
- VIU_BINDING_INTERFACE_SWITCH: Define it to let the project be able to switch binding interface by pressing RightShift + B in play mode.
- VIU_EXTERNAL_CAMERA_SWITCH: Define it to let the project be able to switch external camera quad view by pressing RightShift + M in play mode.
- Add new role HandRole.ExternalCamera (Alias for HandRole.Controller3).
- By default, it is mapping to the 3rd controller, if 3rd controller not available, then mapping to the first valid generic tracker.
- ExternalCameraHook uses mapping as the default tracking target.
-
New componts
- [ViveInputVirtualButton] Use this helper component to combine multiple Vive inputs into one virtual button.
-
Improvement
- [ViveInput] Add more controller buttons, use ViveInput.GetPress(role, buttonEnum) to get device button stat
- System (Only visible when sendSystemButtonToAllApps option is on)
- Menu
- MenuTouch
- Trigger
- TriggerTouch
- Pad
- PadTouch
- Grip
- GripTouch
- CapSenseGrip
- CapSenseGripTouch
- AKey
- AKeyTouch
- OuterFaceButton (Alias for Menu)
- OuterFaceButtonTouch (Alias for MenuTouch)
- InnerFaceButton (Alias for Grip)
- InnerFaceButtonTouch (Alias for GripTouch)
- [ViveInput] Add controller axis enum, use ViveInput.GetAxis(role, axisEnum) to get device axis value
- PadX
- PadY
- Trigger
- CapSenseGrip
- IndexCurl
- MiddleCurl
- RingCurl
- PinkyCurl
- [ViveRole] Role mapping/binding mechanism is improved and become more flexible.
- Now different devices can bind to same role at the same time.
- If a unconnected device is bound to a role, that role can still map to other connected device.
- [ViveRole] Obsolete functions that retrieve device status and property, use static API in VRModule instead.
- ViveRole.TryGetDeviceIndexBySerialNumber: Use VRModule.TryGetDeviceIndex instead.
- ViveRole.GetModelNumber: Use VRModule.GetCurrentDeviceState(deviceIndex).modelNumber instead
- ViveRole.GetSerialNumber: Use VRModule.GetCurrentDeviceState(deviceIndex).serialNumber instead
- ViveRole.GetDeviceClass: Use VRModule.GetCurrentDeviceState(deviceIndex).deviceClass instead
- [ViveRoleBindingsHelper] Now will automatically load bindings from "vive_role_bindings.cfg", no need to be in the scene to work.
- [RenderModelHook] Add override model and shader option.
- [ExternalCameraHook] Now ExternalCameraHook will track the HandRole.ExternalCamera by default.
- [ExternalCameraHook] Now will be added into scene automatically if "externalcamera.cfg" exist when start playing, no need to add to scene manually.
- [ExternalCameraHook] You can now enable static External Camera quad view (without tracking to a device) if
- VIU_EXTERNAL_CAMERA_SWITCH symbol is defined.
- externalcamera.cfg exist.
- RightShift + M pressed in play mode.
- [BasicGrabbable, StickyGrabbable, Draggable] Add unblockable grab/drag option.
- [ViveInput] Add more controller buttons, use ViveInput.GetPress(role, buttonEnum) to get device button stat
-
Bug fix
- [ViveRoleProperty] Fix not handling serialized data right in inspector.
- [PoseEaser] Now use unscaled time instead to avoid from being effected by time scale.
-
Resloves tracking pose not updating in Unity 5.6
-
Add SnapOnEnable option to ViveRigidPoseTracker component
-
Add mouse button mapping options to ViveRaycaster component
-
Fix crashes when clicking dropdown UI in RoleBindingExample scene
-
Fix auto-bake-lightmap errors in example scenes
-
Correct rigidbody null check in Draggable and Grabbable scripts
-
Fix ViveRoleProperty returns wrong type & value issue#9
-
Now Teleportable component will find target & pivot automatically issue#8
-
Remove warning in LineRenderer
-
Fix remapping errors from HandRoleHandler issue#1
-
Fix ViveRoleProperty.ToRole always returns Invalid issue#6
-
Fix ViveRaycaster not working when app loses focus issue#7
-
New ViveRole System
- ViveRole is a mapping system that relate logic roles to OpenVR device indices.
- Each role has their own auto-mapping logic, and binding API allow user to customize the relation.
- Both mapping (role, device index) binding (role, device serial number) are one-on-one relation
- When a device serial number is binding to a role, it means that role is always mapping to the specific device
- If the bound device is disconnected, the bound role will not mapping to any device index (invalid).
- Currently there are 4 built-in roles:
- DeviceRole: role that mapping to all 16 devices, ordered exactly same as device index.
- HandRole: role related to standard Vive controllers, with basic RightHand/LeftHand recognition.
- TrackerRole: role related to Vive trackers, first conntected tracker will be mapping to Tracker1.
- BodyRole: role related to devices that tracking human limbs.
- Creating custom role in an instant by adding ViveRoleEnumAttribute to your enum type
- Customizing auto-mapping logic by implementing ViveRoleHandler<EnumType> and call ViveRole.AssignMapHandler()
-
New query APIs that accept any ViveRoles, ex.
- Use ViveRole.GetDeviceIndexEx(TrackerRole.Tracker1) to get tracker's device index.
- Use VivePose.GetPoseEx(TrackerRole.Tracker1) to get tracker's tracking data
- Use ViveInput.GetPressEx(TrackerRole.Tracker1, ControllerButton.Trigger) to get tracker's trigger event.
- Use ViveInput.AddListenerEx(TrackerRole.Tracker1, ControllerButton.Trigger, ButtonEventType.Press) to listen tracker's trigger event.
-
New sample scene "RoleBindingExample"
- This sample scene demonstrate how to bind device a role and save/load those bindings
-
New ViveRoleBindingsHelper helper component
- Adding this component to scene to auto-load bindings.
- Call function SaveRoleBindings(filePath) to save bindings manually.
- Call function LoadRoleBindings(filePath) to load bindings manually.
-
New RenderModelHook helper component
- This script creates and handles SteamVR_RenderModel, so you can show render model specified by ViveRole insdead of device index.
-
New ExternalCameraHook helper component
- This script creates and handles SteamVR_ExternalCamera, and let camera tracking device specified by ViveRole insdead of device index.
- Setup step-by-step
- Add a file called externalcamera.cfg in the root of your project. (the config file sample can be found here)
- Add ExternalCameraHook component into your scene. (don't remove the auto-generated SteamVR_Render component)
- Select ExternalCameraHook gameobject and set the device role in inspector. (or set in script, ex. ExternalCameraHook.viveRole.SetEx(TrackerRole.Tracker1))
- If you are using 3rd Vive standard controller as external camera, set to HandRole.Controller3 (recommended)
- If you are using ViveTracker as external camera, set to TrackerRole.Tracker1 (recommended)
- (Optional) Bind the external camera tracking device to the role
- Open "RoleBindingExample" scene
- Scan the specific device (for external camera)
- Bind to the specific role (ex. HandRole.Controller3 or TrackerRole.Tracker1)
- Save bindings
- Back to your project scene
- Add ViveRoleBindingsHelper component into your scene. (to load bindings automatically)
- Now external camera should always tracking at the device you wanted.
- Make compatible with SteamVR plugin 1.2.1
- Fix a bug in ColliderEventCaster that cause crash when disabling event caster and handling events at the same time.
- Change default teleportButton in Teleportable to TeleportButton.Pad instead of TeleportButton.Trigger
- Containers optimize
- Re-write IndexedTable, should be more efficient
- Add read-only interface
- Make compatible with SteamVR plugin 1.2.0
-
Update guide document
- Reveal used namespace in some example scripts.
- Add ready-to-used component list.
-
New controllers prefab that handles both hand EventRaycaster, ColliderEventCaster, guidelines and models
- Hide controllers' models when grabbing or dragging
- Enable EventRaycaster on pad touched, otherwise enable ColliderEventCaster
-
Pointer3D
- Expose Pointer3DRaycaster at Pointer3DEventData.raycaster, to get Raycaster from eventData easily.
- Move dragThreshold and clickInterval settings from Pointer3DInputModule to Pointer3DRaycaster.
- Re-design RaySegmentGenerator. Now RaycastMode setting is replaced by applying ProjectionGenerator & ProjectileGenerator component with Pointer3DRaycaster. Add or enable only one generator at a time, or which generator used by the raycaster is unexpected. Also customize your own generators by implementing BaseRaySegmentGenerator.
-
ColliderEvent
- Now OnColliderEventClick won't invoke if caster has leaved the pressed object.
- Fix a bug in ColliderEventCaster that doesn't handle hovered colliders correctly.
- Fix a bug that ColliderEventCaster doesn't handle event correctly when disable.
- Add ColliderEventTrigger component, work just like built-in EventTrigger
-
Add Pointer3DEventData extensions
Pointer3DRaycaster PointerEventData.GetRaycaster3D()
bool PointerEventData.TryGetRaycaster3D(out Pointer3DRaycaster raycaster)
TRaycaster3D PointerEventData.GetRaycaster3D<TRaycaster3D>()
bool PointerEventData.TryGetRaycaster3D<TRaycaster3D>(out TRaycaster3D raycaster)
- Add ColliderEventData extensions
TEventCaster ColliderEventData.GetEventCaster<TEventCaster>()
bool ColliderEventData.TryGetEventCaster<TEventCaster>(out TEventCaster eventCaster)
- Add VivePointerEventData extensions
bool PointerEventData.IsViveButton(HandRole hand)
bool PointerEventData.IsViveButton(ControllerButton button)
bool PointerEventData.IsViveButton(HandRole hand, ControllerButton button)
bool PointerEventData.TryGetViveButtonEventData(out VivePointerEventData viveEventData)
- Add ViveColliderEventData extensions
bool ColliderEventData.IsViveButton(HandRole hand)
bool ColliderEventData.IsViveButton(ControllerButton button)
bool ColliderEventData.IsViveButton(HandRole hand, ControllerButton button)
bool ColliderEventData.TryGetViveButtonEventData(out ViveColliderButtonEventData viveEventData)
bool ColliderAxisEventData.IsViveTriggerValue()
bool ColliderAxisEventData.IsViveTriggerValue(HandRole hand)
bool ColliderAxisEventData.TryGetViveTriggerValueEventData(out ViveColliderTriggerValueEventData viveEventData)
bool ColliderAxisEventData.IsVivePadAxis()
bool ColliderAxisEventData.IsVivePadAxis(HandRole hand)
bool ColliderAxisEventData.TryGetVivePadAxisEventData(out ViveColliderPadAxisEventData viveEventData)
-
Improve BasicGrabbable component, and Draggable(in 3D Drag example) as well
- Now grabbed object can collide properly into other colliders.
- Now handles multiple grabbers.
- Add speed factor parameter to adjast grabbed object following speed.
- Add afterGrabbed & beforeRelease event handler.
-
Add dragging state material in MaterialChanger.
-
Fix a bug in Teleportable so that GuideLineDrawer won't draw in wrong position.
-
New containers in Utiliy
IndexedSet<TKey> // container that combinds set and list, order is not preserved, removing complexity is O(1)
OrderedIndexedSet<TKey> // container that combinds set and list, order is preserved, removing complexity is O(N)
IndexedTable<TKey, TValue> // container that combinds dictionary and list, order is not preserved, removing complexity is O(1)
OrderedIndexedTable<TKey, TValue> // container that combinds dictionary and list, order is preserved, removing complexity is O(N)
-
Add new raycast mode for Pointer3DRaycaster
- Default : one simple raycast
- Projection : raycast in a constant distance then raycast toward gravity
- Projectile : raycast multiple times alone the projectile curve using initial velocity
-
Add ViveInput.GetCurrentRawControllerState and ViveInput.GetPreviousRawControllerState.
-
BaseRaycastMethod now registered into Pointer3DRaycaster at Start instead of Awake.
-
Remove RequireComponent(typeof(BaseMultiMethodRaycaster)) attribute from BaseRaycastMethod.
-
Pointer3DRaycaster now registered into Pointer3DInputModule at Start instead of Awake.
-
EventCamera for Pointer3DRaycaster now place at root, instead of child of Pointer3DRaycaster.
-
New ColliderEventSyatem. Hover thins using collider (instead of raycast), send button events to them, handle events by EventSystem-like handlers.
- IColliderEventHoverEnterHandler
- IColliderEventHoverExitHandler
- IColliderEventPressDownHandler
- IColliderEventPressUpHandler
- IColliderEventPressEnterHandler
- IColliderEventPressExitHandler
- IColliderEventClickHandler
- IColliderEventDragStartHandler
- IColliderEventDragUpdateHandler
- IColliderEventDragEndHandler
- IColliderEventDropHandler
- IColliderEventAxisChangeHandler
-
New example scene to demonstrate how ColliderEvent works.
- Assets\HTC.UnityPlugin\ViveInputUtility\Examples\5.ColliderEvent\ColliderEvent.unity
-
Update tutorial & guide document.
-
Now HandRole defines more then 2 controllers.
-
Add some comment and description to public API.
- Fix a bug in the examples, now reticle posed correctly when scaling VROrigin.
- Fix a rare issue in Pointer3DInputModule when processing event raycast.
-
Remove example 5 & 6 from package for release(still available in full package), since they are not good standard practices in VR for avoiding motion sickness by moving the player.
-
Reset pointer's tranform(to align default laser pointer direction) in examples.
-
Adjust default threshold to proper value in PoseStablizer & Pointer3DInputModule.
-
Fix a bug in Pointer3DRaycaster that causes other input module to drive Pointer3DRaycaster(witch should be only driven by Poinster3DInputModule).
-
Now Pointer3DRaycaster can optionally show event raycast line in editor for debugging.
-
Add step by step tutorial document and example scene.
-
Replace about document with developer guide.
-
Update usage document(rewrite sample code).
-
Add copyright terms.
-
Define new controller button : FullTrigger(consider pressed only when trigger value is 1.0).
-
Fix ViveInput.GetPadPressDelta and ViveInput.GetPadTouchDelta to work properly.
-
Add scroll delta scale property for ViveRaycaster(to adjust scrolling sensitivity).
-
Add PoseEaser effect settings and PoseEaserEditor to show properties.
-
Add ViveInput.TriggerHapticPulse for triggering controller vibration.
-
Update usage document.
-
Reorder parameters in Pose.SetPose.
-
Now click interval can be configured by setting ViveInput.clickInterval.
-
Fix wrong initial status for ViveRole and ViveInput.
-
Example: showLocalAvatar (property for LANGamePlayer) won't hide shadow (hide mesh only) if set to false.
-
Separate PoseTracker module from VivePose.
-
New tracking effect PoseFreezer.
-
Reorganize folders.
-
VivePose is now pure static class (Since Unity 5.3.5 fixed issue with double rendering of canvas on Vive VR, PoseUpdateMode is no longer needed).
-
New components CanvasRaycastMethod and CanvasRaycastTarget.
- CanvasRaycastMethod works like GraphicRaycastMethod, but use CanvasRaycastTarget component to target canvases, instead of asigning canvas property once at a time.
-
Fix misspelling from ConvertRoleExtention to ConvertRoleExtension
-
New containter class IndexedSet<T>
-
New class ObjectPool<T> and relative class ListPool<T>, DictionaryPool<T>, IndexedSetPool<T>, to reduce allocating new containers.
-
Change some data structure from LinkList to InedexedSet (VivePose, Pointer3DInputModule, BaseMultiMethodRaycaster, BaseVivePoseTracker).
-
Rewrite GraphicRaycastMethod to align GraphicRaycaster's behaviour.
-
New API VivePose.SetPose().
-
New API VivePose.GetVelocity().
-
New API VivePose.GetAngularVelocity().
-
Fix some null reference in VivePose.