Почему объект двигается не в сторону лицевой стороны а строго по осям? как исправить

Есть куб ,задал движение через input.getkey всё хорошо,решил сделать поворот объекта камерой,вместе с мышью всё ,тоже получилось,но когда поворачивается объект оси по которым он двигается при нажатии остаются теми же ,т.е нажал 'W' движение впреёд т.е forward ,но если повернуть куб ,этот же 'W' продолжить двигать куб по оси а не в сторону которую повёрнут куб.

Самый простой код ,подскажите как исправить.

public GameObject playerOBJ;
public Camera cam;
public float camspeed = 0.45f;
public float speed = 5f;
public void Move(GameObject obj)
{
    if (Input.GetKey(KeyCode.W))
    {
        obj.transform.position += (Vector3.forward * Time.deltaTime)*speed;
    }
    if (Input.GetKey(KeyCode.S))
    {
        obj.transform.position += (Vector3.forward * Time.deltaTime) * -speed;
    }
    if (Input.GetKey(KeyCode.D))
    {
        obj.transform.position += (Vector3.right * Time.deltaTime) * speed;
    }
    if (Input.GetKey(KeyCode.A))
    {
        obj.transform.position += (Vector3.right * Time.deltaTime) * -speed;
    }
    if (Input.GetKey(KeyCode.Space))
    {
        obj.transform.position += (Vector3.up * Time.deltaTime) * speed;
    }
    if (Input.GetKey(KeyCode.LeftShift))
    {
        obj.transform.position += (Vector3.up * Time.deltaTime) * -speed;
    }
}
public void MouseCamera(Camera cm,GameObject obj)
{
    float mouseX=Input.mousePosition.x;
    cm.transform.rotation = Quaternion.Euler(0,mouseX*camspeed,0);
    obj.transform.rotation = cm.transform.rotation;
}
void Start()
{
   
}

void Update()
{
    MouseCamera(cam, playerOBJ);
    Move(playerOBJ);

}

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

Автор решения: SdxSdySdz

Vector3.forward/back/up/righ и т. д. подразумевает глобальную систему координат. Вместо Vector3 стоит писать obj.transform.

Например,

obj.transform.position += obj.transform.forward * speed * Time.deltaTime;
→ Ссылка