Как повернуть объект относительно его текущего положения.

Программирование на Юнити.

Как повернуть объект относительно его текущего положения.

Сообщение Serge 20 сен 2009, 20:14

Провел кучу экспериментов, но нужного результата не получил. Помогите плиз разобраться с этими углами. Мне нужно получить текущий угол и повернуть его на нужный угол, относительно текущего, казалось чего проще, но не получается. Вот такой код не прокатывает.
Код: Выделить всё
var pauseTime = 3.0;
private var nextTime = 0.0;

function Update () {
   
   if (Time.time > nextTime) {      
      transform.rotation.eulerAngles.x += 90;
      nextTime = Time.time + pauseTime;
   }   
   
}

Он зацикливается между 90 и 180. Преобразование угла после сложения в Quaternion тоже не помогает. А складывать Quaternion с Quaternion нельзя. У меня нет больше вариантов.
Последний раз редактировалось Serge 20 сен 2009, 20:20, всего редактировалось 1 раз.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Как повернуть объект относительно его текущего положения.

Сообщение Neodrop 20 сен 2009, 20:16

Код: Выделить всё
transform.localRotation.eulerAngles.x += 90;

или
Код: Выделить всё
transform.Rotate(Vector3(90,0,0));
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как повернуть объект относительно его текущего положения.

Сообщение Serge 20 сен 2009, 20:19

Да так правильней, но результат тот же, проверил.
Мне нужно повернуть относительно текущего, без сложения никак. :(
Последний раз редактировалось Serge 20 сен 2009, 20:22, всего редактировалось 1 раз.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Как повернуть объект относительно его текущего положения.

Сообщение Neodrop 20 сен 2009, 20:21

Ну, а что, если поворачивать один раз на 89, второй раз на 91?
Костыль, конечно, но как вариант, может жить.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как повернуть объект относительно его текущего положения.

Сообщение Serge 20 сен 2009, 20:29

Мне нужно произвольно вращать произвольные объекты. Относительно друг друга они должно быть в итоге параллельны. Нужно будет запоминать какой вращается первый раз а какой второй, как крайний способ применить конечно можно, но как то не красиво.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Как повернуть объект относительно его текущего положения.

Сообщение Neodrop 20 сен 2009, 21:20

К сожалению, на данный момент не могу найти готового решения, а эксперименты проводить, ну совсем нет времени, простите.
Это классическое несовершенство геометрии как науки. У неё всегда проблемы с прямыми углами. :-?
Простейшее решение - хотя бы на градус уйти от нуля всеми объектами.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как повернуть объект относительно его текущего положения.

Сообщение Serge 21 сен 2009, 14:26

Не помогло, однако, проблема в чем-то другом, его зацикливает после 90 градусов. Для примера сделал в коде шаг 16 градусов, после того как повернулся за 90 зациклило. Ребята помогите плиз разобраться.
Чтобы проще было понять проблему, нужно применить этот скрипт к кубу и посмотреть в инспекторе как будут меняться углы.
Код: Выделить всё
var pauseTime = 3.0;
private var nextTime = 0.0;

function Update () {
   
   if (Time.time > nextTime) {      
      transform.localRotation.eulerAngles.x += 16;
      nextTime = Time.time + pauseTime;
   }   
   
}
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Как повернуть объект относительно его текущего положения.

Сообщение Mr_Anderson 21 сен 2009, 14:42

function Rotate (axis : Vector3, angle : float, relativeTo : Space = Space.Self) : void - может это Вам поможет? ;)

в цикле transform.Rotate(Vector3(1,0,0), 16) например
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32

Re: Как повернуть объект относительно его текущего положения.

Сообщение Serge 21 сен 2009, 14:52

Большое спасибо. Помогло. Часть проблемы решена.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Как повернуть объект относительно его текущего положения.

Сообщение Serge 21 сен 2009, 15:14

Рано радовался. Конечная моя цель – добиться плавного (не за один проход) поворота кубика на 90 или 180 градусов относительно его текущего положения. Казалось бы чего проще берем transform.localRotation и вращаем через интерполяцию (куча способов). Но вот не преодолима проблема – как правильно определить текущий угол, чтобы потом правильно определить угол, на которой нужно повернуть кубик т.к. интерполяция делается от начального значения и до конечного значения. Ну неужели это так сложно……
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Как повернуть объект относительно его текущего положения.

Сообщение Mr_Anderson 21 сен 2009, 15:19

ось поворотов-то одна?
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32

Re: Как повернуть объект относительно его текущего положения.

Сообщение Serge 21 сен 2009, 15:25

Разные, 6 кубиков, вращение по трем осям у каждой пары. Кубик-рубика видели? Вот его хотел сделать, просто произвольное вращение граней кубика.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Как повернуть объект относительно его текущего положения.

Сообщение Mr_Anderson 21 сен 2009, 16:23

Может проще запоминать состояние такой системы в структурах (переменных) и потом это состояние по ним отслеживать, а не по реальным углам и т.п., а вращать (и соответственно изменять углы, координаты и т.п.) руками? Состояния-то все равно фиксированные ;)
Mr_Anderson
UNIт
 
Сообщения: 143
Зарегистрирован: 16 апр 2009, 13:32

Re: Как повернуть объект относительно его текущего положения.

Сообщение Serge 21 сен 2009, 16:47

Наверное, так и придется делать. Других вариантов не вижу. Спасибо за помощь.
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Как повернуть объект относительно его текущего положения.

Сообщение Makhotkin 21 сен 2009, 17:22

То что зацикливает после 90 градусов - следствие используемых формул для вычисления углов Эйлера, формулы там вот такие
http://upload.wikimedia.org/math/a/2/9/ ... 8da853.png
(тупой форум не дает вставить PNG!)

Полностью можно смотреть в http://en.wikipedia.org/wiki/Conversion ... ler_angles

То есть вместо угла X = 180 у тебя в углах эйлера будет что-нибудь вроде ( 0, 180, 180 )
Вместо X = 270 можно ожидать ( 90, 180, 180 )

Вариант с поворотом на Vector3( 90, 0, 0 ) разве не дает нужные повороты?
Аватара пользователя
Makhotkin
UNец
 
Сообщения: 4
Зарегистрирован: 11 сен 2009, 23:51

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 11