Как в Unity заставить объект двигаться строго вперед относительно себя же?

Вот мой код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
    private void Update()
    {
        if (Input.GetKey(KeyCode.W))
        {
            transform.Translate(transform.up * 4f * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.S))
        {
            transform.Translate(transform.up * -4f * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.A))
        {
            transform.Rotate(0, 0, 0.075f);
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.Rotate(0, 0, -0.075f);
        }
    }
}

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

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

Не очень понятно, вы в системе координат 2D приложение делаете? Судя по коду так и вид сверху. У метода Translate есть переопределенный метод, где вы можете указать в какой системе координат надо рассчитывать движение.

public void Translate(Vector3 translation, Space relativeTo = Space.Self);

По идее у вас должно работать в координатах объекта. Если двигается не туда, возможно скрипт висит не на том объекте и двигаете вы не тот трансформ. Ну либо меняйте вектор на forward, left.

Еще на поворотах тоже лучше добавить привязку к deltaTime, чтобы на тормознутых машинах повороты дерганными не выглядели.

→ Ссылка