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

Почему не срабатывает условие Quaternion.Slerp ?

СообщениеДобавлено: 01 мар 2019, 16:20
Sice
Доброго времени суток друзья.
Есть код:
Синтаксис:
Используется csharp
public class Man : MonoBehaviour
{      
public float Speed, RotateSpeed, RotateGradus;
void Update () {                       
        if (RotateGradus == 90)
            {
                if (transform.eulerAngles.z < RotateGradus)
                {
                    transform.rotation = Quaternion.Slerp(transform.rotation, new Quaternion(transform.rotation.x, transform.rotation.y, RotateGradus, 2), RotateSpeed * Time.deltaTime);
                }                
            }
       
            if (RotateGradus == 270)
            {          
                if (RotateGradus > transform.eulerAngles.z)
                {                    
                    transform.rotation = Quaternion.Slerp(transform.rotation, new Quaternion(transform.rotation.x, transform.rotation.y, RotateGradus, 2), RotateSpeed * Time.deltaTime);
                    Debug.Log("сработало");
                }
            }
     }
}
 

В итоге когда RotateGradus равен 90, transform.rotation.z объекта равен 0, тогда всё отрабатывает нормально, а во второй части кода, когда RotateGradus равен 270, а transform.rotation.z объекта равен 180 - Quaternion.Slerp никак не отрабатывает, хотя сообщение из дебага "сработало" видно в консоли. В рантайме когда смотрю, угол объекта по Z двигается на 179.151 и замирает. Начинаю менять в ручную (двигать ползунок), возвращается обратно на 179.151. Хотя по итогу, должен превратиться в 270, если бы код отработал.

Объясните пожалуйста, почему так происходит, всё уже пересмотрел. Спасибо заранее ^:)^

Re: Почему не срабатывает условие Quaternion.Slerp ?

СообщениеДобавлено: 01 мар 2019, 16:47
1max1
Кто тебя вообще учил так кватернионы создавать?
Синтаксис:
Используется csharp
var to =  Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, RotateGradus);
transform.rotation = Quaternion.Slerp(transform.rotation, to, RotateSpeed * Time.deltaTime);
 

Re: Почему не срабатывает условие Quaternion.Slerp ?

СообщениеДобавлено: 01 мар 2019, 16:53
Sice
1max1 писал(а):Кто тебя вообще учил так кватернионы создавать?
Синтаксис:
Используется csharp
var to =  Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, RotateGradus);
transform.rotation = Quaternion.Slerp(transform.rotation, to, RotateSpeed * Time.deltaTime);
 

Спасибо, что пояснили. Увидел где-то, что так делали)

Re: Почему не срабатывает условие Quaternion.Slerp ?

СообщениеДобавлено: 01 мар 2019, 18:27
AngryCat
1max1 писал(а):Кто тебя вообще учил так кватернионы создавать?
Синтаксис:
Используется csharp
var to =  Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y, RotateGradus);
transform.rotation = Quaternion.Slerp(transform.rotation, to, RotateSpeed * Time.deltaTime);
 

может сегодня без "var"??

Re: Почему не срабатывает условие Quaternion.Slerp ?

СообщениеДобавлено: 01 мар 2019, 19:06
seaman
Чем вам var не нравится? Что за дискриминация?

Re: Почему не срабатывает условие Quaternion.Slerp ?

СообщениеДобавлено: 02 мар 2019, 11:01
Woolf
seaman писал(а):Чем вам var не нравится? Что за дискриминация?


Мне тоже не нравится. За неявную типизацию в объяснялках и примерах надо бить по рукам.

Re: Почему не срабатывает условие Quaternion.Slerp ?

СообщениеДобавлено: 03 мар 2019, 01:41
AngryCat
seaman писал(а):Чем вам var не нравится? Что за дискриминация?

Не красивое название...