Вторник, 26 Ноября 2024, 03:48

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Реализация поворота птички в Flappy Birds
MakselДата: Понедельник, 06 Мая 2019, 19:30 | Сообщение # 1
уже был
Сейчас нет на сайте
Добрый вечер.
Начал изучать неделю назад Юнити и C# и решил написать Flappy Birds
Не смог сам написать скрипт плавного поворота Птички после нажатия, чтобы птички при снижении разворачивалась вниз.
Нашел рабочий скрипт, но не могу понять как он работает.
Кому не трудно, объясните на пальцах новичку.
Код
Quaternion target = Quaternion.Euler(0,0,Mathf.Clamp(GetComponent<Rigidbody2D>().velocity.y * 20, -90, 90));
        transform.rotation = Quaternion.Slerp(transform.rotation,target, Time.deltaTime * 10);

Спасибо, хорошего вечера.
web_sstasДата: Вторник, 07 Мая 2019, 06:58 | Сообщение # 2
частый гость
Сейчас нет на сайте
Работает - не трогай)
А если серьёзно,
Код
Quaternion target = Quaternion.Euler(0,0,Mathf.Clamp(GetComponent<Rigidbody2D>().velocity.y * 20, -90, 90));

Quaternion.Euler - возвращает вектор, на который поворачивается объект,
Mathf.Clamp - возвращает значение скорости по оси Y умноженное на 20 и ограниченное между -90 и 90

Код
transform.rotation = Quaternion.Slerp(transform.rotation,target, Time.deltaTime * 10);

Quaternion.Slerp - интерполирует угол от текущего к target, со скоростью Time.deltaTime * 10.
drcrackДата: Вторник, 07 Мая 2019, 08:35 | Сообщение # 3
старожил
Сейчас нет на сайте
Цитата
Quaternion.Euler - возвращает вектор, на который поворачивается объект,

нет, оно возвращает кватернион

Цитата
Quaternion.Slerp - интерполирует угол от текущего к target, со скоростью Time.deltaTime * 10.

нет, третий параметр это не скорость
скорость в Quaternion.RotateTowards

разница в данном случае в том что RotateTowards дал бы фиксированную скорость, а со Slerp скорость будет уменьшаться по ходу приближения к цели


Сообщение отредактировал drcrack - Вторник, 07 Мая 2019, 08:37
web_sstasДата: Вторник, 07 Мая 2019, 09:13 | Сообщение # 4
частый гость
Сейчас нет на сайте
Цитата drcrack ()
разница в данном случае в том что RotateTowards дал бы фиксированную скорость, а со Slerp скорость будет уменьшаться по ходу приближения к цели

Ок, буду знать
seamanДата: Вторник, 07 Мая 2019, 22:52 | Сообщение # 5
старожил
Сейчас нет на сайте
Цитата
со Slerp скорость будет уменьшаться по ходу приближения к цели

А почему? А потому что Slerp просто дает нечто среднее между первым параметром и вторым. Насколько среднее - определяет третий параметр.
Т.к. первый параметр - текущий поворот и получается это замедление.
Если в качестве первого параметра указать не текущий, а начальный - никакого замедления не будет.
Тут на примере векторов это можно понять:
https://poqxert.ru/blog/unity/tutorials/matematika/matematika-unity-urok-13-vector-interpolyaczii
drcrackДата: Среда, 08 Мая 2019, 02:28 | Сообщение # 6
старожил
Сейчас нет на сайте
Цитата
Если в качестве первого параметра указать не текущий, а начальный - никакого замедления не будет.

Правда для этого придется хранить собсна начальное значение + начальное время, что обычно делается в корутине или отдельном классе (чтобы не плодить лишних полей) и вместо одной строчки получается 15-20


Сообщение отредактировал drcrack - Среда, 08 Мая 2019, 02:28
seamanДата: Среда, 08 Мая 2019, 11:40 | Сообщение # 7
старожил
Сейчас нет на сайте
Я просто к тому, что замедление не присуще самому Лерпу/Слерпу, а присуще его простому использованию.
  • Страница 1 из 1
  • 1
Поиск:

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