Unity | C# | Когда хожу при передвижении всё равно иду в одну и туже сторону

Хочу написать игру от 1 лица

Учусь Unity 2 дня. Хочу написать нормальную ходьбу и передвижение камеры. Получается не очень. Крутится камера ну прекрасно. Но когда хожу даже при повороте камеры. Персонаж идёт в 1 сторону. Т.е. Я иду вперёд на w, поворачиваюсь вправо на 90 градусов, и персонаж идёт налево. Насколько я понял объект игрока не крутится.

Код ходьбы :

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

public class Player_Go : MonoBehaviour
{
    public float speed = 7f;

    private void Update()
    {
        GetInput();
    } 

    private void GetInput()
    {
        if (Input.GetKey(KeyCode.W))
        {
            transform.localPosition += transform.forward * speed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.S))
        {
            transform.localPosition += -transform.forward * speed * Time.deltaTime;
        }        

        if (Input.GetKey(KeyCode.A))
        {
            transform.localPosition += -transform.right * speed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.D))
        {
            transform.localPosition += transform.right * speed * Time.deltaTime;
        }    

        if (Input.GetKey(KeyCode.Space))
        {
            transform.localPosition += transform.up * speed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.E))
        {
            transform.localPosition += -transform.up * speed * Time.deltaTime;
        }
   
    }
}

Код камеры :

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

[AddComponentMenu("Camera-Control/MouseLook")]
public class Camera : MonoBehaviour
{
    public enum RotationAxes { MouseXandY = 0, MouseX = 1, MouseY = 2 };
    public RotationAxes axes = RotationAxes.MouseXandY;
    public float sensitivityX = 2f;
    public float sensitivityY = 2f;
    public float minimuX = -360f;
    public float maximumX = 360f;

    public float minimuY = -360f;
    public float maximumY = 360f;

    float rotationX = 0f;
    float rotationY = 0f;

    Quaternion originalRotation;


    void Start()
    {
        if (GetComponent<Rigidbody>())
        {
            GetComponent<Rigidbody>().freezeRotation = true;
        }
        originalRotation = transform.localRotation;
    }

    public static float ClampAngle (float angle, float min, float max)
    {
        if (angle < -360f) angle += 360f;
        if (angle > 360f) angle -= 360f;
        return Mathf.Clamp(angle, min, max);
    }

    void Update()
    {
       if(axes == RotationAxes.MouseXandY)
        {
            rotationX += Input.GetAxis("Mouse X") * sensitivityX;
            rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

            rotationX = ClampAngle(rotationX, minimuX, maximumX);
            rotationY = ClampAngle(rotationY, minimuY, maximumY);
            Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
            Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, -Vector3.right);
            transform.localRotation = originalRotation * xQuaternion * yQuaternion;
        }
        else if(axes == RotationAxes.MouseX)
        {
            rotationX += Input.GetAxis("Mouse X") * sensitivityX;

            rotationX = ClampAngle(rotationX, minimuX, maximumX);

            Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
            transform.localRotation = originalRotation * xQuaternion;
        }

        else if (axes == RotationAxes.MouseY)
        {
            rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

            rotationY = ClampAngle(rotationY, minimuY, maximumY);

            Quaternion yQuaternion = Quaternion.AngleAxis(-rotationY, Vector3.right);
            transform.localRotation = originalRotation * yQuaternion;
        }
    }
}

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