Страница 1 из 1

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

СообщениеДобавлено: 22 май 2017, 16:10
Dymanski200
Здравствуйте. Боюсь задать очень глупый вопрос: "Как заставить движок объект повернутый, допустим, на 20 градусов по оси Y считать что он повернут на 0 градусов.
Нужно осуществить такое: повернули объект на n градусов, перезаписали "точку отсчета" (обнулили её), повернули ещё - перезаписали снова. Возможно я прошу невозможного, но надеюсь на вашу помощь. ^:)^

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

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

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

-----------------
А, видимо вам и не для кода это нужно и вы просто хотите иметь возможность обнуления трансформации у объекта, как в 3d редакторах? Тогда возможно положить один объект в другой, то-есть поворот родителя всегда в нулях, а ребёнка вращать как угодно. Но конечно есть ещё варианты, надо просто подумать.

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

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

float Angle я беру со скрипта "Джойстика", его значения меняются от 0 до 360.
Меня не устраивает то, что объект начинает поворачиваться каждый раз от 0, а не от предыдущего значения. Возможно я делаю вообще не то...

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

СообщениеДобавлено: 22 май 2017, 17:29
samana
Если я правильно понял, то вам нужно просто добавлять поворот, на не назначать
Синтаксис:
Используется csharp
Quaternion target = Quaternion.Euler (0,Angle, 0);
target *= gameObject.transform.rotation; // умножение в кватернионах, это их сложение)
gameObject.transform.rotation = Quaternion.Slerp (transform.rotation, target, Time.deltaTime * SpeedRotation);

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

СообщениеДобавлено: 22 май 2017, 17:36
Dymanski200
Спасибо, почти то что нужно.

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

СообщениеДобавлено: 27 май 2017, 12:44
immeasurability
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();