Почему при движении персонажа Unity3D с помощью AddForce() его сдвигает в бок?

При передвижении с помощью Input.GetAxis(), параллельно оси, все работает нормально. Персонаж двигается, как и положено. Но когда я начинаю движение по диагонали, тот начинает сдвигаться в сторону другой оси.

PlayerController.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    Rigidbody Player;
    public Transform PlayerCamera;
    public float Speed;
    public Vector3 MaxSpeed;
    public float JumpHeight;
    void Start()
    {
        Player = GetComponent<Rigidbody>();
    } 
    void Update()
    {
        Movement();
        Jump();
    }
    void Movement() {
        var MovementInput = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        Player.AddForce(transform.TransformDirection(MovementInput) * Speed);
        Player.velocity = new Vector3(Mathf.Clamp(Player.velocity.x, 0, MaxSpeed.x), Player.velocity.y, Mathf.Clamp(Player.velocity.z, 0, MaxSpeed.z));
        Debug.DrawRay(Player.transform.position + transform.forward, transform.forward * 10f);
    }
    void Jump() {
        if (Input.GetKeyDown(KeyCode.Space)) {
            Player.AddForce(Vector3.up * JumpHeight, ForceMode.Impulse);
        }
    }
}

Может, это как-то связано с поворотом камеры?

CameraRotation.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraRotation : MonoBehaviour
{
    public Transform CameraAxis;
    public float Sensivity = 1f;
    public float MaxAngle = 90f;
    public float MinAngle = -90f;
    void Update()
    {
        var NewAngleY = Input.GetAxis("Mouse X") * Sensivity * Time.deltaTime;
        var NewAngleX = -Input.GetAxis("Mouse Y") * Sensivity * Time.deltaTime;
        CameraAxis.localEulerAngles += new Vector3(Mathf.Clamp(NewAngleX, MinAngle, MaxAngle), 0, 0);
        transform.localEulerAngles += new Vector3(0, NewAngleY, 0);
    }
}

Пытался чинить через transform.TransformDirection(), он только сильнее выявил проблему. Пробовал изменить сам префаб игрока, добавил ось (просто родительский объект камеры), но это ничего не изменило.

Фото инспектора


Ответы (0 шт):