RootMotion.FinalIK.IKSolver.GetIKPositionWeight C# (CSharp) Method

GetIKPositionWeight() public method

Gets the %IK position weight. NOTE: You are welcome to read IKPositionWeight directly, this method is here only to match the Unity's built in %IK API.
public GetIKPositionWeight ( ) : float
return float
		public float GetIKPositionWeight() {
			return IKPositionWeight;
		}
		

Usage Example

示例#1
0
        /*
         * Presolving, applying offset
         * */
        public void OnPreSolve()
        {
            positionWeight = Mathf.Clamp(positionWeight, 0f, 1f);
            rotationWeight = Mathf.Clamp(rotationWeight, 0f, 1f);
            maintainRelativePositionWeight = Mathf.Clamp(maintainRelativePositionWeight, 0f, 1f);

            // Calculating weights
            posW = positionWeight * solver.GetIKPositionWeight();
            rotW = rotationWeight * solver.GetIKPositionWeight();

            node.effectorPositionWeight = posW;
            node.effectorRotationWeight = rotW;

            node.solverRotation = rotation;

            if (float.IsInfinity(positionOffset.x) ||
                float.IsInfinity(positionOffset.y) ||
                float.IsInfinity(positionOffset.z)
                )
            {
                Debug.LogError("Invalid IKEffector.positionOffset (contains Infinity)! Please make sure not to set IKEffector.positionOffset to infinite values.", bone);
            }

            if (float.IsNaN(positionOffset.x) ||
                float.IsNaN(positionOffset.y) ||
                float.IsNaN(positionOffset.z)
                )
            {
                Debug.LogError("Invalid IKEffector.positionOffset (contains NaN)! Please make sure not to set IKEffector.positionOffset to NaN values.", bone);
            }

            if (positionOffset.sqrMagnitude > 10000000000f)
            {
                Debug.LogError("Additive effector positionOffset detected in Full Body IK (extremely large value). Make sure you are not circularily adding to effector positionOffset each frame.", bone);
            }

            node.offset += positionOffset * solver.GetIKPositionWeight();

            if (effectChildNodes)
            {
                for (int i = 0; i < childNodes.Length; i++)
                {
                    localPositions[i]     = childNodes[i].transform.position - node.transform.position;
                    childNodes[i].offset += positionOffset * solver.GetIKPositionWeight();
                }
            }

            // Relative to Plane
            if (usePlaneNodes && maintainRelativePositionWeight > 0f)
            {
                animatedPlaneRotation = Quaternion.LookRotation(planeNode2.transform.position - planeNode1.transform.position, planeNode3.transform.position - planeNode1.transform.position);;
            }
        }