- Home /
The question is answered, right answer was accepted
Varying behaviour of transform.position.localPosition.x in StateMachineBehaviour OnStateUpdate
So I'm getting the basics of a platformer going, and doing the work early for animations and actions. I have two animations, DevRollRight and DevAttack, with two StateMachineBehaviours attached to their animation states - DevRollScript and DevAttackScript. I want to access the transform.localPosition.x
of the Holder (which has the animator on it, and sprites etc as children).
I implemented the DevRollScript a while ago - and when I log the animator.transform.localPosition.x
during OnStateUpdate, the values I see in the editor are output. Now when I use the same technique on the DevAttackScript, the localPosition.x
is supposedly 0 every frame (and world position constant), even though when I look in the editor it changes as it is supposed to. What is happening!?
public class DevAttackScript : StateMachineBehaviour
{
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
//animator.transform.parent.GetChild(0).gameObject.SetActive(false);
animator.transform.parent.GetComponent<PlayerController>().setAttacking(true);
}
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
Debug.Log(animator.transform.name + "attacky");
Debug.Log(animator.transform.localPosition.x);
}
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
//do final stuff
}
}
public class DevRollScript : StateMachineBehaviour
{
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
animator.transform.parent.GetChild(0).gameObject.SetActive(false);
animator.transform.parent.GetComponent<PlayerController>().setRolling(true);
}
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
Debug.Log(animator.transform.name + "rolly");
Debug.Log(animator.transform.localPosition.x);
}
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
//final stuff
}
}
Both animations are done in the same way, with unity's keyframes - both of them change the transform.position of Holder. Im at a lost after hours off trying to understand the issue here
Answer by Azoghal · Apr 30, 2020 at 07:07 PM
fear not, some other script was interfering. I feel stupid