- Home /
 
What´s wrong with my rotation function?
Hi! I´m making a 3rd person action game. In that game I´ve a function where the player shoot arrows. I´m using mecanim animations, therefore I got the next state machine: Idle->loadArrow->aimBow->shoot->Empty->Idle In the "aimBow" state I want the user to be able to use the keyboard arrows or the mouse to rotate the player. Here is my code for the rotation: private float rotationX = 0f; private float rotationY = 0f; private float sensitivity = 2f; public Quaternion originalRotationValue;
     void Start () 
     {
         animator = GetComponent<Animator>();
         
         if(animator.layerCount >= 2)
             animator.SetLayerWeight(1, 1);
     }
     
     void lockedRotation(float h, float v)
     {
         Debug.Log("lockedRotationBefore -> rotationY: " + rotationY);
         rotationX += v * sensitivity;
         rotationX = Mathf.Clamp (rotationX, -15, 15);
         rotationY += h * sensitivity;
         rotationY = Mathf.Clamp (rotationY, -45, 45);
         Debug.Log("lockedRotationAfter ->  rotationY: " + rotationY);
         armL.transform.rotation = Quaternion.Euler(rotationY, rotationX, 0);
     }
 
     void unLockRotation()
     {
         armL.transform.rotation = originalRotationValue;
         Debug.Log("unLockRotation ->  rotationY: " + rotationY);
     }
     
     // Update is called once per frame
     void Update () 
     {
 
         if (animator)
         {
             AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);            
             float h = Input.GetAxis("Horizontal");
             float v = Input.GetAxis("Vertical");
             if (stateInfo.IsName("Bow_Machine.aimBow")) {
                 Debug.Log("Bow_Machine.aimBow: " + rotationY);
                 lockedRotation(h, v);
             }
             if (stateInfo.IsName("Bow_Machine.Empty")) {
                 Debug.Log("Bow_Machine.Empty: " + rotationY);
                 unLockRotation();
             }
             if (stateInfo.IsName("Bow_Machine.loadArrow")) {
                 Debug.Log("Bow_Machine.loadArrow: " + rotationY);
                 //originalRotationValue = transform.rotation;    
                 //rotationX = originalRotationValue.x;
                 //rotationY = originalRotationValue.y;
             }
 
             animator.SetFloat("Speed", h*h+v*v);
             animator.SetFloat("Direction", h, DirectionDampTime, Time.deltaTime);    
         }             
     }        
 
               So it does the rotation, but every time I enter into the "aimBow" state; my player rotates to the direction it was when the game started, and it stays in that direction till I start moving the player again, when all I want is for my player to face the direction it had when it entered from the "Idle" state to the "loadArrow" state.
Does anyone knows, why am I getting the wrong rotation? Thanks in advance!!
Your answer