transform.localscale not working after update


I have a script for my enemy AI which flips the object and applies velocity to it (moves it left or right) when it hits an obstacle. I recently updated Unity to the newest version, before the update this worked like a dream but now on hitting the obstacle the AI turns correctly but continues in his previous direction anyway. I’m very confused as I have changed absolutely nothing. If anyone can see any mistakes I may have made or anything I would be very appreciative, I’m at my wits end right now.

Here is the method for turning the AI

void turn(float prevDirection, float newDirection)
        if (walkingDirection == prevDirection)
            walkingDirection = newDirection;
            transform.localScale = new Vector3(transform.localScale.x * -1, transform.localScale.y, 1);
            if (walkingDirection == 1)
                isFacingRight = true;
            else if (walkingDirection == -1)
                isFacingRight = false;

here is the method for applying the movement to the AI

    void Move(float speed)
        velocity.x = speed * Time.deltaTime;
        velocity.y += gravity * Time.deltaTime;
        controller.Move(walkingDirection * velocity * Time.deltaTime);

and finally the if statement (in the update method) where these are applied:

        if(!alert && !caution)
            spr.color =;
            positionSet = false;
            alertCoolDown = 1;

            if (controller.collisions.right)
                turn(1, -1);
            else if (controller.collisions.left)
                turn(-1, 1);

I have included a .gif of the error in question so hopefully you can see what I mean:

ANY help at all would be amazing. Thank you very much.

@donlew I certainly did! Had to email customer support to find a fix, which is bananas and probably says a lot about Unity Documentation. Anyway, I will c+p the email here for your convenience.

So I have talked with the developer and it seems that “transform.Translate(velocity);” has changed behaviour since 5.4(The X velocity is -0.04f but when added to the transform that has local scale X to -1, it causes the Transform to be moved right and not left as previous.)

Here is a fix for your issue:

There is now an overload of this method that allows you to specify which space to translate in i.e. self (local) or world.

Changing the method from:



transform.Translate(velocity, Space.World);

seems to solve the issue.

Hope this helps you!