Version 4.9.1 of the Unity Modules is only intended to be used with Version 5.2 of the tracking service (or more recent releases), it is not backwards compatible with previous service releases. For details about service compatibility with Unity Modules and how to upgrade projects, consult the Migration Guide.
32-bit support has been dropped as it is no longer supported by the V5.2 tracking service
To use V5.2 you must upgrade your project to this version of the Unity modules.
The documentation and API reference has been upgraded for branding and to reflect changes to the modules.
A new tracking mode setting has been added to the LeapServiceProvider to disable setting a tracking mode on start. If set, the (current) service tracking mode is left unchanged by the application when it connects to the service.
The scripts have been changed to switch to using the Unity pose class, retiring the Leap pose class. A number of extension methods have been added to the Unity pose class to create a similar public API to the retired class.
Bug fixes:
The version number in Core (Version.txt) has been updated to the correct version.
Some deprecated Unity enumeration values have been removed from the scripts.
Minor changes have been made to improve Unity 2020 support. However, Unity 2020 is not officially supported by this release.
Smaller editor window size for hands module
Fixed memory leak with MemoryManager using V5.2 tracking service where MemoryManager was hanging onto (image) buffers even when pooling was off.
Turned on memory pooling in MemoryManager to reduce memory churn in apps with image streaming enabled (with V5.2 tracking service).
Switched image buffers in memory manager to use a ConcurrentDictionary to prevent corruption in scenes with multiple LeapServiceProviders with V5.2 tracking service.
Known Issues:
A set of ghost / floating hands is sometimes seen on scene startup. They may appear for a for a small interval <2s before correct tracking starts. This is not seen consistently and has been observed behaviour with previous releases.
The infrared viewer shader does not render correctly in both eyes with headsets / plugins that do not support multi pass rendering - e.g. Windows Mixed Reality.
Infrared Viewer scenes sometimes display the image upside down, this is only an issue during the editor and will not exist in builds.
Some of the interaction engine demo scenes (with interactable objects - e.g. interaction objects) do not initialise the player position at the correct height (e.g. for a seated user). The position of the camera has to be adjusted in the scene view or adjusted on the scene components (the XRHeightOffset script). The magnitude of the height adjustment seems to vary depending on the headset. Behaviour is better for a standing experience. This is mainly seen when using the new Unity XR Plugin system - e.g. with Unity 2019.4. This is not officially supported by this release.
This release of UnityModules adds support for Unity 2020.1!
Changelog
Add support for Unity 2020.1
Note for 2020.1 users: If you get errors related to "SpatialTracking" upon importing the Core module, you need to install the Oculus XR package, which adds the necessary XR dependency.
Only the Core and Graphic Renderer packages have been modified from 4.5.0. For completeness' sake, all of the main modules are included in this release.
Community contributions
Added the LeapCSharp assembly definition file! - @StephenHodgson
Thank you for your contribution!
With love from the UnityModules team, @nickjbenson and @jselstad
This release reflects a slight deviation from how we've done UnityModules releases in the past. To make it easier to get releases out the door, we're unifying the versioning system around the "Core Asset" release, and combining modules together into a single release version. Individual module packages are still available, but this path is essentially a roundabout way to copy files into your project, which you can do straight from the repo, now considered the central source of truth on master.
Changelog
Moves the LeapMotion folder from Assets to Assets/Plugins. This shortens project build times.
Upgrades the default Unity version to 2019.2.
Aims to support Unity 2017.1 through 2019.3. Please submit a ticket if you experience issues using UnityModules with any Unity versions beyond 2017.1.
Fixes an issue that prevented hands from rendering when using Scriptable Render Pipeline projects.
Adds a desktop-mode IE example scene.
Hotfixes (2020-05-01):
Fixes compilation errors in 2018.4.
Note that the SRP is Experimental in 2018.4 and lacks the correct callbacks to support hand timewarping. As a consequence, hand rendering is not compatible with the SRP in 2018.4.
Fixes compilation warnings in 2019.3.
Community contributions
Adds a configuration option to IE two-handed grasps. - @DerSticher
Adds an event on initial IE contact bone creation. - @SyDroX
Thank you for your contributions!
With love from the UnityModules team,
@nickjbenson and @jselstad
The number of scripts required to construct a Leap Motion-enabled VR rig has been greatly reduced, and the required rig hierarchy has been heavily simplified. Hand data that is adjusted correctly for XR headset and device latency can now be gotten by adding a single component to the Main Camera, and the hand model pipeline has been simplified to a single manager component driving managed model components. If you are upgrading from an older project that incorporated Leap rigs from Core 4.3.4 or earlier, you can auto-upgrade these rigs by opening the scene that contains them and checking the new Leap Motion SDK window: Window->Leap Motion.
Leap SDK
Added the Leap Motion SDK Window, accessible via Window->Leap Motion. Use this window to scan and upgrade old (Core 4.3.4 and earlier) Leap rigs, check settings for the Interaction Engine, and adjust module preferences for the Graphic Renderer.
The LeapCSharp source is now provided directly in UnityModules and no longer hidden behind a managed DLL. It has received some upgrades in the process, and although it's still a little rough around the edges, it is a useful reference if you would like to construct LeapC bindings for a new language.
Added VectorHand, one of many potential lightweight encodings of a Leap Hand. This lossy encoding is suitable for lightweight recording and playback or network transmission.
Fixed a bug where hand.TimeVisible was not being set with the correct units.
Added the PostProcessingProvider base class, a pattern for applying your own post-processes to Leap frame data.
Added an example scene demonstrating a stateless and a stateful PostProcessProvider: ProjectionPostProcessProvider and InertiaPostProcessProvider.
Utilities
Query system: Overhauled to remove reliance on type-generic structs to support IL2CPP.
BitConverter no longer requires unsafe code EXCEPT when targeting IL2CPP. If you wish to compile using IL2CPP, you must allow unsafe code.
Added an ArrayPool data structure, used by the overhauled Query system.
Fixed an issue when ImplementsInterface attribute was used for ScriptableObjects.
Added some Runtime Gizmo drawing functions, such as DrawEllipsoid.
Added SigmoidUpDown as a DefaultCurve for quick AnimationCurve initialization.
Removed a warning when Hands.Provider returned null, since many valid scenes may simply not be set up for Leap devices.
This is a hotfix release addressing an issue with the warpingAdjustment variable, which was previously renamed to _warpingAdjustment without using the [FormerlySerializedAs] attribute. This resulted in the adjustment value reverting back to its default value, which was 60. The recommended value for PC experiences is 17, and so this introduced a 43-millisecond difference in the warping effects, causing significant swim when the user moved their head.
Renamed the variable, again without using the [FormerlySerializedAs] attribute. This is intentional so that any bad values that have been saved into developer's scenes get discarded and overwritten by the new good default, 17.
Made it so that unless _allowManualTimeAlignment is checked, the adjustment value will do NOTHING. Instead the value is driven by a constant. This is so that if we want to push out a new value for the default adjustment value in the future, we can just update the constant and all developer's scenes will be automatically updated.
Upgraded Core Assets to expect Unity 2017.1.0p4, a version that patch-fixes a security vulnerability allowing arbitrary code execution. See UNITY-SEC-844. Unity 5.6 and above remain supported.
Leap Hands
Adjusted the default pose offset of the Leap Motion Controller from a tracked headset to be 12 cm forward (previously 10 cm) and a 5 degree tilt downward (previously 0 degrees). This change is expected to improve hand alignment for most VR devices.
Added a checkbox to allow manual Leap Motion Controller pose alignment on the LeapVRTemporalWarping script. Available parameters are forward offset, vertical offset, and upward/downward tilt. These settings are tied to the application, not the headset, so these settings should only be used under circumstances where the application will be run in a known headset configuration.
Fixed a bug where Attachment Hands could null-reference when iterating through all available attachment points.
Query (Garbageless LINQ)
Added Min and Max query operations for queries on collections of IComparables.
Added support Query()-ing 2D arrays.
Utilities
Added the Maybe\<T\> and Either<U, V> data structures.
Added the AnimationCurveUtil, providing static methods that can compress AnimationCurve objects, with a parameterized maximum error.
Added SerializableType, which allows you to serialize Type references.
Added ProgressBar, an easy way to produce progress bars for long operations in-editor.
Added AssetFolder, an intelligent serializable reference to a folder.
The AttachmentHands script reproduces the functionality of the Attachments Module with a more intuitive Inspector interface and Hierarchy behavior. Add it to a GameObject beneath your VR object rig to get started.
MultiTypedList/MultiTypedReference allow you to serialize (but not draw) data that is of multiple different types.
Deprecate the AutoFind attribute.
Added SerializableHashSet to mirror SerializableDictionary.
Added ReadonlyHashSet, for when you just don’t want anybody messin’ around with your HashSets.
Enhancement: smoothed interpolation chooses optimal value automatically
Enhancement: Added SerializableDictionary to /DataStructures/
Enhancement: added MinHeap to /DataStructures/
Enhancement: attributes properties can be disabled by other properties
Fix: removed redundant pinch variables
Fix: improved multi-value attribute editing
Fix: removed "Either" from iHandModel's Chirality enum
Fix: compile error from RiggedHand and RiggedHandMobile
Upgraded LeapC - PR#437
Enhancement: improved AutoFind attribute
Fix: updated LeapCSharp.NET.3.5.dll to handle new device serial numbers
Fix: removed all foreach loops for performance
Fix: LeapVRTemporalWarping has new functionality for the Sync Mode enum. Most scenes should be set to LOW_LATENCY while AR scenes using video passthrough should be set to SYNC_WITH_HANDS
Fix: In LeapServiceProvider, interpolation enabling/disabling is now hidden and on by default.
Handpool will no longer error if there is an empty model slot in the HandPool
Models spawned by with Handpool's CanDuplicate are now parented to a ModelsParent transform specified in the HandPool's inspector. If this is left empty, then spawned model's are not parented.
Minor modifications to support Interaction Engine
Refactored PinchDetector so that it has an abstract base class. This paves the way for future, similar detectors.
Added standard Color definitions for Detector gizmo drawing
Added Minimum and Maximum extended finger counts to ExtendedFingerDetector. This allows you to specify that at least a minimum and/or no more than a maximum number of fingers are extended.
Streamlined ExtendedFingerDetector code.
Changed FingerDirectionDetector to use the direction of the distal phalanges rather than the intermediate phalange.
Added Tag name setting to ProximityDetector that adds any objects with the specified tag to the target object list.
Added a Layer option to ProximityDetector, which uses the specified Layer for proximity checks rather than the target object list.
Fix: Instantiating LMHeadMountedRig at runtime would break HandRepresentation building.
Fix: When a hand was removed from the scene, its model's were all returned to the HandPool. But there needed to be a check to see if there was another candidate hand active in the scene. Then, add the model to that hand instead of returning to HandPool.
A. Building Unity UIs that our hands can interact with.
B. Interaction at a distance -- projects a cursor toward the UI and interact with a pinch
Added Detector utilities to the core assets -- these build on LeapPinchDetector to aid developers in detecting when a hand is in a desired state. Includes 2 new example scenes. Detectors include:
Extended fingers
Finger and palm pointing direction
Pinch detector (moved from former PinchUtilites)
Proximity to a list of target game objects
A logic gate for combining detectors
Added LeapCSharp.NET3.5.dll, which contains the C# wrapper classes around LeapC. Removed LeapC source files.
Removed PinchUtilites module. Code was moved to core as a detector; examples were moved to DetectionExamples.
Added a Sphere mesh setting to CapsuleHand and provided lower-poly sphere objects.
Made it optional for a IHandModel to persist in the scene in Edit mode.
Fixed turning on and off graphics or physics hands in the LeapHandController.
Fixed bug in which old frames would be used if the head transform didn't change
Fixed bug that caused temporal warping to fail 1-in-5 times on Vive (hands not rotating with camera)
Added ToggleModelGroup() method for groups in HandPool
Fixed bug with group enabling and disabling in HandPool
Added script to detect Vive vs. Oculus and adjust camera height compared to floor - this won't be apparent in any of the Core Asset scenes since they feature only hands.