# Auto Hand V4  What's-New

### Changes to Hand Component&#x20;

Hand logic is now split into additional scripts. None of these scripts need to be manually added. All these scripts and their recommended values will be automatically applied to each hand component.

* `Hand Follow` now manages the hand movement instead of Hand.cs. Includes public values and functions for previous movement settings, including exposing additional movement settings that were previously internal
* `Hand Follow` now includes options for dynamic hand mass. This will increase the hand mass based on its distance from the target position/rotation. This allows the hands to more realistically touch things without knocking them around.
* `Hand Follow` Some of the default settings have been changed for hand-hand movement. Hands should now feel more “snappy” and less “wobbly” when dealing with rotation/weight. Hands feel less “caveman-like” when touching dynamic objects, no longer as forceful until you push against the objects. Important for good feeling hand tracking.&#x20;
* `Hand Follow` now manages two-handed grabbing forces better by limiting the range of the move target to be based on each other hands target positions. Things like a steering wheel and pulling objects apart in opposite directions should feel more realistic
* `Hand Grabbable Highlighter` now manages the internal highlight functions. Hand.cs still manages the highlight settings except internal OnHighlight and OnStopHighlight event delegates will need to be changed to hand.highlighter.OnHighlight += MyEventFunc
* `Hand Grabbable Highlighter` will now by default favor highlighting objects near the fingers/fingertips instead of the palm face. Use the highlighter palmForwardRightDirection value to choose which angle will have more priority when grabbing
* `Hand Animator` now manages the hand posing instead of Hand.cs. Includes the public values and settings for hand-posing and hand sway. Hand.cs still includes auto posting function\


{% content-ref url="hand/hand-follow" %}
[hand-follow](hand/hand-follow)
{% endcontent-ref %}

{% content-ref url="hand/grabbable-highlighter" %}
[grabbable-highlighter](hand/grabbable-highlighter)
{% endcontent-ref %}

{% content-ref url="hand/hand-animator" %}
[hand-animator](hand/hand-animator)
{% endcontent-ref %}



### Additional setting requirements for the Finger component.&#x20;

Each finger now requires a setting for which finger type it is (index, middle, ring, pinky, or thumb), and manually connected references for each finger joint transforms. This allows for more dynamic control over the finger data/posing and helps prevent data corruption when changing the hand’s hierarchy

{% content-ref url="hand/finger-component" %}
[finger-component](hand/finger-component)
{% endcontent-ref %}



### Changes to the way HandPoseData is managed internally.&#x20;

<mark style="color:yellow;">Existing poses will need to be updated through the update window.</mark>

When entering a new scene, if any deprecated pose data is detected, a window will open and prompt you for the left/right copies of all the hands used for poses in this scene. Include your hands, press “Find Prefab Poses” if you’re using these included hands in your prefabs. Finally press “Update Poses”



### New Auto Pinch Settings

The hand will now take two new poses for Pinch Open, Pinch Closed. The hand will also take a new value called “Pinch Point” value. The “Pinch point” is similar to the “Palm” value in that it represents the center point of the pinch grab. It should be centered between the index/middle/thumb when the hand is in a closed pinch pose state.&#x20;

