๐Ÿ–๏ธHand

The core component of Auto Hand. This will manage Grabbing, Highlighting, Posing, and Movement. Requires a rigidbody. This component should be added to the root of your hand model, which should contain the rigged skeleton and the skinned mesh rendered underneath it

Core Settings

The hand requires finger components and a palm transform to generate poses

Finger

Each knuckle on the skeleton should have a finger component. The finger requires a transform that represents the finger tip and tip radius (which will act as a bumper for automatic grabbing)

The fingers must be connected before the open/closed poses can be saved

โ˜๏ธFinger Component

Palm Transform

The palm transform represents the point and forward direction of the grab. This will affect where the automatic grab will be positioned in the hand and where the cone that looks for grab targets is projected from.

This should be an empty transform placed at the center of the palm, with the LOCAL forward rotation (blue arrow) facing away from the hand

Movement

The hand will follow the given transform and match it's position/rotation using rigidbody forces

You can disable movement by disabling this Enable Movement toggle, or setting the rigidbody to be kinematic

The hand will teleport to the follow position if it's distance from the follow target is greater than the max follow distance. If the hand is holding a grabbable during teleport it will release or bring the held object based on the grabbable's "parent on grab" value

Follow represents the transform that the hand will use physics movement to try and match

  • (Recommend making the follow an empty transform under the controller, which can be used to offset the hands position/rotation)

Throw Power multiplies the velocity of the grabbable on release by this value

Gentle Grab Speed multiplies the controller movement required to return the object if the grabbable's gentle grab value is enabled

๐Ÿ‘‹Hand Follow

Posing

Disable this module when doing custom animations. The posing module will update the fingers, create finger sway, and look for custom pose areas. The Grab/AutoPose functions will still perform poses.

Sway Strength will be how much the fingers sway when the hands moves, 0 to disable

Grip Offset will offset the bend of every finger. 0.14 is slight bend 1 is full bend

Automatic posing is default when grabbing a Grabbable without any custom pose components

Learn more: โœCustom Poses

๐ŸซณHand Animator

Highlighting

The highlighting module will look for grabbables to highlight. This is a passive system should be disabled for optimization purposes when not being used. If Highlight layers are left on nothing, it will default to grabbable, so make sure to disable the Enable Highlight toggle instead.

Highlighting events are triggered when an object is being targeted for grabbing

Highlight Layers represents which layers the highlight module will search for, (will default to grabbable if left blank to disable highlighting uncheck Enable Highlight)

Default Highlight material will be applied to all grabbables without a highlight material

  • Highlight Material works by making a copy of the target grabbable's mesh, applying the highlighted material, and scaling it up slightly

๐Ÿ”ฆGrabbable Highlighter

Advanced Options

  • Grab Type decides whether the hand grabs objects, objects move to hands, or are instant grab

  • Min Grab Time

  • Max Grab Time

  • Grab Curve represents the animation over the grab time of the grab

    • (x = grab time from 0-1, y = grab pose from 0-1)

  • Pose index must match the pose index of pose components to work (added for supporting more than one hand model per game)

Events

While the Auto Hand includes internal C# Events, public Unity Events can be found through the Hand Public Events component

  • On Before Grab is called after a grab is confirmed possible, before the grab has started

  • On Grab is called when the hand touches the grabbable, after the grab connection is made

  • On Release is called when the hand releases the grabbable

  • On Force Release is called when the force release function is called forcing the object to be โ€œdroppedโ€ instead of properly released

  • On Squeeze called on when the squeeze button is trigger while holding a grabbable. Squeeze button is determined by the Hand Controller Link settings (attached to โ€œInputโ€ gameobject under hands in demo)

Controller Input

โœŠHand Input

Haptic Collisions

An optional component that can be added to the Hand object is the Hand Collision Haptics this component will cause controller vibrations (if supported by input system) when the hands collide with objects on the collision triggers mask.

Grab Lock

You can add the Grab Lock component onto a Grabbable object to prevent it from being released via the usual Hand.Release() method. Instead you will have to call the Hand.ForceRelease() or Hand.ReleaseGrabLock() method to drop an grabbable with this component.

\You can also enabled/disable the grablock using grablock.enabled to toggle through script

Distance Grabbing

๐ŸงฒDistance Grabbing

Hand Projection

๐ŸงคHand Projector

Programming Info

Auto Hand hands have four essential functions, Grab(), Release(), Squeeze(), and Unsqueeze()

Grabbing

Grabbing is best done with the default Grab() function, but grabbing only what is in front of the hand does not fit every use case. While the Grab() functions are most consistent, if you do not have a meaning of getting a proper raycasthit you can use the TryGrab() function instead

Releasing

The Release() function will release whatever the hand is currently holding and apply the hands velocity and throw power to the grabbable. ForceRelease() will release the grabbable without applying throw force. Both will call the OnReleaseEvent

Squeezing

The Squeeze() function is used to call an additional event on the grabbable and hand through controller input while held

Haptics

Auto Hand haptics supported for if supported by your device for that system

Auto Posing Function

Advanced users might want to use just the Auto Pose generation in their system. In order to do so you must get a raycast hit point on the surface of your grab target

Set Location

You can use the hand.SetLocation(Vector3 position, Quaternion rotation) to set the hand position/rotation. If the hand is holding a grabbable during this function call it will release or bring the held object based on the whether or not the grabbable's "parent on grab" is true

For more advanced information on internal settings and custom layer options, see

Programming Events

Last updated