Движение игрока по диагонали, как это работает?

Здравствуйте.

Есть такой код. Где реализовано движение вперёд, назад, влево, вправо.

Но появилось желание чтобы он двигался по диагонали, относительно своего вектора Z. Нажатиями кнопок W/A, W/D, S/A, S/D.

Вот кусок кода:
private float X, Y, Z;
public int speed;
public int rotSpeed;

public float sensitivity = 3;
private Rigidbody rb;

private Vector3 movement = Vector3.zero;

public Player player;
private int speedX = 5;

private void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    //Поворот игрока
    X += Input.GetAxis("Mouse X") * rotSpeed * Time.deltaTime;
    Y += Input.GetAxis("Mouse Y") * rotSpeed * Time.deltaTime;

    transform.rotation = Quaternion.Euler(Y, X, Z);

    //Движение игрока
    float z = Input.GetAxis("Vertical");

    if (z != 0)
    {
        movement.z = z;
    }
    else
        movement = Vector3.zero;

    if (movement != Vector3.zero)

    rb.AddForce(movement * speed);

    if (Input.GetKey(KeyCode.D))
    {
        player.transform.position += Vector3.right * speedX * Time.deltaTime;
    }
    if (Input.GetKey(KeyCode.A))
    {
        player.transform.position -= Vector3.right * speedX * Time.deltaTime;
    }

}


Посмотрев в интернете реализацию у других пользователей. Не нашёл для своего случая ответа. Либо он некорректно работал.
  • Вопрос задан
  • 969 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ALTech1
Если я вас понял правильно, то вот вам способ, конечно колхозный но все же. Создаете пустышку и ставите ее на расстоянии от вашего персонажа. Делаете пустышку дочерней. А в коде используете MoveTowards. Таким образом пустышка будет крутиться вместе с персонажем и он будет двигаться к ней.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы