public bool Setup(Animator animator, IkChain chain, Type componentType, string weightProperty, string weightOffsetProperty, string targetOffsetProperty) { if (!chain.HasValidData()) { return(false); } // Target m_TargetOffset = chain.target.offset; if (chain.target.readFrom == TargetType.Stream) { m_EffectorStreamHandle = animator.BindStreamTransform(chain.target.target); m_UseStreamEffector = true; } else { m_EffectorSceneHandle = animator.BindSceneTransform(chain.target.target); m_UseStreamEffector = false; } // Weight if (chain.weight.useAnimatorProperty && chain.weight.propertyName != "") { m_AnimatorWeight = animator.BindStreamProperty(animator.transform, typeof(Animator), chain.weight.propertyName); m_UseAnimatorProperty = true; } m_WeightHandle = animator.BindSceneProperty(animator.transform, componentType, weightProperty); m_AnimatorWeightOffset = animator.BindSceneProperty(animator.transform, componentType, weightOffsetProperty); // Driven m_IkType = chain.driven.type; if (m_IkType == IkType.Generic) { var end = chain.driven.genericEndJoint; var mid = end.parent; var start = mid.parent; m_StartHandle = animator.BindStreamTransform(start); m_MidHandle = animator.BindStreamTransform(mid); m_EndHandle = animator.BindStreamTransform(end); } else { m_HumanLimb = chain.driven.humanoidLimb; } return(true); }