Grabbables set to grab type pinch will be pinch grabbed from any angle if the hands are setup for pinching\
![](https://2959669391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5zKO0EvOjzUDeT2aiFk3%2Fuploads%2Fg44JApAJPk2b3MeiJocI%2Fimage.png?alt=media\&token=776c0013-8ad3-4128-8203-8714f54ee0e0)![](https://2959669391-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5zKO0EvOjzUDeT2aiFk3%2Fuploads%2Fyn6MQvn0dLiYFHwFz7ck%2Fimage.png?alt=media\&token=c935f62c-e683-4842-a2d8-d83a688eced3)



### Improved Hand Tracking&#x20;

The previous hand-tracking solution took the data from the hand-tracking pose and used it to interpolate each finger from open to closed. This solution worked to support hand tracking (in a minimalistic sense) without compromising other features, but it was a stiff and limited solution.&#x20;

The new solution allows for complete freedom of movement for each finger, it allows for multiple options for grab/release triggering: including finger-tip touch grabbing and making a grasping motion while targeting a grabbable, this combination makes for a much more natural feeling hand tracking experience.\


{% content-ref url="hand-tracking" %}
[hand-tracking](hand-tracking)
{% endcontent-ref %}



### Simple Desktop Player

Added a simple demo for desktop users at \[Auto Hand/Examples/Scenes/Desktop], which controls the left/right hand by holding the left/right mouse. Pressing space will toggle grab/release for hand when holding left/right mouse button. WASD to move and the mouse will turn head when not controlling hands. Not meant to be a game-ready solution just useful for testing simple features without going in and out of VR



### Additional New Features

* Added `OpenXR Hand Tracking` component
* Added `OpenXR Hand Tracking Grabber` component
  * Allow for grabbing to be triggered through grasping gesture settings
  * Allows for finger-tip touching grabbing settings
  * Supports held object finger movement
  * Supports held gesture with finger movement
* Added `Hand Gesture Event` component
* Added `Hand Finger Gesture Event` component, which takes two fingers and triggers an event for when they start/stop touching
* Added `Finger Trigger Area Events` component + simple example in the demo
* Added `No Hand Friction` toggle to hand, enabled by default, will automatically apply a no friction material to the hands colliders
* Added Finger Weight options to Grabbable Pose Animation&#x20;
* Added direction smoothing settings for Teleporter, UI Pointer, and Distance Grabber

{% content-ref url="hand-tracking/hand-tracking-finger-gesture-tracking" %}
[hand-tracking-finger-gesture-tracking](hand-tracking/hand-tracking-finger-gesture-tracking)
{% endcontent-ref %}

{% content-ref url="hand-tracking/hand-tracking-pose-gesture-tracking" %}
[hand-tracking-pose-gesture-tracking](hand-tracking/hand-tracking-pose-gesture-tracking)
{% endcontent-ref %}



### Bug Fixes

* Fixed bug with full-body hands sometimes separating from the grab target
* The Auto Hand Player uses a new method to move the body to match the head as closely as possible within tracking movement; the previous method was unstable and sometimes jittery. The new method also properly “lifts” the feet to prevent unwanted activation
* Fixed bug where the grounding system would return false negative when walking on a static mesh collider like a staircase and standing against a step that is just too high to step up
* Added assembly definitions to root scripts of each input package (Autohand, Autohand.OpenXR, Autohand.XR, Autohand.SteamVR, Autohand.OculusIntergation)
* Head collision will now push the whole body back along the x-z axis instead of creating a sort of “movement debt” that was unrealistic and disorienting
* Fixed possible phantom “flicker” that some people report when moving the player with thumbstick
* Increased stability and snappiness of two-handed grabbing
* Hand now properly transitions pose when releasing
* Highlights when targeting multiple objects will favor grabbing objects more in the direction of fingertips than the direction of the palm including a setting on the HandGrabbableHighlighter for personal adjustments
* Fixed bug with hand velocity not rotating properly when using smooth/snap rotation and moving your hands around
* Added virtual tag to more values/functions in the Finger/Player/Grabbable components
* Added fix for player head-body sync colliding with held colliders in some conditions
* Added fix with Player SetPosition function not working as expected under some conditions
* Added many new null checks across the project to prevent errors spamming when missing references or deleting certain objects
* Found source of build bug “HideFlags.DontSave but is included in the build:” and fixed
* You can now toggle “Grab Lock” by enabling/disabling the script
* Fixed missing prefab in hand tracking scene
* Added an automatic Rebinder() call in AutoHandVRIK to fix a bug for full body ik that breaks because of animator\


### Internal Pose Data Changes (SCRIPTING CHANGES):

HandPoseData can now be added to components using the HandPoseDataContainer interface. This will include all the default settings for adding a new hand editor copy and saving right/left pose data

HandPoseData now uses FingerPoseData\[] to manage the data of each finger’s pose instead of an array that relies on the hands hierarchy order. This allows for individual finger weights that can be used for masking or blending poses. Important for future features.

Example for getting finger pose data in hand pose data:

poseData.fingerPoseData\[(int)Finger.FingerEnum.Index].SetFingerPose(finger);&#x20;

{% content-ref url="custom-poses/hand-pose-data" %}
[hand-pose-data](custom-poses/hand-pose-data)
{% endcontent-ref %}

\
