- 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!!