Как перезаписать точку отсчета поворота объекта

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

Как перезаписать точку отсчета поворота объекта

Сообщение Dymanski200 22 май 2017, 16:10

Здравствуйте. Боюсь задать очень глупый вопрос: "Как заставить движок объект повернутый, допустим, на 20 градусов по оси Y считать что он повернут на 0 градусов.
Нужно осуществить такое: повернули объект на n градусов, перезаписали "точку отсчета" (обнулили её), повернули ещё - перезаписали снова. Возможно я прошу невозможного, но надеюсь на вашу помощь. ^:)^
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Как перезаписать точку отсчета поворота объекта

Сообщение samana 22 май 2017, 16:21

У меня такие сомнения на счёт нужности этой перезаписи в ноль. Почему бы просто не поворачивать объект по нужной оси на определённый градус? Можно завести float переменную, которую будете обнулять, и которая показывает текущий угол. Допустим при нажатии и движении мыши, ваш объект должен поворачиваться и отсчёт должен всегда начинаться с нуля? Тогда запомните поворот при нажатии мыши, а при движении мыши устанавливайте запомненный поворот + угол который нужно добавить в текущий момент и показывайте значение дополнительного угла в этой переменной. При отжатии мыши - обнуляйте переменную поворота.

И если не секрет, то для чего это вам понадобилось? Возможно я совсем не так понял вопрос.

-----------------
А, видимо вам и не для кода это нужно и вы просто хотите иметь возможность обнуления трансформации у объекта, как в 3d редакторах? Тогда возможно положить один объект в другой, то-есть поворот родителя всегда в нулях, а ребёнка вращать как угодно. Но конечно есть ещё варианты, надо просто подумать.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Как перезаписать точку отсчета поворота объекта

Сообщение Dymanski200 22 май 2017, 17:24

Спасибо. Видимо я залез совсем в дебри. Я поворачиваю объект вот так:
Синтаксис:
Используется csharp
Quaternion target = Quaternion.Euler (0,Angle, 0);
gameObject.transform.rotation = Quaternion.Slerp (transform.rotation, target, Time.deltaTime * SpeedRotation);
 

float Angle я беру со скрипта "Джойстика", его значения меняются от 0 до 360.
Меня не устраивает то, что объект начинает поворачиваться каждый раз от 0, а не от предыдущего значения. Возможно я делаю вообще не то...
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Как перезаписать точку отсчета поворота объекта

Сообщение samana 22 май 2017, 17:29

Если я правильно понял, то вам нужно просто добавлять поворот, на не назначать
Синтаксис:
Используется csharp
Quaternion target = Quaternion.Euler (0,Angle, 0);
target *= gameObject.transform.rotation; // умножение в кватернионах, это их сложение)
gameObject.transform.rotation = Quaternion.Slerp (transform.rotation, target, Time.deltaTime * SpeedRotation);
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Как перезаписать точку отсчета поворота объекта

Сообщение Dymanski200 22 май 2017, 17:36

Спасибо, почти то что нужно.
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Как перезаписать точку отсчета поворота объекта

Сообщение immeasurability 27 май 2017, 12:44

public Quaternion _rotation_zero;

void correction() this._rotation_zero=this.transform.rotation;

void rotate(Quaternion __rotate) this.transform.rotation=Quaternion.Inverse(this._rotation_zero)*__rotate;

this.correction();
Discord era#6140

youtube.com/user/immeasurability/videos
Аватара пользователя
immeasurability
Адепт
 
Сообщения: 1097
Зарегистрирован: 08 авг 2013, 18:09


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

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

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