Как перезаписать точку отсчета поворота объекта
Добавлено:
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();