Correct animation blending during character rotation and looking to a mouse cursor 3d top-down

Hi to everyone. Sorry for my English. I have problems with character animation. So I had a script that creates good movement for my character and mixes up the animation depending on my character’s body position. So it was a WASD movement controller. WASD movement allowed my character to move along global coordinates i.e. By clicking on move forward (W), the character moved north. I did not like this. I made it so that the character now moves to where the mouse cursor is. For the character, where the mouse cursor is it is forward. But! All animations have gone wrong and are now blending incorrectly. Now they are blending in the same way as if for the character straight is north, and not the mouse cursor. Could you correct my code so that the animations are rendered correctly based on the direction the character is moving?
And I want to change my character speed, if the LeftShift is pressed, but increase speed only if character run forward. Where I need to change my code and for what?

Thank you for answer! I am stuck for 2 weeks now :frowning:

I am music composer and more modeler, than a coder.

using UnityEngine;
using System.Collections;


[RequireComponent(typeof(Rigidbody))]

public class PlayerControl : MonoBehaviour {

	[Header("Speed:")]
	public float speed = 4f;
	public float acceleration = 10f;
	public float RunSpeed = 3f;
			
	[Header("Rotation:")]
	public Transform bodyTransform; 
	public float smooth = 3;
	public bool useSmooth;

	[Header("Control camera")]
	public Transform cameraParent;
	
	private Vector3 direction;
	private Rigidbody body;
	public Animator _anim;
	private float vertical;
    private float horizontal;
	Vector3 camForward;
	Vector3 move;
	Vector3 moveInput;
	Transform Cam;

	float forwardAmount;
	float turnAmount;

	void Awake()
	{
		body = GetComponent<Rigidbody>();
		body.freezeRotation = true;
		_anim = GetComponent<Animator>();
		
		Cam = Camera.main.transform;
	}
	
	void FixedUpdate()
	{
	vertical = Input.GetAxis("Vertical");
        horizontal = Input.GetAxis("Horizontal");

		if(Cam != null)
		{
			camForward = Vector3.Scale(Cam.up, new Vector3(1,0,1)).normalized;
			move = vertical * camForward + horizontal * Cam.right;
		}
		else 
		{
			move = vertical * Vector3.forward + horizontal * Vector3.right;
		}
		if (move.magnitude > 1)
		{
			move.Normalize();
		}
		Move(move);

		body.AddForce(direction.normalized * acceleration * body.mass * speed);
		if(Mathf.Abs(body.velocity.x) > speed)
		{
			body.velocity = new Vector3(Mathf.Sign(body.velocity.x) * speed, body.velocity.y, body.velocity.z);
		}
		if(Mathf.Abs(body.velocity.z) > speed)
		{
			body.velocity = new Vector3(body.velocity.x, body.velocity.y, Mathf.Sign(body.velocity.z) * speed);
		}
		Rotation();
	}
	void Move(Vector3 move)
	{
		if(move.magnitude > 1)
		{
			move.Normalize();
		}
		this.moveInput = move;

		ConvertMoveInput();
		UpdateAnimator();
	}

	void ConvertMoveInput()
	{
		Vector3 localMove = transform.InverseTransformDirection(moveInput);
		forwardAmount = localMove.z;
		turnAmount = localMove.x;
	}

	void UpdateAnimator()
	{
		_anim.SetFloat("Forward", forwardAmount, 0.1f, Time.deltaTime);
		_anim.SetFloat("Turn", turnAmount, 0.1f, Time.deltaTime);
	}
	void Rotation() 
	{
	Vector3 lookPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.y)) - body.position;
		lookPos.y = 0; 

		if(useSmooth)
		{
		Quaternion playerRotation = Quaternion.LookRotation(lookPos);
		bodyTransform.rotation = Quaternion.Lerp(bodyTransform.rotation, playerRotation, smooth * Time.fixedDeltaTime);	
		}
		else
		{
			bodyTransform.rotation = Quaternion.LookRotation(lookPos);
		}
	}

	void Update()
	{
	transform.Translate(Vector3.right * Input.GetAxis("Horizontal") * Time.deltaTime * speed);
	transform.Translate(Vector3.forward * Input.GetAxis("Vertical") * Time.deltaTime * speed);
    }
}

And why my rigidbody is falling so slow?

When I use this - my capsule collider is not working - my character pass trough the walls and other objects. Why?