Воскресенье, 24 Ноября 2024, 11:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Slerp вращение по клику.
absolute_nullДата: Пятница, 08 Июня 2018, 18:27 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем добрый день. Возник такой вопрос. Вращаю объект по Slerp на 90 градусов. Нужно, чтобы по клику, объект плавно повернулся по оси Z (вид 2d, т.е. объект повернётся по кругу), на 90 градусов. При следующем нажатии он повернулся на следующие 90 градусов. Делал так:

Код

    Quaternion a;
    Quaternion b;
    Quaternion rotate;
    float speed;
    bool test;

    private void Start()
    {
        b = Quaternion.Euler(0f, 0f, 90f);
        //rotate = GetComponent<Quaternion>();
        speed = 4f;
        test = false;
    }

    private void OnMouseDown()
    {
        test = true;
    }

    private void Update()
    {
        if (test)
        {
            transform.rotation = Quaternion.Slerp(transform.rotation, b, Time.deltaTime * speed);
        }
        Debug.Log(test);
        Debug.Log(transform.rotation.z);
        if(transform.rotation.z == 0.7f)
        {
            test = false;
            Debug.Log(test);
            b = Quaternion.Euler(0f, 0f, 180f);
        }
        
    }


Но здесь очень много проблем. Во-первых, не понятно, почему log даёт значение b и b.z как 0.7 (что это вообще), а не 90. Думал сравнивать, каждый раз, как закончит лерпиться, его вращение с нужным значением, чтобы давать булевую переменную false и прекращать лерп. А при клике опять начинать. Но не получается.
drcrackДата: Пятница, 08 Июня 2018, 18:29 | Сообщение # 2
старожил
Сейчас нет на сайте
transform.rotation.xyzw это компоненты кватерниона, а тебе нужны углы эйлера transform.localEulerAngles

Сообщение отредактировал drcrack - Пятница, 08 Июня 2018, 18:29
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг