Body Part Length Adjuster

BodyPartLengthAdjuster controls character body proportions at runtime.
It supports:
length-style adjustments (joint offset based)
advanced per-part scaling
head size scaling
optional leg height compensation
Supported Body Parts
BodyPartType entries:
ArmsLegsNeckTorsoHeadUpperArmsLowerArmsUpperLegsLowerLegsNeckScaleHipsLowerTorsoMidTorsoUpperTorsoBreastsHandsFeet
If a part is not configured on a given rig, it is ignored safely.
Length vs Scale Behavior
Length parts (Arms, Legs, Neck, Torso)
Arms, Legs, Neck, Torso)These use local position offsets (joint length style), not bone non-uniform scaling.
Key behavior:
roots stay anchored
chain distribution is optional via
distributeMultiplierAcrossBoneChainendpoint handling is configurable:
adjustArmEndpointsadjustLegEndpointsadjustNeckEndpointsadjustTorsoEndpoints
Advanced scale parts
These use scale-based adjustment:
UpperArms,LowerArmsUpperLegs,LowerLegsNeckScale,HipsLowerTorso,MidTorso,UpperTorsoBreasts,Hands,Feet
Mode is controlled by useUniformScaleForAdvancedParts:
true: Uniform XYZ scalingfalse: Width-only XZ scaling (Y unchanged)
Runtime API:
SetAdvancedScaleUniformMode(bool useUniformScale)
Important:
for most advanced parts, child visuals are compensated to avoid unintended child scaling
HandsandFeetintentionally do not compensate children (their child bones scale too)
Head Size
Head size is controlled by BodyPartType.Head and scales headScaleRoot uniformly.
If headScaleRoot is empty and autoDetectHeadScaleRoot is enabled, auto-detection tries:
configured Head part bones
Neck child bones
Humanoid Animator
Headbone
Leg Height Compensation
Optional ground-contact stabilization when leg-related values change:
compensateHeightForLegLengthheightCompensationRootfeetForHeightCompensation
When enabled, the adjuster offsets the compensation root in Y so feet keep baseline height.
Setup Wizard Integration
Use: Tools/Character Creator/Character Creator Setup Wizard
What it does:
adds/configures
BodyPartLengthAdjusterauto-assigns body part bone chains for Humanoid rigs
auto-detects optional breast bones by transform name (
breast/bust)sets initial advanced scale mode from:
Advanced Scalers Use Uniform Scale
For non-Humanoid rigs, manual body-part bone assignment is expected.
Runtime API (Common)
AdjustBodyPartLength(BodyPartType partType, float multiplier)GetCurrentMultiplier(BodyPartType partType)IsBodyPartConfigured(BodyPartType partType)SetAdvancedScaleUniformMode(bool useUniformScale)ResetAllLengths()
Global multiplier range is clamped by:
minMultipliermaxMultiplier
Preset and Save Integration
CharacterPresetManager captures and restores:
per-part multipliers from
BodyPartLengthAdjuster.currentMultipliersuseUniformScaleForAdvancedPartsmode
RememberCharacterPreset persists this through Crystal Save snapshot flow (when enabled).
UI Integration
CharacterCreatorDemoUI and presenter UIs can drive these values through the body scale presenter.
Current demo supports:
per-slider hide toggles
per-slider min/max range overrides
optional runtime hide of advanced scale mode toggle
Troubleshooting
A slider does nothing
Body part not configured on this rig
Verify body part bones/childBones setup
Scaling also affects unintended children
Wrong part assignment or mode expectation
Check advanced part setup and uniform/width mode
Head size slider does nothing
headScaleRoot unresolved
Assign headScaleRoot or enable auto-detect on Humanoid rig
Feet float/sink after leg changes
leg compensation disabled or feet unresolved
Enable compensation and assign feet references
Preset restore misses body scales
CharacterPresetManager.bodyPartAdjuster missing
Ensure preset manager points to active adjuster
Last updated