HandSkeleton derived script that defines, as its name would suggest, a basic hand skeleton
This HandSkeleton is suited for most common needs
It moves itself and its HandBones to target poses by directly setting their Transforms' world space positions, rotations and scales
It exposes one property - UpdateRun which is of a certain enumeration type that defines which Unity's update callback should be used to set the HandBone Transforms; it can be Update, FixedUpdate, LateUpdate or any combination of these
Script that derives from HandSkeleton and is intended to be inherited by hand skeletons that serve the purpose of visualizing a hand in some special way
Usual use for this type of HandSkeleton is to visualize another HandSkeleton, and the most common way to achieve this is to use a HandSkeletonSourcedPoseProvider on the HandSkeleton that needs to be visualized and having that pose provider assigned to the VisualizedHandSkeleton as its pose provider (via PoseProvider property), though there may be other ways to achieve this defined by the specific VisualizedHandSkeleton
It uses the LateUpdate built-in callback to set the target pose which is set in the same way as it is set by the BasicHandSkeleton, LateUpdate is overridable if more custom behaviour is needed
The way VisualizedHandSkeleton is defined and set up, it can serve as a visualization of another HandSkeleton or it can be a visualization in and of itself, you can attach any InputDataProvider to it just as with any other HandSkeleton
A type of VisualizedHandSkeleton that uses skinned mesh for the hand visualization
It requires SkinnedMeshRenderer attached to the same GameObject it is attached to, this renderer component can be used to set the mesh as well as all the other rendering properties provided by it
SkinnedMeshVisualizedHandSkeleton is setting its attached HandBones' Transforms to the transforms array on the SkinnedMeshRenderer in the same order as they appear in the Bones list in the skeleton. Make sure the bindposes, bone weights and bone indices on the mesh used match the skeleton's bones in their number and indices at which they appear in the skeleton's bones list as otherwise SkinnedMeshRenderer might generate certain errors and/or warnings
In order to make SkinnedMeshVisualizedHandSkeleton visualization of another HandSkeleton, HandSkeletonSourcedPoseProvider should be used as mentioned in the previous section about VisualizedHandSkeleton
Another type of VisualizedHandSkeleton, this one visualizes the hand by using small spheres for hand bone joints and cylindrical segments that end up resembling sticks to represent connection of a bone with its child bones (meaning 5 segments for WristRoot bone is used and 1 for every other, except the finger tip bones which are only visualized by their joints). All these visualized components combined result in something that resembles a construction armature that is shaped like a hand
For every bone visualization component, a separate GameObject is used with MeshRenderer component attached to it. This results in many separate meshes being used for visualizing a hand and these renderer components can are used for manipulating all the usual rendering options provided by them
ArmatureVisualizedHandSkeleton uses its own special type of HandBone - ArmatureVisualizedHandBone, which manages its corresponding set of objects used as visualization components for the bone (one joint and possibly one or more segments). It exposes certain properties to provide simple and fast way of accessing each individual visualization component as well as some other rendering related properties
Removing a bone from the ArmatureVisualizedHandSkeleton results in the bone's visualization components being disabled so that they no longer get rendered
If you want to create a script for your own custom bone type to be used with a ArmatureVisualizedHandSkeleton, then have that script be derived from ArmatureVisualizedHandBone instead of HandBone
Important to mention is that the ArmatureVisualizedHandSkeleton provides one additional way for making it act as a visualization of another HandSkeleton, in addition to using a HandSkeletonSourcePoseProvider. It exposes the certain HandSkeleton-typed property - VisualizationOf. Any HandSkeleton can be assigned to this property in order to make the ArmatureVisualizedHandSkeleton act as a visualization for the assigned one. This has one difference from using HandSkeletonSourcedPoseProvider - HandBones which are missing from the source HandSkeleton are removed from the ArmatureVisualizedHandSkeleton as well and if a HandBone is added to the source HandSkeleton, a corresponding bone gets added to the ArmatureVisualizedHandSkeleton. This behaviour does not occur when using a HandSkeletonSourcedPoseProvider method for visualizing other HandSkeletons