public void ApplyConstraint(Transform sourceJoint) { if (weightedTargetJoints.Length == 0) { return; } sourceJoint.rotation = ConstraintWeightedTarget.GetWeightedOrientation(weightedTargetJoints, worldSpace); }
public void ApplyConstraint(Transform sourceJoint) { if (weightedTargetJoints.Length == 0) { return; } var weightedTargetPosition = ConstraintWeightedTarget.GetWeightedPosition(weightedTargetJoints); ms_lookAtVectors[(int)sourceLookAtAxis] = (weightedTargetPosition - sourceJoint.position).normalized * sourceLookAtAxisFlip; if (upLookAt) { if (upWorld) { ms_lookAtVectors[(int)upSourceAxis] = ms_axisVectors[(int)Axis.Y] * upSourceAxisFlip; // Is this correct? } else { ms_lookAtVectors[(int)upSourceAxis] = (upJoint.position - sourceJoint.position).normalized * upSourceAxisFlip; } } else { if (upWorld) { ms_lookAtVectors[(int)upSourceAxis] = ms_axisVectors[(int)upTargetAxis] * upSourceAxisFlip; } else { var weightedTargetOrientation = ConstraintWeightedTarget.GetWeightedOrientation(weightedTargetJoints, true); ms_lookAtVectors[(int)upSourceAxis] = weightedTargetOrientation * ms_axisVectors[(int)upTargetAxis] * upSourceAxisFlip; } } ms_lookAtVectors[(int)implicitAxis] = Vector3.Cross(ms_lookAtVectors[(int)sourceLookAtAxis], ms_lookAtVectors[(int)upSourceAxis]); ms_lookAtVectors[(int)upSourceAxis] = Vector3.Cross(ms_lookAtVectors[(int)implicitAxis], ms_lookAtVectors[(int)sourceLookAtAxis]); sourceJoint.rotation = Quaternion.LookRotation(ms_lookAtVectors[2], ms_lookAtVectors[1]); }