It used to work and all of a sudden it didn’t.
I checked my other scripts and I’m pretty sure I haven’t used the players euler angles in any other script.
This is the script I’m using euler angles in:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[DisallowMultipleComponent]
[RequireComponent(typeof(Animator))]
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(CapsuleCollider))]
public class Movement : MonoBehaviour
{
public float DiagonalWalkRotationSpeed;
public Transform camera;
Animator animator;
CapsuleCollider capsuleCol;
Vector3 prevRot; //Previous rotation
Vector3 currRot; //Current rotation
bool diagMove = false; //Diagonal movement
bool prevDiagMove; //Previous diagonal movement
bool rotatedLeft = false;
bool rotatedRight = false;
float diagRot = 45; //How much the diagonal rotation is going to be
float diagDegMoved; //How many degrees the player have rotated for the diagonal movement
private void Awake()
{
animator = GetComponent<Animator>();
}
private void Update()
{
currRot = new Vector3(currRot.x, camera.eulerAngles.y, currRot.z);
transform.eulerAngles = new Vector3(transform.eulerAngles.x, currRot.y, transform.eulerAngles.z);
Move();
prevRot = currRot;
prevDiagMove = diagMove;
}
void Move()
{
//Get axis inputs
var vAxis = Input.GetAxisRaw("Vertical");
var hAxis = Input.GetAxisRaw("Horizontal");
//Walking states
if (vAxis > 0 || hAxis != 0)
animator.SetFloat("Walking", 1); //If any axis-input is given, start walking
else if (vAxis == 0)
animator.SetFloat("Walking", 0); //Else if no axis-inputs are given, stop walking
if (vAxis == -1)
animator.SetFloat("Walking", -1); //If backwards input is given, walk backwards
//Direction states
if (vAxis == 0 && hAxis != 0)
animator.SetInteger("Direction", hAxis == 1 ? 1 : 3); //If moving horizontally, set direction to either 1 or 3 (Left or right) depending on input
else if (vAxis == 1)
animator.SetInteger("Direction", 2); //If moving forward, set direction to 2 (forward)
//Diagonal Movement
if (vAxis != 0) //If holding forward button
{
if (hAxis == 1 && !rotatedRight) //If holding left button
{
diagMove = true; //Player is moving diagonally
rotatedLeft = true; //Player is rotated to the left
rotatedRight = false; //Player is not rotated to the right
if (diagDegMoved < diagRot)
{
transform.eulerAngles -= new Vector3(0, DiagonalWalkRotationSpeed, 0);
diagDegMoved += DiagonalWalkRotationSpeed;
}
else
transform.eulerAngles = currRot + new Vector3(0, -diagRot, 0);
}
if (hAxis == -1 && !rotatedLeft) //If holding right button
{
diagMove = true; //Player is moving diagonally
rotatedRight = true; //Player is rotated to the right
rotatedLeft = false; //Player is not rotated to the left
if (diagDegMoved < diagRot)//If the player is not finished rotating
{
transform.eulerAngles += new Vector3(0, DiagonalWalkRotationSpeed, 0); //Keep rotating the player
diagDegMoved += DiagonalWalkRotationSpeed;
}
else //If the player is finished rotating
transform.eulerAngles = currRot + new Vector3(0, diagRot, 0); //Stop at target rotation
}
}
if (hAxis == 0 || (hAxis == 1 && rotatedRight) || (hAxis == -1 && rotatedLeft)) //If player is not moving OR Player is changing to the opposite rotation
{
if (rotatedRight) //If rotated
{
transform.eulerAngles -= new Vector3(0, DiagonalWalkRotationSpeed, 0); //Rotate back
if (transform.eulerAngles.y <= currRot.y)
transform.eulerAngles = currRot;
}
else if (rotatedLeft) //If rotated
{
transform.eulerAngles += new Vector3(0, DiagonalWalkRotationSpeed, 0); //Rotate back
if (transform.eulerAngles.y >= currRot.y)
transform.eulerAngles = currRot;
}
if (transform.eulerAngles == currRot) //If finished rotating back
{
//Reset
diagDegMoved = 0;
diagMove = false;
rotatedRight = false;
rotatedLeft = false;
}
}
}
}
It’s a animation-based movement script.
The reason for all the comments is because it’s a school assignment.
At line 70 I start using euler angles,