Опять поворот (на заданный угол)

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

Опять поворот (на заданный угол)

Сообщение alebaster 07 дек 2011, 17:34

Здравствуйте.

Очень хочу повернуть объект на определенный угол. Поворачиваю:
Синтаксис:
Используется csharp
                         Quaternion fromRotation = transform.rotation;
                Quaternion toRotation = Quaternion.Euler(0,transform.rotation.y + 10,0);
                transform.rotation = Quaternion.Lerp(fromRotation,toRotation,Time.deltaTime);


Поворачивается, да. Но поворачивается до абсолютного значения y, то есть до тех пор пока transform.rotation.y не будет равен 10. Почему?

И еще: почему после разворота объект медленно ползет куда-то? Сил не прикладываю, не перемещаю.
Последний раз редактировалось alebaster 07 дек 2011, 21:21, всего редактировалось 2 раз(а).
alebaster
UNец
 
Сообщения: 36
Зарегистрирован: 10 ноя 2011, 22:24

Re: Опять поворот (на угол)

Сообщение Левш@ 07 дек 2011, 18:03

alebaster писал(а):Поворачивается, да. Но поворачивается до абсолютного значения y, то есть до тех пор пока transform.rotation.y не будет равен 10. Почему?
И еще: почему после разворота объект медленно ползет куда-то? Сил не прикладываю, не перемещаю.

Наращивать значение шага: += 10;
Чтоб не полз, надо обнулять размер шага.

Вот так будет постоянно крутиться:

Синтаксис:
Используется javascript
var rotSpeed = 0.1;

function FixedUpdate () {
        transform.Rotate(Vector3.up * Time.deltaTime * rotSpeed);
}
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Опять поворот (на угол)

Сообщение alebaster 07 дек 2011, 18:17

Простите, про шаг ничего не понял.
Крутить бесконечно у меня получается почти профессионально практически всеми возможными методами :D, мне надо только на определенный угол, который будет вычисляться нечеткой логикой.
alebaster
UNец
 
Сообщения: 36
Зарегистрирован: 10 ноя 2011, 22:24

Re: Опять поворот (на угол)

Сообщение Левш@ 07 дек 2011, 18:42

alebaster писал(а):мне надо только на определенный угол, который будет вычисляться нечеткой логикой.

Не сильно понял... может это вам нужно:

Синтаксис:
Используется javascript
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation(direction), rotateSpeed * Time.deltaTime);
transform.eulerAngles = Vector3(0, transform.eulerAngles.y, 0);


Это повернет на угол между transform.rotation и direction.
direction можно вычислять.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Опять поворот (на угол)

Сообщение alebaster 07 дек 2011, 20:09

Левш@ писал(а):direction можно вычислять.


Опять не понял. Т.е. можно direction задать вручную? (судя по подсказкам в MonoDevelop - нельзя). Я, наверное, очень плохо задал вопрос. У меня есть объект, мне нужно его поворачивать на 10 градусов, 30, 90 и тд. При попытке использования кода, что написан в первом посте - объект поворачивается не на угол, а до угла.
alebaster
UNец
 
Сообщения: 36
Зарегистрирован: 10 ноя 2011, 22:24

Re: Опять поворот (на угол)

Сообщение Левш@ 07 дек 2011, 20:20

alebaster писал(а):Т.е. можно direction задать вручную? (судя по подсказкам в MonoDevelop - нельзя).

А чего нельзя то? Обычная переменная с обычным значением... :-? Конечно можно.
Вот у меня все время меняеться direction (следит за целью) и обьект все время меняет угол вслед за direction. ;)

Синтаксис:
Используется javascript
function AttackRotate () {
                rotateSpeed = attackRotSpeed;
                var direction = target.position - transform.position;
                transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation(direction), rotateSpeed * Time.deltaTime);
                transform.eulerAngles = Vector3(0, transform.eulerAngles.y, 0);
}
 
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Опять поворот (на угол)

Сообщение alebaster 07 дек 2011, 21:21

Можно по порядку изложить мысли, а то может я что-то в корне неверно понимаю. Итак
Синтаксис:
Используется javascript
transform.rotation = Quaternion.Slerp (transform.rotation, Quaternion.LookRotation(direction), rotateSpeed * Time.deltaTime);
                 transform.eulerAngles = Vector3(0, transform.eulerAngles.y, 0);

В методе Quaternion.Slerp: transform.rotation - это то положение, из которого начинается поворот, вполне логично, что нам тут нужно положение объекта. Quaternion.LookRotation(direction) - это финальное положение для поворота. То есть я могу задать финал поворота как имеющийся у меня угол + желаемый угол поворота: toRotation = Quaternion.Euler(0,transform.rotation.y +30,0);
Синтаксис:
Используется csharp
Quaternion toRotation = Quaternion.Euler(0,transform.rotation.y +30,0);
                transform.rotation = Quaternion.Slerp (transform.rotation, toRotation,Time.deltaTime);
        transform.eulerAngles = new Vector3(0, transform.eulerAngles.y, 0);


Это правдиво? Даже если я введу toRotation = Quaternion.Euler(0,transform.rotation.y,0) (т.е. вообще поворота быть не должно), он почему-то с 90 исходных поворачивает до 0.
alebaster
UNец
 
Сообщения: 36
Зарегистрирован: 10 ноя 2011, 22:24

Re: Опять поворот (на заданный угол)

Сообщение Левш@ 07 дек 2011, 23:49

Как ни странно, последняя строка задает ось вращения.
Но факт, что это работает. :) и поворачивает на заданный direction угол от исходного положения.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Опять поворот (на заданный угол)

Сообщение seaman 08 дек 2011, 00:04

Даже если я введу toRotation = Quaternion.Euler(0,transform.rotation.y,0) (т.е. вообще поворота быть не должно), он почему-то с 90 исходных поворачивает до 0.

В Quaternion.Euler Вы задаете углы поворота. transform.rotation.y - это не угол поворота. Поэтому неудивительно, что поворачивает невесть куда. Изучите такое понятие - Кватернион. Без этого так и будете не понимая его использовать и путаться постоянно.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30