// Called each time before FBBIK solves protected override void OnModifyOffset() { // Go through all the warps... for (int i = 0; i < warps.Length; i++) { float warpWeight = GetWarpWeight(i); // Get the offset form warpFrom to warpTo Vector3 offset = warps[i].warpTo.position - warps[i].warpFrom.position; // Add that offset to the effector (using positionOffset additively, because it will be reset to Vector3.zero by FBBIK after each update) switch (effectorMode) { case EffectorMode.PositionOffset: ik.solver.GetEffector(warps[i].effector).positionOffset += offset * warpWeight * weight; break; case EffectorMode.Position: ik.solver.GetEffector(warps[i].effector).position = ik.solver.GetEffector(warps[i].effector).bone.position + offset; ik.solver.GetEffector(warps[i].effector).positionWeight = weight * warpWeight; break; } } // Switching modes safely, weighing out effector positionWeights if (lastMode == EffectorMode.Position && effectorMode == EffectorMode.PositionOffset) { foreach (Warp warp in warps) { ik.solver.GetEffector(warp.effector).positionWeight = 0f; } } lastMode = effectorMode; }
// Called each time before FBBIK solves protected override void OnModifyOffset() { // Go through all the warps... for (int i = 0; i < warps.Length; i++) { float warpWeight = GetWarpWeight(i); // Get the offset form warpFrom to warpTo Vector3 offset = warps[i].warpTo.position - warps[i].warpFrom.position; // Add that offset to the effector (using positionOffset additively, because it will be reset to Vector3.zero by FBBIK after each update) switch(effectorMode) { case EffectorMode.PositionOffset: ik.solver.GetEffector(warps[i].effector).positionOffset += offset * warpWeight * weight; break; case EffectorMode.Position: ik.solver.GetEffector(warps[i].effector).position = ik.solver.GetEffector(warps[i].effector).bone.position + offset; ik.solver.GetEffector(warps[i].effector).positionWeight = weight * warpWeight; break; } } // Switching modes safely, weighing out effector positionWeights if (lastMode == EffectorMode.Position && effectorMode == EffectorMode.PositionOffset) { foreach (Warp warp in warps) { ik.solver.GetEffector(warp.effector).positionWeight = 0f; } } lastMode = effectorMode; }
protected override void Start() { base.Start(); lastMode = effectorMode; }