transform.eulerAngles not working

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,

You need to account for the fact that the Update function gets called up to 60 times per second. If you have any velocity or acceleration field defined in units per second, or angular velocity defined in radians or degrees or whole rotations per second, you should multiply it by Time.deltaTime (the amount of time that has passed since the previous Update) to convert it to rotation per update frame.

Multiplying DiagonalWalkRotationSpeed by the delta time should make your thing rotate more sensibly.

If I’m not mistaken, eulerAngles is a Vector3. Vector3 is a struct, not a class. So, when you do something like

transform.eulerAngles *= Vector3.up * 90;

it doesn’t update the transform.eulerAngles.
You need to assign it back.

transform.eulerAngles = transform.eulerAngles.Scale (Vector3.up * 90);