Автор Тема: положение обьекта по отношению к ...  (Прочитано 5578 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Ноябрь 27, 2013, 22:44:03 pm
Ответ #15

LiGuB

  • Пользователь

  • Оффлайн
  • **

  • 61
  • Репутация:
    5
    • Просмотр профиля

Ещё можно определяться со смещением, в зависимости от того, куда повёрнут "лицом" объект.

подскажи как?

Ноябрь 28, 2013, 03:01:52 am
Ответ #16

Mimi Neko

  • Администратор
  • Старожил форума

  • Оффлайн
  • *****

  • 2456
  • Репутация:
    153
    • Просмотр профиля

ставим объект на сцену с 0 углом поворота, и он смотрит ровно вперёд, в сторону приращения оси z.
В таком положении, "право" - это смещение относительно текущего местонахождения персонажа в сторону приращения оси x.
Если объект повернуть на угол 90 градусов - он будет смотреть вправо. Если на угол 180 - назад, 270 - влево, 360 - снова вперёд.

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

тоесть:


ry = transform.rotation.y;

if(ry < 90 && (ry > 270 || ry > -1) ) tnz = tz - n; //направдение вперёд

if(ry > 0 && ry < 180) tnx = tx + n;  //направление вправо

if(ry >90 && ry < 270) tnz = tz + n; //направление назад

if(ry >180 && ry < 360) tnx = tx - n; //направление влево

Но я тут подумал, что может быть нет смысла в проверке угла поворота объекта,  так как он получает вейпон-цель, к которой ему нужно двигаться, и относительно своего местоположения и расположения вейпойнта, можно сразу определить, куда ему предстоит идти, вперёд, назад, или вбок.
При получении вейпойнта, можно уже считать, что объект будет повёрнут прямо на него "лицом".

//получили текущее положение объекта:
ox = transform.x;
oz = transform.z;

//получаем координаты очередной точки-цели:
tx = target.transform.x;
tz = target.transform.z;

if(tz > oz){ //объект смотрит на цель вперёд

  ntz = tz - n;
  if(tx == ox) ntx = tx + n; //объект стоит прямо на оси x цели.
}else
if(tz < oz){ //объект смотрит на цель назад

  ntz = tz + n;
  if(tx == ox) ntx = tx - n; //объект стоит прямо на оси x цели.
}

if(tx > ox){ //объект смотрит на цель вправо

   ntx = tx + n;
   if(tz == oz) ntz = tz - n; //объект стоит прямо на оси z цели.
}else
if(tx < ox){  //объект смотрит на цель влево

   ntx = tx + n;
   if(tz == oz) ntz = tz + n; //объект стоит прямо на оси z цели.
}

//ntz и ntx - координаты точки смещения.
//n - смещение координат точки цели