๐๏ธHand
Last updated
Last updated
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
The hand requires finger
components and a palm transform
to generate poses
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
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
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
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
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
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)
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)
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.
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
Auto Hand hands have four essential functions, Grab()
, Release()
, Squeeze()
, and Unsqueeze()
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 theGrab()
functions are most consistent, if you do not have a meaning of getting a proper raycasthit you can use theTryGrab()
function instead
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 theOnReleaseEvent
The
Squeeze()
function is used to call an additional event on the grabbable and hand through controller input while held
Auto Hand haptics supported for if supported by your device for that system
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
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