Псевдопивот и углы поворта

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

Псевдопивот и углы поворта

Сообщение bomberest 25 окт 2012, 19:35

Изображение
Помогите разобраться, как грамотно вращать объект.
Не предлагать вложенные объекты
Хотя, можно вложить в объект только на момент поворота :) (это и есть ответ, вроде). Может, кто без вложений предложит, просто через математику.
Думал, как определить направление угла и подумал, что можно использовать 2 разных вектора для определения Vector3.Angle. Таким образом можно понять, в какую сторону и на сколько нужно повернуть объект через transform.RotateAround()
Почему 2, а не 1? Т.к. Vector3.Angle() выдаёт float [0,180]
Последний раз редактировалось bomberest 25 окт 2012, 19:48, всего редактировалось 2 раз(а).
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Псевдопивот и углы поворта

Сообщение seaman 25 окт 2012, 19:43

Transform.RotateAround
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Псевдопивот и углы поворта

Сообщение bomberest 25 окт 2012, 19:46

seaman писал(а):Transform.RotateAround

Явно не тот ответ, который я ожидал :)
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Псевдопивот и углы поворта

Сообщение seaman 25 окт 2012, 20:27

А чем Вам он не нравится? У Вас пивот водной точке, а Вам надо вращать вокруг другой. Именно для этого и сделана такая функция Transform.RotateAround Что Вас не устраивает?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Псевдопивот и углы поворта

Сообщение bomberest 25 окт 2012, 20:48

seaman писал(а):А чем Вам он не нравится? У Вас пивот водной точке, а Вам надо вращать вокруг другой. Именно для этого и сделана такая функция Transform.RotateAround Что Вас не устраивает?

Я про то, что нужно узнать угол, на какой нужно повернуть.
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Псевдопивот и углы поворта

Сообщение WereVarg 25 окт 2012, 21:04

Похоже что нужно LookAt на вектор (цель минус псевдопивот)
Merry Cubes HD Magic Sorter Playroom - Lessons with Max
Аватара пользователя
WereVarg
UNIт
 
Сообщения: 88
Зарегистрирован: 12 авг 2011, 01:11

Re: Псевдопивот и углы поворта

Сообщение seaman 25 окт 2012, 21:05

Vector3.Angle(transform.forward, (target.transform.position - tempPivot))
tempPivot - точка вокруг которой поворачиваешь
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Псевдопивот и углы поворта

Сообщение bomberest 25 окт 2012, 21:12

seaman писал(а):Vector3.Angle(transform.forward, (target.transform.position - tempPivot))
tempPivot - точка вокруг которой поворачиваешь

Angle возвращает [0, 180], т.е. вращаться всегда будет по часовой стрелке, а мне нужно, чтобы вращалось и против часовой, если это нужно.
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Псевдопивот и углы поворта

Сообщение seaman 25 окт 2012, 21:37

Да, точно.
Quaternion.FromToRotation тоже не походит?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Псевдопивот и углы поворта

Сообщение bomberest 25 окт 2012, 21:46

seaman писал(а):Да, точно.
Quaternion.FromToRotation тоже не походит?

Кстати, да, если на время поворота засунуть в го, то можно использовать FromToRotation
Еще можно напрямую присваивать transform.forward.
Вообще, я создал топик, т.к. не хотел вложение объектов делать :) Что-то я запутался на пустом месте.
Последний раз редактировалось bomberest 25 окт 2012, 21:50, всего редактировалось 1 раз.
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Псевдопивот и углы поворта

Сообщение seaman 25 окт 2012, 21:48

Да, а направление поворота определяется по знаку Dot(Cross, Cross):
Синтаксис:
Используется csharp
Vector3 cross = Vector3.Cross(a, b);
bool right = Vector3.Dot(cross, cross) > 0;
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Псевдопивот и углы поворта

Сообщение bomberest 25 окт 2012, 21:50

seaman писал(а):Да, а направление поворота определяется по знаку Dot(Cross, Cross):
Синтаксис:
Используется csharp
Vector3 cross = Vector3.Cross(a, b);
bool right = Vector3.Dot(cross, cross) > 0;

Спасибо за функцию
Основы Unity3D Свой 2D-движок Фильм для разработчиков Кастомизация едитора
Лекции игрового программирования
Skype: Andrewf56 | Steam: bomberest (-AnF-) | Vk: _https://vk.com/andrewshut
Аватара пользователя
bomberest
Старожил
 
Сообщения: 538
Зарегистрирован: 22 июн 2011, 14:38
Откуда: Минск
  • ICQ

Re: Псевдопивот и углы поворта

Сообщение seaman 25 окт 2012, 21:54

Полный код:
Синтаксис:
Используется csharp
Vector3 tempPivot;  //Точка вокруг которой вертим
Vector3 target;       //Куда поворачиваем
Vector3 cross = Vector3.Cross(tempPivot, target);
int dir = Vector3.Dot(cross, cross) > 0 ? 1 : -1;
float angle = Vector3.Angle(transform.forward, (target.transform.position - tempPivot)) * dir;
Transform.RotateAround(tempPivot, cross, angle);
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Почемучка

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

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