Единство - Заставьте игрока указывать на мышь

Я делаю шутер сверху вниз, где игрок двигается вверх, вниз, влево и вправо с помощью WASD и постоянно указывает на мышь. Я хочу, чтобы движение не имело отношения к тому направлению, на которое указывает игрок, но сейчас это не так.

Вот мой код:

void Update() 
{
  float igarH = Input.GetAxisRaw("Horizontal");
  float igarV = Input.GetAxisRaw("Vertical");
  if (igarH > 0.5f || igarH < -0.5f) 
  {
    transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f));
  }
  if (igarV > 0.5f || igarV < -0.5f)
  {
    transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f));
  }

  // Point toward mouse
  Vector2 direction = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
  float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
  Quaternion rotation = Quaternion.AngleAxis(angle, Vector3.forward);
  transform.rotation = rotation;
}

Извините за плохой отступ, трудно понять, как сайт хочет, чтобы я сделал разметку, и я новичок в этом сайте.

Почему игрок движется по-разному в зависимости от того, где находится моя мышь? Я хочу, чтобы движение было таким же, несмотря ни на что.

Пожалуйста, сохраняйте все ответы, связанные с Unity2D, а не с 3D, пожалуйста.

1 ответ

Решение

Transform.Translate имеет необязательный параметр relativeToв том, что вы выбираете, хотите ли вы, чтобы объект двигался относительно своей собственной системы координат или мировой системы координат.

Просто измените ваши звонки на:

if (igarH > 0.5f || igarH < -0.5f) {
  transform.Translate(new Vector3(igarH * moveSpeed * Time.deltaTime, 0f, 0f), Space.World);
}
if (igarV > 0.5f || igarV < -0.5f) {
  transform.Translate(new Vector3(0f, igarV * moveSpeed * Time.deltaTime, 0f), Space.World);
}
Другие вопросы по тегам