2015-08-09 4 views
0

Я использую Quaternion.Lerp для поворота сустава под определенным углом, но когда я использую нижеследующий код, я считаю, что шарнир вращается очень далеко, хотя я указал его на поворот только с 5. Любой мысли, пожалуйста?Quaternion.Lerp не работает должным образом в Unity3d

newRot.y += currentTransform.localRotation.y + 5f; 
blendWeight = 0; 
if (blendWeight < 1) 
{ 
    animationRotation = currentTransform.transform.localRotation; 
    newRotation = Quaternion.Euler(newRot.x, newRot.y, newRot.z); 
    blendWeight += Time.deltaTime/0.9f; 
    currentTransform.transform.localRotation = Quaternion.Lerp (animationRotation,newRotation, blendWeight); 
} 

где newRot является Vector3

+0

Правильно ли этот код? Первая строка не выглядит так, как будто она должна компилироваться, и не может быть вызван ерп. Можете ли вы изменить свой пример на то, что работает и демонстрирует проблему, с которой вы сталкиваетесь? – Sam

+0

@ Да, код правильный, это всего лишь снимок только этой части, конечно код намного больше. Но да, это так, без ошибок компиляции. – Tak

+0

К сожалению, я неправильно прочитал тест «если», чтобы запустить lerp. Но первая строка кажется странной: 'Transform newRot.y + = currentTransform.localRotation.y + 5f;' вы уверены, что это компилируется без ошибок? Это должно быть синтаксическая ошибка. Используете ли вы C# или JavaScript (UnityScript)? – Sam

ответ

0

Если вы хотите добавить 5 градусов у, вы должны использовать и не Углы Эйлера непосредственно вращения (что иль кватернион). Вы говорите, что вы никогда не должны устанавливать xyzw-компоненты кватерниона.

Если вы хотите, чтобы y медленно вращал объект, рассмотрите возможность использования RotateTowards (для заданной ориентации цели) или transform.Rotate (для заданной скорости).

+0

В дополнение к тому, что сказал artemisart, если вы добавляете пять обновлений каждый раз, имейте в виду, что Update будет вызываться на любом уровне вашей частоты кадров. Поэтому, если ваша частота кадров составляет 60 кадров в секунду, за одну секунду вы добавите пять 60 раз. Если ваша частота кадров меняется, то через одну секунду вы добавите другую сумму. Вы должны добавить 5 * Time.deltaTime. – Sam

+0

, если я не использовал ерпа и использовал этот «currentTransform.Rotate (newRot)», он работает так, как ожидалось, и сустав конечности немного вращается, но его виды прыгают непосредственно к новому вращению без плавного перехода. Поэтому не уверен, как я могу применить это вращение с плавным вращением. – Tak

+0

Умножение с Time.deltaTime для плавных переходов, как сказал Сэм. – artemisart

Смежные вопросы