- Home /
ik target isn't being reset
I'm working on an ik function which changes the target shoulder for the gun a character is holding if they lean to the left. The idea is that the ik position will interpolate between the left and right shoulders as the animator leans the character left or right. With the script as it is now (if the interval is not 1, it starts at the left shoulder), the ik position starts at the rightshoulder, but upon changing, it never returns.
void OnAnimatorIK () {
AnimatorStateInfo animstate = animator.GetCurrentAnimatorStateInfo(0);
float actualincrement = 0f;
positionadjust = shouldertarget;
if (animator.GetFloat("lean") < 0) {//the targets aren't changing back. Has to be a problem with the targets.
target2 = shouldertargetleft.position;
target = shouldertarget.position;//this position becomes identical to the above after a lean for some reason.
leanincrement += Time.deltaTime * 0.35f;
leanincrement2 = 0f;
actualincrement = leanincrement;
} else {
target2 = shouldertarget.position;
target = shouldertarget.position;
leanincrement2 += Time.deltaTime * 0.35f;
leanincrement = 0f;
actualincrement = leanincrement2;
}
positionadjust.position = Vector3.Lerp (target, target2, 1f);
positionadjust.LookAt (looktarget);//this is about 90 degrees off.
positionadjust.Rotate (Vector3.forward * -90f);
//positionadjust = aimiktarget; //ik for ADS proof of concept
if (!animstate.IsName ("sprinting")) {
animator.SetIKPositionWeight (AvatarIKGoal.RightHand, 0.1f);
animator.SetIKRotationWeight (AvatarIKGoal.RightHand, 0.8f);
animator.SetIKPosition (AvatarIKGoal.RightHand, positionadjust.position);
animator.SetIKRotation (AvatarIKGoal.RightHand, positionadjust.rotation);
}
lefthandik (animstate);
}
I'm sure it isn't a problem with the if/else statements (as I've already checked thru debug). I figure it has to be a problem with the assignment of target and target2, or else the positions that they inherit (which are empty gameobjects parented to the main camera). I've noticed in the inspector that the actual transforms of the above mentioned empty objects become identical about the same time the issue occurs, despite the fact that they are never changed or assigned through code, only accessed.
I'm totally confused as to what is happening here. It seems to me this code ought to be working, but it isn't.
Does anyone have any ideas? This isn't an absolutely vital function to the game I'm trying to make (though its absence would be irritating without hitscan bullets), but it is rather frustrating to run into such a strange behavior with such a simple bit of code. It makes me think I must be missing something obvious.
Your answer
Follow this Question
Related Questions
Why is my Ik not working 0 Answers
Inverse Kinematics By Dogzer: transition apart from 0 and 1 give srange results 0 Answers
Modifying animation in Late Update not working 1 Answer
IK for hands 0 Answers