2021년 4학년 1학기 기업연계프로젝트2 컴퓨터소프트웨어공학과 <원광투어팀> 팀장 : 송유진 팀원 : 김나영, 이경희, 한유진
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

899 lines
41 KiB

5 years ago
  1. # Vive Input Utility for Unity - v1.12.0
  2. Copyright (c) 2016-2020, HTC Corporation. All rights reserved.
  3. ## Changes for v1.12.2:
  4. * New Features
  5. - Add ControllerButtonMask to able to mask out multiple buttin input simultaneously
  6. ```csharp
  7. // return true if right controller trigger or pad button pressed
  8. ViveInput.GetAnyPress(HandRole.RightHand, new ControllerButtonMask(ControllerButton.Trigger, ControllerButton.Pad))
  9. // return true if both right controller trigger and pad button pressed
  10. ViveInput.GetAllPress(HandRole.RightHand, new ControllerButtonMask(ControllerButton.Trigger, ControllerButton.Pad))
  11. ```
  12. * Bug Fixes
  13. - Fix error when Wave Essence RenderModel module is installed
  14. - Fix teleport in wrong height for some device in example 6
  15. ## Changes for v1.12.0:
  16. * New Features
  17. - Add support for Wave XR Plugin
  18. - Add support for OpenVR XR Plugin preview4 and above
  19. - Add support for Oculus Link Quest
  20. * Changes
  21. - Move VIUSettings.asset default path to folder under Assets\VIUSettings\Resources
  22. * Bug Fixes
  23. - Optimize performance updating define symbols #186
  24. - Fix recommended settings did not skip check for values that are already using recommended value
  25. - Fix compile error when using Oculus Integration Unity Plugin v19 and above
  26. - Fix losing materials in example scenes when Universal Render Pipeline is applied
  27. - Fix GetReferencedAssemblyNameSet() for Unity 2017.3 and 2017.4
  28. - Fix SymbolRequirement.reqAnyMethods validation throwing exception when any argument type not found
  29. - Fix UnityWebRequest.SendWebRequest() in early Unity version (5.4 - 2017.1)
  30. * Known Issue
  31. - Importing Oculus Integration v19 before upgrading VIU to v1.12.0 will cause compile error and brake VIUSettings.
  32. - Workaround: manually clear the "Scripting Define Symbols" in Player Settings should solve it
  33. ## Changes for v1.11.0:
  34. * New Features
  35. - Add compatibility with **Unity 2020.1**
  36. - Add support for **Unity XR Platform** (OpenVR, Oculus, and Windows MR)
  37. - VIU Settings automatically installs proper XR Loader from **PackageManager** for supported devices
  38. - **OpenVR XR Plugin**
  39. - **Oculus XR Plugin**
  40. - **Windows XR Plugin**
  41. - Add support for Oculus controller render model (Requires [Oculus SDK](https://assetstore.unity.com/packages/tools/integration/oculus-integration-82022))
  42. - Add new **ControllerButton.DPadCenter** & **ControllerButton.DPadCenterTouch**
  43. - Also change **VIUSettings.virtualDPadDeadZone** default value from 0.15 to **0.25**
  44. - This settings is not available in VIU Settings UI yet, but can be manually modified in HTC.UnityPlugin/ViveInputUtility/Resources/**VIUSettings.asset**
  45. * Changes
  46. - Now use relative path when choosing Oculus Android AndroidManifest.xml file with picker (#175)
  47. - Update **ControllerManagerSample**
  48. - Fix support for StickyGrabbables
  49. - Clean up side cases where updateactivity was needed
  50. - Add more button options for laser pointer
  51. - Fix typo
  52. - Slightly change **ColliderEventCaster**'s behaviour
  53. - Now IColliderEventPressUpHandler will be treggered only if IColliderEventPressDownHandler also implemented
  54. - This is for aligning IPointerUpHandler and IPointerDownHandler behaviour
  55. - Improve **Grabbable**
  56. - Now **BasicGrabbable** & **StickyGrabbable** able to accept more then one grab button
  57. - Add new property **primaryGrabButton** so it can be specified with VIU ControllerButton
  58. - Obsolete property grabButton and add new property **secondaryGrabButton** as a substitute
  59. - Note that you must setup **ViveColliderEventCaster** properly to send the specified grab button event
  60. - Improve **Teleportable**
  61. - Now **Teleportable** able to accept more then one teleport button
  62. - Add new property **PrimeryTeleportButton** so it can specify with VIU ControllerButton
  63. - Obsolete property teleportButton and add new property **SecondaryTeleportButton** as a substitute
  64. - Note that you must setup **ViveRaycaster** properly to send the specified teleport button event
  65. - Add new property **TriggeredType**
  66. - **ButtonUp** : perform teleport on button press up (default)
  67. - **ButtonDown** : perform teleport on button press down
  68. - **ButtonClick** : perform teleport on button press up only if pointed object when press down/up are the same
  69. - Add new property **RotateToHitObjectFront**
  70. - When set to true, teleportation will rotate pivot front to hit object front
  71. - Add new property **TeleportToHitObjectPivot**
  72. - When set to true, teleportation will move pivot to hit object pivot instead of the hit point
  73. - Add new property **UseSteamVRFade**
  74. - Only works when [SteamVR Plugin](https://assetstore.unity.com/packages/tools/integration/steamvr-plugin-32647) is installed
  75. - When set to false or SteamVR Plugin is not installed, the teleportation will delay for half of fadeDuration without fading effect
  76. - This provides an option for developer to implement their custom fading effect in the OnBeforeTeleport event
  77. - Add event **OnBeforeTeleport(Teleportable src, RaycastResult hitResult, float delay)**
  78. - Emit before fade duration start counting down
  79. - Usually delay argument is half of fade duration (0 if fadeDuration is ignored)
  80. - Possible usage is to start custom fading effect in this callback
  81. - Add event **OnAfterTeleport(Teleportable src, RaycastResult hitResult, float delay)**
  82. - Emit after teleportation is performed
  83. - Add static event **OnBeforeAnyTeleport(Teleportable src, RaycastResult hitResult, float delay)**
  84. - Static version of OnBeforeTeleport
  85. - Emit before OnBeforeTeleport
  86. - Add static event **OnAfterAnyTeleport(Teleportable src, RaycastResult hitResult, float delay)**
  87. - Static version of OnAfterTeleport
  88. - Emit before OnAfterTeleport
  89. - Add property **AdditionalTeleportRotation**
  90. - The rotation value will be multiplied on the target (around pivot) when teleporting
  91. - Possible usage is to set the value (according to other input like pad or joystick direction) in the OnBeforeTeleport callback
  92. - Add method **AbortTeleport()**
  93. - Cancel the teleportation during fading
  94. - Possible usage is to abort in the OnBeforeTeleport callback to perform a custom teleportation
  95. - Another usage is to interrupt the fade-in effect progress so that the Teleportable able to trigger next teleport event immediatly
  96. * Bug Fixes
  97. - Fix left Cosmos controller did not bind button X and Y
  98. - Fix saving of Oculus Android XML path setting (#175)
  99. - Fix applying some recommended settings didn't trigger editor to compile
  100. - Fix "recommended settings" button in VIU Settings disappeared after exiting editor play mode
  101. ## Changes for v1.10.7:
  102. * Bug Fix
  103. - Fix device AngularVelocity have zero value when UnityEngineVRModule activated
  104. - Fix showing wrong model when Oculus Quest Controller connected
  105. - Fix SteamVR_Action callback function isn't working when VIU input system is activated
  106. - Fix bumper key isn't working when Vive Cosmos Controller connected
  107. - Fix controller scroll isn't working in WaveVRModule
  108. * Improvement
  109. - Now support WaveVR SDK new haptic API
  110. - Hide most "field never assigned" warnings for serialized field in MonoBehaviour
  111. - Add static controller model for Valve Index Controller
  112. - Avoid ListPool from ambiguous reference (when Core RP Library installed)
  113. ## Changes for v1.10.6:
  114. * Bug Fix
  115. - Fix SteamVR Plugin v2.4.5 incompatibility due to action manifest path changes 5fb63198
  116. - Fix some Oculus(Android) recommend settings not working in Unity 2019.1 or newer 1c8ebf78
  117. ## Changes for v1.10.5:
  118. * Improvement
  119. - Add platform supported define symbols
  120. - Add VIVE Cosmos support
  121. - Add Valve Index support
  122. - Update bindings for Index controller to allow trackpad and thumbstick to work individually
  123. - Add Oculus Quest support
  124. - Add Oculus Rift S support
  125. - Add Unity XR input supports Oculus (Android)
  126. - Update support WaveVR SDK 3.0.2 requires VR Supported
  127. - Add support to WaveVR SDK 3.1
  128. - Add default and custom AndroidManifest path in VIU Settings
  129. - Add custom controller model in Simulator
  130. - Add system input for left Oculus controller (OculusVRModule/UnityNativeModule)
  131. - Reduce Component Menu path (HTC/VIU -> VIU)
  132. - [VIUSettings] Update VIVE to OpenVR
  133. - [VIUSettings] Update VIVE Focus to WaveVR
  134. - [VIUSettings] Update Oculus (Android) to Oculus Android
  135. - [VIUSettings] Update Oculus Rift & Touch to Oculus Desktop
  136. - [VIUSettings] Update Oculus VR SDK download link
  137. - [VIUSettings] Update Oculus Go to Oculus (Android)
  138. * Bug Fix
  139. - [GoogleVRModule] Fix null exception and no input issue
  140. - [PackageManager] Fix assertion error and null exception
  141. - [VIUSettings] Fix no Oculus (Android) option
  142. - [WaveVRModule] Fix cannot teleport in ControllerManagerSample scene
  143. - [SteamVRInputBinding] Fix partial input bindings for VIVE Tracker
  144. - [SteamVRModule] Fix Override Model bug
  145. - [OculusVRModule] Fix no Axis2D(Touchpad) for Oculus Go controller
  146. - [SteamVRModule] Fix no Cosmos grip button input
  147. ## Changes for v1.10.4:
  148. * Improvement
  149. - Replace WWW to UnityWebRequest
  150. - Pointer3DInputModule no longer set EventSystem to DontDestroyOnLoad
  151. - Add VRModuleInput2DType
  152. - Split VIUSettings into partials
  153. - Add VIVE Cosmos controller enum
  154. - Improve OculusVR support
  155. - Add install package button in VIUSettings
  156. - Add WaveVR SDK 3.0.2 support
  157. - Add autoScaleReticle setting
  158. * Bug Fix
  159. - [OculusVRModule] Fix serial number conflict on Oculus device
  160. - [UnityEngineVRModule] Fix input manager index out of bound
  161. - [SteamVRModule] Fix swapping controllers will cause input events showing on wrong device
  162. - [WaveVRModule] Fix left hand mode cannot show controller model
  163. - [ExampleScene] Fix BodyRole center position transformation
  164. - [ExampleScene] Fix ResetButton teleports if moved after Start()
  165. ## Changes for v1.10.3:
  166. * Improvement
  167. - [WaveVRModule] Support WaveVR simulator (Enable VIVE Focus support in Editor mode)
  168. * Bug Fix
  169. - [WaveVRModule] Fix WaveVR tracking glitter issue
  170. - [WaveVRModule] Fix VIU simulator cannot launch (ONLY enable VIU simulator)
  171. ## Changes for v1.10.2:
  172. * Improvement
  173. - [ViveInput] Add new procedure vibration API (only works with SteamVR v2)
  174. ```csharp
  175. using HTC.UnityPlugin.Vive;
  176. ViveInput.TriggerHapticVibrationEx<TRole>(
  177. TRole role,
  178. float durationSeconds = 0.01f,
  179. float frequency = 85f,
  180. float amplitude = 0.125f,
  181. float startSecondsFromNow = 0f)
  182. ```
  183. * Bug Fix
  184. - [ViveInput] Fix issue that TriggerHapticPulse is not working
  185. - [Utility] Fix bug in IndexedSet indexer setter.
  186. - [WaveVRModule] Fix VIU example freezes after launched
  187. - [OculusVRModule] Fix OculusVRModule not recognizing GearVR or OculusGO correctly
  188. - [ExternalCamera] Fix not working with SteamVR v2
  189. - [ExternalCamera] Fix SteamVR_ExternalCamera setting sceneResolutionScale incorrectly in some cases
  190. - [ExternalCamera] Fix potential RenderTexture created by SteamVR_ExternalCamera having incorrect ColorSpace
  191. ## Changes for v1.10.1:
  192. * New Features
  193. - SteamVR Plugin v2.0/v2.1 support
  194. - SteamVR New Input System support ([Guide](https://github.com/ViveSoftware/ViveInputUtility-Unity/wiki/SteamVR-Input-System-Support))
  195. * Improvement
  196. - Now compatible with Google VR SDK v1.170.0
  197. - Add ControllerAxis.Joystick for Windows Mixed Reality Motion Controller
  198. - Extend ControllerButton (DPadXXX are virtual buttons simulated from trackpad/thumbstick values)
  199. - BKey (Menu)
  200. - BkeyTouch (MenuTouch)
  201. - Bumper (Axis3)
  202. - BumperTouch (Axis3Touch)
  203. - ProximitySensor
  204. - DPadLeft
  205. - DPadLeftTouch
  206. - DPadUp
  207. - DPadUpTouch
  208. - DPadRight
  209. - DPadRightTouch
  210. - DPadDown
  211. - DPadDownTouch
  212. - DPadUpperLeft
  213. - DPadUpperLeftTouch
  214. - DPadUpperRight
  215. - DPadUpperRightTouch
  216. - DPadLowerRight
  217. - DPadLowerRightTouch
  218. - DPadLowerLeft
  219. - DPadLowerLeftTouch
  220. * Known Issue
  221. - 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.
  222. ## Changes for v1.9.0:
  223. * New Features
  224. - Wave VR Plugin v2.1.0 support
  225. - Add Oculus Go support (requires Oculus VR plugin)
  226. * Improvement
  227. - [WaveVRModule] Add 6 DoF Controller Simulator (Experimental)
  228. - [More...](https://github.com/ViveSoftware/ViveInputUtility-Unity/wiki/Wave-VR-6-DoF-Controller-Simulator)
  229. - [RenderModelHook] Now able to load Wave VR generic controller model
  230. - [Example2] Add drop area that using physics collider
  231. - [Example3] Make scroll delta tunable from the Editor
  232. - [issue#49](https://github.com/ViveSoftware/ViveInputUtility-Unity/issues/49)
  233. - [VIUSettings] Add WVR virtual arms properties
  234. - [BindingUI] Make un-recognized device visible in the device view (shown in VIVE device icon)
  235. - [issue#51](https://github.com/ViveSoftware/ViveInputUtility-Unity/issues/51)
  236. * Bug Fix
  237. - [VRModule] Fix sometimes SteamVRModule activated but not polling any device pose/input
  238. ## Changes for v1.8.3:
  239. * Improvement
  240. - Improve simulator module
  241. - Add instruction UI
  242. - Add group control (devices move alone with camera)
  243. - See [Simulator](https://github.com/ViveSoftware/ViveInputUtility-Unity/wiki/Simulator) for more detail
  244. ![VIUSettings in Preference window](https://github.com/ViveSoftware/ViveInputUtility-Unity/blob/gh-pages/assets/img/simulator_01.png)
  245. - Add ReticlePose.IReticleMaterialChanger interface, better way to indicate different type of pointing object
  246. - Now you can setup default reticle material in ReticlePose property
  247. ![VIUSettings in Preference window](https://github.com/ViveSoftware/ViveInputUtility-Unity/blob/gh-pages/assets/img/retical_mat_changer_default_setup.png)
  248. - Setup reticle material property in component that implement IReticleMaterialChanger
  249. ![VIUSettings in Preference window](https://github.com/ViveSoftware/ViveInputUtility-Unity/blob/gh-pages/assets/img/retical_mat_changer_walkable_setup.png)
  250. - Add support for WaveVR SDK v2.0.37
  251. * Bug fix
  252. - Fix tracking device pose not applying scale from the origin transform
  253. - Fix SteamVRModule reporting wrong input-focus state
  254. - Fix ViveRigidPoseTracker broke after re-enabled
  255. - Fix PoseModifier not work correctly ordered by priority value
  256. ## Changes for v1.8.2
  257. * Bug fix
  258. - Fix define symbols sometimes not handle correctly when switching build target
  259. - Disable vr support if device list is empty
  260. - Add code to avoid NullReferenceException in VRModule
  261. - Add SetValueByIndex method to IndexedTable
  262. - Fix StickyGrabbable not working in certain cases
  263. ## Changes for v1.8.1:
  264. * New features
  265. - VIVE Focus Support
  266. - Required Unity 5.6 or later version
  267. - Download and install WaveVR SDK Unity plugin from https://hub.vive.com/profile/material-download
  268. - Enable VIVE Focus support under Edit > Preference > VIU Settings
  269. * Bug fix
  270. - Fix no tracking devices dectected when SteamVR plugin v1.2.3 is installed
  271. - Fix compile error in Unity 2018.1
  272. - Fix VIUSettings changes not saved into asset data file
  273. ## Changes for v1.8.0:
  274. * New features
  275. - Daydream Support
  276. - Simulator
  277. - New VIU Settings to easy setup project supporting device
  278. - Open from Editor -> Preferences -> VIU Settings
  279. ![VIUSettings in Preference window](https://github.com/ViveSoftware/ViveInputUtility-Unity/blob/gh-pages/assets/img/viusettings_preview_01.png)
  280. * Improvement
  281. - Now compatible with SteamVR v1.1.1~v1.2.3
  282. - Move some properties into VIU Settings
  283. - Removed:
  284. - ViveRoleBindingHelper.OverrideConfigPath
  285. - ViveRoleBindingHelper.BindingConfig.apply_bindings_on_load
  286. - ViveRoleBindingHelper.BindingConfig.toggle_interface_key_code
  287. - ViveRoleBindingHelper.BindingConfig.toggle_interface_modifier
  288. - ViveRoleBindingHelper.BindingConfig.interface_prefab
  289. - Replaced with:
  290. - VIUSettings.bindingConfigFilePath
  291. - VIUSettings.autoLoadBindingConfigOnStart
  292. - VIUSettings.bindingInterfaceSwitchKey
  293. - VIUSettings.bindingInterfaceSwitchKeyModifier
  294. - VIUSettings.bindingInterfaceObject
  295. * Bug fix
  296. - Fix compiler error caused by wrong define symbols.
  297. * VIU Settings
  298. - Setting changes is saved in project resource folder named VIUSettings.asset.
  299. - VIU Settings will load default setting automatically if VIUSettings.asset resource not found.
  300. * Daydream Support
  301. - Requires Android platform support, Unity 5.6 or later and GoogleVR plugin.
  302. - Requires checking the Daydream support toggle in Edit -> Preferences -> VIUSettings
  303. - Beware of Daydream controller have less buttons.
  304. - Remember to define and give the VR origin a headset height for Daydream device user.
  305. * Simulator
  306. - Simulator is a fake VRModule that spawn/remove fake devices, create fake tracking and fake input events.
  307. - Requires checking the Simulator support toggle in Edit -> Preferences -> VIUSettings
  308. - Simulator only enabled when no VR device detected.
  309. - There are 2 ways to manipulate the fake devices
  310. - Handle events by script manually
  311. - HTC.UnityPlugin.VRModuleManagement.VRModule.Simulator.onUpdateDeviceState
  312. - Invoked each frame when VRModule performs a device state update
  313. - Write device state into currState argument to manipulate devices
  314. - Read-only argument prefState preserved device state in last frame
  315. - Use Keyboard-Mouse control (can be disabled in VIUSettings)
  316. - Add/Remove/Select devices
  317. - [0~9] Add and select device N if device N is not selected, otherwise, deselect it
  318. - [` + 0~5] Add and select device 10+N if device 10+N is not selected, otherwise, deselect it
  319. - [Shift + 0~9] Remove and deselect device N
  320. - [Shift + ` + 0~5] Remove and deselect device 10+N
  321. - Control selected device
  322. - [W] Move selected device forward
  323. - [S] Move selected device backward
  324. - [D] Move selected device right
  325. - [A] Move selected device left
  326. - [E] Move selected device up
  327. - [Q] Move selected device down
  328. - [C] Roll+ selected device
  329. - [Z] Roll- selected device
  330. - [X ] Reset selected device roll
  331. - [ArrowUp] Pitch+ selected device
  332. - [ArrowDown] Pitch- selected device
  333. - [ArrowRight] Yaw+ selected device
  334. - [ArrowLeft] Yaw- selected device
  335. - [MouseMove] Pitch/Yaw selected device
  336. - [MouseLeft] Press Trigger on selected device
  337. - [MouseRight] Press Trackpad on selected device
  338. - [MouseMiddle] Press Grip on selected device
  339. - [Hold Shift + MouseMove] Touch Trackpad on selected device
  340. - Control HMD
  341. - [T] Move hmd forward
  342. - [G] Move hmd backward
  343. - [H] Move hmd right
  344. - [F] Move hmd left
  345. - [Y] Move hmd up
  346. - [R] Move hmd down
  347. - [N] Roll+ hmd
  348. - [V] Roll- hmd
  349. - [B] Reset hmd roll
  350. - [I] Pitch+ hmd
  351. - [K] Pitch- hmd
  352. - [L] Yaw+ hmd
  353. - [J] Yaw- hmd
  354. - Notice that when the simulator is enabled, it is started with 3 fake device
  355. - [0] HMD (selected)
  356. - [1] Right Controller
  357. - [2] Left Controller
  358. ## Changes for v1.7.3:
  359. * Bug fix
  360. - [VRModule] Fix compile error in OculusVRModule.cs #14
  361. - [Pointer3D] Fix **IPointerExit** not handled correctly when disabling a raycaster #16
  362. - [Pointer3D] Fix **IPointerPressExit**, **IPointerUp** doesn't execute in some cases
  363. - Add **Pointer3DEventData.pressProcessed** flag to ensure Down/Up processed correctly
  364. * Improvement
  365. - Add new struct type **HTC.UnityPlugin.Utility.RigidPose** to replace **HTC.UnityPlugin.PoseTracker.Pose**
  366. - Utility.RigidPose inherit all members in PoseTracker.Pose
  367. - Add forward, up, right property getter
  368. - 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)
  369. - 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
  370. ``` csharp
  371. using HTC.UnityPlugin.PoseTracker;
  372. using UnityEngine;
  373. using Pose = UnityEngine.Pose;
  374. public class MyPoseTracker : BasePoseTracker
  375. {
  376. public Pose m_pose;
  377. ...
  378. }
  379. ```
  380. - Change some recommended setting value
  381. - Now binding interface switch is recommended as enable only if Steam VR plugin is imported
  382. - Now external camera interface switch is recommended as enable only if Steam VR plugin is imported
  383. - Now VIU system game object will be auto generated only if nessary
  384. ## Changes for v1.7.2:
  385. * New features
  386. - Add recommended VR project settings notification window
  387. * Bug fix
  388. - Fix compile error in Unity 5.5/5.6
  389. - [VRModule] Fix UnityEngineVRModule not removing disappeared device correctly
  390. - In Unity 2017.2, InputTracking.GetNodeStates sometimes returns ghost nodes at the beginning of play mode.
  391. - [Teleportable] Remove a potential null reference
  392. - This happens when SteamVR plugin is imported and no SteamVR_Camera exist.
  393. * Improvement
  394. - [Pointer3D] Now Pointer3DInputModule shows status in EventSystem's inspector preview window
  395. - [Pointer3D] Let Pointer3DInputModule behave more consistent with StandaloneInputModule
  396. - Now IPointerEnterHandler / IPointerExitHandler only triggered once for each pointer, pressing buttons won't trigger Enter/Exit anymore.
  397. - [Pointer3D] Add IPointer3DPressEnterHandler / IPointer3DPressExitHandler
  398. - 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.
  399. - [SteamVRCameraHook] Fix not expending head-eye-ear correctly
  400. - [VRModule] Fix update timing issue
  401. - This fix VivePoseTracker tracking is delayed in editor playing mode.
  402. ## Changes for v1.7.1:
  403. * New features
  404. - [ExternalCameraHook] Add externalcamera.cfg config interface
  405. - The interface is built into project when VIU_EXTERNAL_CAMERA_SWITCH symbol is defined.
  406. - It is automatically activated with the external camera quad view.
  407. ![External Camera Config Interface](https://github.com/ViveSoftware/ViveInputUtility-Unity/blob/gh-pages/assets/img/external_camera_config_interface.png)
  408. * Changes
  409. - Now you can fully disable the binding interface switch by removing the VIU_BINDING_INTERFACE_SWITCH symbol
  410. - That means nologer
  411. * Bug fix
  412. - [ViveRole] Fix HandRole.ExternalCamera not mapping to tracker in some cases
  413. - [ViveRole] Fix ViveRole.IMap.UnbindAll() to work correctly
  414. - [BindingInterface] Fix some info updating and animation issue
  415. - [VivePose] Now GetPose returns Pose.identity instead of default(Pose) for invalid device
  416. ## Changes for v1.7.0:
  417. * New features
  418. - Add notification when new version released on [Github](https://github.com/ViveSoftware/ViveInputUtility-Unity/releases).
  419. - Add **VRModule** class to bridge various VR SDK. It currently supports SteamVR plugin, Oculus VR plugin and Unity native VR/XR interface.
  420. - **void VRModule.Initialize()**: Create and initilize VRModule manager instance.
  421. - **VRModuleActiveEnum VRModule.activeModule**: Returns the activated module.
  422. - **IVRModuleDeviceState VRModule.GetCurrentDeviceState(uint deviceIndex)**: Returns the virtual VR device status.
  423. - **event NewPosesListener VRModule.onNewPoses**: Invoked after virtual VR device status is updated.
  424. - **event DeviceConnectedListener VRModule.onDeviceConnected**: Invoked after virtual VR device is connected/disconnected.
  425. - **event ActiveModuleChangedListener VRModule.onActiveModuleChanged**: Invoked when a VR module is activated.
  426. - New binding interface using overlay UI. By default, the binding interface can be enabled by pressing RightShift + B in play mode.
  427. - ![Binding UI](https://github.com/ViveSoftware/ViveInputUtility-Unity/blob/gh-pages/assets/img/binding_ui_preview_01.png)
  428. - ![Binding UI](https://github.com/ViveSoftware/ViveInputUtility-Unity/blob/gh-pages/assets/img/binding_ui_preview_02.png)
  429. - ![Binding UI](https://github.com/ViveSoftware/ViveInputUtility-Unity/blob/gh-pages/assets/img/binding_ui_preview_03.png)
  430. - Add define symbols
  431. - **VIU_PLUGIN**: Defined when Vive Input Utility plugin is imported in the project.
  432. - **VIU_STEAMVR**: Defined when SteamVR plugin is imported in the project.
  433. - **VIU_OCULUSVR**: Defined when OculusVR plugin (OVRPlugin) is imported in the project.
  434. - **VIU_BINDING_INTERFACE_SWITCH**: Define it to let the project be able to switch binding interface by pressing RightShift + B in play mode.
  435. - **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.
  436. - Add new role HandRole.ExternalCamera (Alias for HandRole.Controller3).
  437. - By default, it is mapping to the 3rd controller, if 3rd controller not available, then mapping to the first valid generic tracker.
  438. - ExternalCameraHook uses mapping as the default tracking target.
  439. * New componts
  440. - [ViveInputVirtualButton] Use this helper component to combine multiple Vive inputs into one virtual button.
  441. * Improvement
  442. - [ViveInput] Add more controller buttons, use ViveInput.GetPress(role, buttonEnum) to get device button stat
  443. - **System** (Only visible when sendSystemButtonToAllApps option is on)
  444. - **Menu**
  445. - **MenuTouch**
  446. - **Trigger**
  447. - **TriggerTouch**
  448. - **Pad**
  449. - **PadTouch**
  450. - **Grip**
  451. - **GripTouch**
  452. - **CapSenseGrip**
  453. - **CapSenseGripTouch**
  454. - **AKey**
  455. - **AKeyTouch**
  456. - **OuterFaceButton** (Alias for Menu)
  457. - **OuterFaceButtonTouch** (Alias for MenuTouch)
  458. - **InnerFaceButton** (Alias for Grip)
  459. - **InnerFaceButtonTouch** (Alias for GripTouch)
  460. - [ViveInput] Add controller axis enum, use ViveInput.GetAxis(role, axisEnum) to get device axis value
  461. - **PadX**
  462. - **PadY**
  463. - **Trigger**
  464. - **CapSenseGrip**
  465. - **IndexCurl**
  466. - **MiddleCurl**
  467. - **RingCurl**
  468. - **PinkyCurl**
  469. - [ViveRole] Role mapping/binding mechanism is improved and become more flexible.
  470. - Now different devices can bind to same role at the same time.
  471. - If a unconnected device is bound to a role, that role can still map to other connected device.
  472. - [ViveRole] Obsolete functions that retrieve device status and property, use static API in VRModule instead.
  473. - **ViveRole.TryGetDeviceIndexBySerialNumber**: Use VRModule.TryGetDeviceIndex instead.
  474. - **ViveRole.GetModelNumber**: Use VRModule.GetCurrentDeviceState(deviceIndex).modelNumber instead
  475. - **ViveRole.GetSerialNumber**: Use VRModule.GetCurrentDeviceState(deviceIndex).serialNumber instead
  476. - **ViveRole.GetDeviceClass**: Use VRModule.GetCurrentDeviceState(deviceIndex).deviceClass instead
  477. - [ViveRoleBindingsHelper] Now will automatically load bindings from "vive_role_bindings.cfg", no need to be in the scene to work.
  478. - [RenderModelHook] Add override model and shader option.
  479. - [ExternalCameraHook] Now ExternalCameraHook will track the HandRole.ExternalCamera by default.
  480. - [ExternalCameraHook] Now will be added into scene automatically if "externalcamera.cfg" exist when start playing, no need to add to scene manually.
  481. - [ExternalCameraHook] You can now enable static External Camera quad view (without tracking to a device) if
  482. 1. VIU_EXTERNAL_CAMERA_SWITCH symbol is defined.
  483. 2. externalcamera.cfg exist.
  484. 3. RightShift + M pressed in play mode.
  485. - [BasicGrabbable, StickyGrabbable, Draggable] Add unblockable grab/drag option.
  486. * Bug fix
  487. - [ViveRoleProperty] Fix not handling serialized data right in inspector.
  488. - [PoseEaser] Now use unscaled time instead to avoid from being effected by time scale.
  489. ## Changes for v1.6.4:
  490. * Resloves tracking pose not updating in Unity 5.6
  491. * Add SnapOnEnable option to ViveRigidPoseTracker component
  492. * Add mouse button mapping options to ViveRaycaster component
  493. * Fix crashes when clicking dropdown UI in RoleBindingExample scene
  494. * Fix auto-bake-lightmap errors in example scenes
  495. * Correct rigidbody null check in Draggable and Grabbable scripts
  496. ## Changes for v1.6.3:
  497. * Fix ViveRoleProperty returns wrong type & value [issue#9](https://github.com/ViveSoftware/ViveInputUtility-Unity/issues/9)
  498. * Now Teleportable component will find target & pivot automatically [issue#8](https://github.com/ViveSoftware/ViveInputUtility-Unity/issues/8)
  499. * Remove warning in LineRenderer
  500. ## Changes for v1.6.2:
  501. * Fix remapping errors from HandRoleHandler [issue#1](https://github.com/ViveSoftware/ViveInputUtility-Unity/issues/1)
  502. * Fix ViveRoleProperty.ToRole always returns Invalid [issue#6](https://github.com/ViveSoftware/ViveInputUtility-Unity/issues/6)
  503. * Fix ViveRaycaster not working when app loses focus [issue#7](https://github.com/ViveSoftware/ViveInputUtility-Unity/issues/7)
  504. ## Changes for v1.6.0:
  505. * New ViveRole System
  506. - ViveRole is a mapping system that relate logic roles to OpenVR device indices.
  507. - Each role has their own auto-mapping logic, and binding API allow user to customize the relation.
  508. - Both mapping (role, device index) binding (role, device serial number) are one-on-one relation
  509. - When a device serial number is binding to a role, it means that role is always mapping to the specific device
  510. - If the bound device is disconnected, the bound role will not mapping to any device index (invalid).
  511. - Currently there are 4 built-in roles:
  512. - DeviceRole: role that mapping to all 16 devices, ordered exactly same as device index.
  513. - HandRole: role related to standard Vive controllers, with basic RightHand/LeftHand recognition.
  514. - TrackerRole: role related to Vive trackers, first conntected tracker will be mapping to Tracker1.
  515. - BodyRole: role related to devices that tracking human limbs.
  516. - Creating custom role in an instant by adding ViveRoleEnumAttribute to your enum type
  517. - Customizing auto-mapping logic by implementing ViveRoleHandler\<EnumType\> and call ViveRole.AssignMapHandler()
  518. * New query APIs that accept any ViveRoles, ex.
  519. - Use ViveRole.GetDeviceIndexEx(TrackerRole.Tracker1) to get tracker's device index.
  520. - Use VivePose.GetPoseEx(TrackerRole.Tracker1) to get tracker's tracking data
  521. - Use ViveInput.GetPressEx(TrackerRole.Tracker1, ControllerButton.Trigger) to get tracker's trigger event.
  522. - Use ViveInput.AddListenerEx(TrackerRole.Tracker1, ControllerButton.Trigger, ButtonEventType.Press) to listen tracker's trigger event.
  523. * New sample scene "RoleBindingExample"
  524. - This sample scene demonstrate how to bind device a role and save/load those bindings
  525. * New ViveRoleBindingsHelper helper component
  526. - Adding this component to scene to auto-load bindings.
  527. - Call function SaveRoleBindings(filePath) to save bindings manually.
  528. - Call function LoadRoleBindings(filePath) to load bindings manually.
  529. * New RenderModelHook helper component
  530. - This script creates and handles SteamVR_RenderModel, so you can show render model specified by ViveRole insdead of device index.
  531. * New ExternalCameraHook helper component
  532. - This script creates and handles SteamVR_ExternalCamera, and let camera tracking device specified by ViveRole insdead of device index.
  533. - Setup step-by-step
  534. 1. Add a file called externalcamera.cfg in the root of your project. (the config file sample can be found [here](https://steamcommunity.com/app/358720/discussions/0/405694031549662100/))
  535. 2. Add ExternalCameraHook component into your scene. (don't remove the auto-generated SteamVR_Render component)
  536. 3. Select ExternalCameraHook gameobject and set the device role in inspector. (or set in script, ex. ExternalCameraHook.viveRole.SetEx(TrackerRole.Tracker1))
  537. - If you are using 3rd Vive standard controller as external camera, set to HandRole.Controller3 (recommended)
  538. - If you are using ViveTracker as external camera, set to TrackerRole.Tracker1 (recommended)
  539. 4. (Optional) Bind the external camera tracking device to the role
  540. 1. Open "RoleBindingExample" scene
  541. 2. Scan the specific device (for external camera)
  542. 3. Bind to the specific role (ex. HandRole.Controller3 or TrackerRole.Tracker1)
  543. 4. Save bindings
  544. 5. Back to your project scene
  545. 6. Add ViveRoleBindingsHelper component into your scene. (to load bindings automatically)
  546. 7. Now external camera should always tracking at the device you wanted.
  547. ## Changes for v1.5.3:
  548. * Make compatible with SteamVR plugin 1.2.1
  549. * Fix a bug in ColliderEventCaster that cause crash when disabling event caster and handling events at the same time.
  550. * Change default teleportButton in Teleportable to TeleportButton.Pad instead of TeleportButton.Trigger
  551. * Containers optimize
  552. - Re-write IndexedTable, should be more efficient
  553. - Add read-only interface
  554. ## Changes for v1.5.2:
  555. * Make compatible with SteamVR plugin 1.2.0
  556. ## Changes for v1.5.1:
  557. * Update guide document
  558. - Reveal used namespace in some example scripts.
  559. - Add ready-to-used component list.
  560. * New controllers prefab that handles both hand EventRaycaster, ColliderEventCaster, guidelines and models
  561. - Hide controllers' models when grabbing or dragging
  562. - Enable EventRaycaster on pad touched, otherwise enable ColliderEventCaster
  563. * Pointer3D
  564. - Expose Pointer3DRaycaster at Pointer3DEventData.raycaster, to get Raycaster from eventData easily.
  565. - Move dragThreshold and clickInterval settings from Pointer3DInputModule to Pointer3DRaycaster.
  566. - Re-design RaySegmentGenerator. Now RaycastMode setting is replaced by applying ProjectionGenerator & ProjectileGenerator component with Pointer3DRaycaster.
  567. Add or enable only one generator at a time, or which generator used by the raycaster is unexpected.
  568. Also customize your own generators by implementing BaseRaySegmentGenerator.
  569. * ColliderEvent
  570. - Now OnColliderEventClick won't invoke if caster has leaved the pressed object.
  571. - Fix a bug in ColliderEventCaster that doesn't handle hovered colliders correctly.
  572. - Fix a bug that ColliderEventCaster doesn't handle event correctly when disable.
  573. - Add ColliderEventTrigger component, work just like built-in EventTrigger
  574. * Add Pointer3DEventData extensions
  575. ```csharp
  576. Pointer3DRaycaster PointerEventData.GetRaycaster3D()
  577. bool PointerEventData.TryGetRaycaster3D(out Pointer3DRaycaster raycaster)
  578. TRaycaster3D PointerEventData.GetRaycaster3D<TRaycaster3D>()
  579. bool PointerEventData.TryGetRaycaster3D<TRaycaster3D>(out TRaycaster3D raycaster)
  580. ```
  581. * Add ColliderEventData extensions
  582. ```csharp
  583. TEventCaster ColliderEventData.GetEventCaster<TEventCaster>()
  584. bool ColliderEventData.TryGetEventCaster<TEventCaster>(out TEventCaster eventCaster)
  585. ```
  586. * Add VivePointerEventData extensions
  587. ```csharp
  588. bool PointerEventData.IsViveButton(HandRole hand)
  589. bool PointerEventData.IsViveButton(ControllerButton button)
  590. bool PointerEventData.IsViveButton(HandRole hand, ControllerButton button)
  591. bool PointerEventData.TryGetViveButtonEventData(out VivePointerEventData viveEventData)
  592. ```
  593. * Add ViveColliderEventData extensions
  594. ```csharp
  595. bool ColliderEventData.IsViveButton(HandRole hand)
  596. bool ColliderEventData.IsViveButton(ControllerButton button)
  597. bool ColliderEventData.IsViveButton(HandRole hand, ControllerButton button)
  598. bool ColliderEventData.TryGetViveButtonEventData(out ViveColliderButtonEventData viveEventData)
  599. bool ColliderAxisEventData.IsViveTriggerValue()
  600. bool ColliderAxisEventData.IsViveTriggerValue(HandRole hand)
  601. bool ColliderAxisEventData.TryGetViveTriggerValueEventData(out ViveColliderTriggerValueEventData viveEventData)
  602. bool ColliderAxisEventData.IsVivePadAxis()
  603. bool ColliderAxisEventData.IsVivePadAxis(HandRole hand)
  604. bool ColliderAxisEventData.TryGetVivePadAxisEventData(out ViveColliderPadAxisEventData viveEventData)
  605. ```
  606. * Improve BasicGrabbable component, and Draggable(in 3D Drag example) as well
  607. - Now grabbed object can collide properly into other colliders.
  608. - Now handles multiple grabbers.
  609. - Add speed factor parameter to adjast grabbed object following speed.
  610. - Add afterGrabbed & beforeRelease event handler.
  611. * Add dragging state material in MaterialChanger.
  612. * Fix a bug in Teleportable so that GuideLineDrawer won't draw in wrong position.
  613. * New containers in Utiliy
  614. ```csharp
  615. IndexedSet<TKey> // container that combinds set and list, order is not preserved, removing complexity is O(1)
  616. OrderedIndexedSet<TKey> // container that combinds set and list, order is preserved, removing complexity is O(N)
  617. IndexedTable<TKey, TValue> // container that combinds dictionary and list, order is not preserved, removing complexity is O(1)
  618. OrderedIndexedTable<TKey, TValue> // container that combinds dictionary and list, order is preserved, removing complexity is O(N)
  619. ```
  620. ## Changes for v1.5.0:
  621. * Add new raycast mode for Pointer3DRaycaster
  622. - Default : one simple raycast
  623. - Projection : raycast in a constant distance then raycast toward gravity
  624. - Projectile : raycast multiple times alone the projectile curve using initial velocity
  625. * Add ViveInput.GetCurrentRawControllerState and ViveInput.GetPreviousRawControllerState.
  626. * BaseRaycastMethod now registered into Pointer3DRaycaster at Start instead of Awake.
  627. * Remove RequireComponent(typeof(BaseMultiMethodRaycaster)) attribute from BaseRaycastMethod.
  628. * Pointer3DRaycaster now registered into Pointer3DInputModule at Start instead of Awake.
  629. * EventCamera for Pointer3DRaycaster now place at root, instead of child of Pointer3DRaycaster.
  630. * New ColliderEventSyatem. Hover thins using collider (instead of raycast), send button events to them, handle events by EventSystem-like handlers.
  631. - IColliderEventHoverEnterHandler
  632. - IColliderEventHoverExitHandler
  633. - IColliderEventPressDownHandler
  634. - IColliderEventPressUpHandler
  635. - IColliderEventPressEnterHandler
  636. - IColliderEventPressExitHandler
  637. - IColliderEventClickHandler
  638. - IColliderEventDragStartHandler
  639. - IColliderEventDragUpdateHandler
  640. - IColliderEventDragEndHandler
  641. - IColliderEventDropHandler
  642. - IColliderEventAxisChangeHandler
  643. * New example scene to demonstrate how ColliderEvent works.
  644. - Assets\HTC.UnityPlugin\ViveInputUtility\Examples\5.ColliderEvent\ColliderEvent.unity
  645. * Update tutorial & guide document.
  646. ## Changes for v1.4.7:
  647. * Now HandRole defines more then 2 controllers.
  648. * Add some comment and description to public API.
  649. ## Changes for v1.4.6:
  650. * Fix a bug in the examples, now reticle posed correctly when scaling VROrigin.
  651. ## Changes for v1.4.5:
  652. * Fix a rare issue in Pointer3DInputModule when processing event raycast.
  653. ## Changes for v1.4.4:
  654. * 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.
  655. * Reset pointer's tranform(to align default laser pointer direction) in examples.
  656. * Adjust default threshold to proper value in PoseStablizer & Pointer3DInputModule.
  657. * Fix a bug in Pointer3DRaycaster that causes other input module to drive Pointer3DRaycaster(witch should be only driven by Poinster3DInputModule).
  658. * Now Pointer3DRaycaster can optionally show event raycast line in editor for debugging.
  659. * Add step by step tutorial document and example scene.
  660. * Replace about document with developer guide.
  661. ## Changes for v1.4.3:
  662. * Update usage document(rewrite sample code).
  663. * Add copyright terms.
  664. * Define new controller button : FullTrigger(consider pressed only when trigger value is 1.0).
  665. * Fix ViveInput.GetPadPressDelta and ViveInput.GetPadTouchDelta to work properly.
  666. * Add scroll delta scale property for ViveRaycaster(to adjust scrolling sensitivity).
  667. * Add PoseEaser effect settings and PoseEaserEditor to show properties.
  668. * Add ViveInput.TriggerHapticPulse for triggering controller vibration.
  669. ## Changes for v1.4.2:
  670. * Update usage document.
  671. * Reorder parameters in Pose.SetPose.
  672. * Now click interval can be configured by setting ViveInput.clickInterval.
  673. ## Changes for v1.4.1:
  674. * Fix wrong initial status for ViveRole and ViveInput.
  675. * Example: showLocalAvatar (property for LANGamePlayer) won't hide shadow (hide mesh only) if set to false.
  676. ## Changes for v1.4.0:
  677. * Separate PoseTracker module from VivePose.
  678. * New tracking effect PoseFreezer.
  679. * Reorganize folders.
  680. ## Changes for v1.3.0:
  681. * 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).
  682. * New components CanvasRaycastMethod and CanvasRaycastTarget.
  683. - CanvasRaycastMethod works like GraphicRaycastMethod, but use CanvasRaycastTarget component to target canvases, instead of asigning canvas property once at a time.
  684. ## Changes for v1.2.0:
  685. * Fix misspelling from ConvertRoleExtention to ConvertRoleExtension
  686. * New containter class IndexedSet\<T\>
  687. * New class ObjectPool\<T\> and relative class ListPool\<T\>, DictionaryPool\<T\>, IndexedSetPool\<T\>, to reduce allocating new containers.
  688. * Change some data structure from LinkList to InedexedSet (VivePose, Pointer3DInputModule, BaseMultiMethodRaycaster, BaseVivePoseTracker).
  689. * Rewrite GraphicRaycastMethod to align GraphicRaycaster's behaviour.
  690. ## Changes for v1.1.0:
  691. * New API VivePose.SetPose().
  692. * New API VivePose.GetVelocity().
  693. * New API VivePose.GetAngularVelocity().
  694. * Fix some null reference in VivePose.