Задать вопрос
@davidnum95

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

Добрый день.
Допустим есть некоторый объект, назовем его Игрок. Каким образом сделать, чтобы он двигался только в 8 направлениях? На рисунке красными линиями обозначены только те направления, в сторону которых Игрок может двигаться. Справа снизу на картинке движение Игрока при клике в точку Б, обходя препятствие(object). Подскажите в какую сторону копать? Идеально бы подошло что то похожее на:
Vector2 movement_vector = new Vector2 (Input.GetAxisRaw ("Horizontal"), Input.GetAxisRaw ("Vertical"));

Но там оси считываются при нажатии клавиш на клавиатуре.
cfd5c24dc613479c8486395b087dbd7e.png
  • Вопрос задан
  • 412 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@NoKoK
А собственно как реализовано управление? в точке клика создаем вектор для перемещения в эту точку? или клавиатурой? сложно представить перемещение в 8 направлениях по клику
имеются некоторые готовые решения в 2d https://www.assetstore.unity3d.com/en/#!/content/35803
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dmitry_pavlov
@dmitry_pavlov
World-class .NET freelance contractor (remotely)
Код отсюда

public enum Direction {   
  None, LeftUp, Up, RightUp, Right, RightDown, Down, LeftDown, Left 
}

public Direction GetDirection(double x, double y) {
  double absX = Math.Abs(x);
  double absY = Math.Abs(y);
  if (absX < 0.1 && absY < 0.1) {
    // close to center
    return Direction.None;
  }
  if (absX > absY) {
    // vertical side
    double half = absX * 0.4142;
    if (x > 0) {
      // left side
      if (y > half) return Direction.LeftDown;
      if (y < -half) return Diretion.LeftUp;
      return Direction.Left;
    } else {
      // right side
      if (y > half) return Direction.RightDown;
      if (y < -half) return Direction.RightUp;
      return Direction.Right;
    }
  } else {
    // horisontal side
    double half = absY * 0.4142;
    if (y > 0) {
      // bottom
      if (x > half) return Direction.RightDown;
      if (x < -half) return Direction.LeftDown;
      return Direction.Down;
    } else {
      // top
      if (x > half) return Direction.RightUp;
      if (x < -half) return Direction.LeftUp;
      return Direction.Up;
    }
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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