Плавный RotationAround plane к GameObject (c видео)

Программирование на Юнити.

Плавный RotationAround plane к GameObject (c видео)

Сообщение asyven 12 янв 2019, 00:59

Доброго времени суток.
Моя задача, это прокрутка плоскости(Panel) к заданному стикмену.
Что бы создать эффект "3д c изометрией" я сделал ортографическую камеру и поставил BattleGround x на -40
Вот как это выглядит сейчас:


Проблемы:
1. Я рассчитываю время прокрутки до объекта с помощью:
Синтаксис:
Используется csharp
float getTimeToRotation(GameObject player)
    {
        var groundPosition = transform.position;
        var vector1 = centerIndicator.transform.position - groundPosition; //смотрим на статический obj
        var temptranf = player.transform.position;
        temptranf.y = 0f;
        var vector2 = temptranf - groundPosition; //смотрим на игрока

        var angle = Vector3.Angle(vector1, vector2); //в deg угол

        return angle/speed;
    }

Это решение мне не подходит, так как угол берется ближайший и я не смогу указав игрока n высчитать нужный поворот к нему.
(В дальнейшем, всем игрокам в мультиплеере будет приходить команда повернуть камеру до игрока)

2.Даже если опустить факт неправильного поворота, я хочу добиться плавности прокрутки. (ease out)
С ускорения до плавного замедления.
Как работает поворот сейчас:
Синтаксис:
Используется csharp
   //waitTime это результат предыдущей функции

    IEnumerator rotateGround(float waitTime)
    {
        var duration = Time.time + waitTime;
        while (duration > Time.time)
        {
            ground.transform.RotateAround(ground.transform.position, ground.transform.up, speed * Time.deltaTime);
            foreach (var decoration in decorations)
            {
                decoration.transform.LookAt(camera.transform);
                decoration.transform.RotateAround(ground.transform.position, ground.transform.up,
                    speed * Time.deltaTime);
            }

            foreach (var player in players)
            {
                player.transform.LookAt(camera.transform);
                player.transform.RotateAround(ground.transform.position, ground.transform.up,
                    speed * Time.deltaTime);
            }

            yield return null;
        }

        setNextAttacer();
    }
 


Вот как это должно выглядеть:
asyven
UNец
 
Сообщения: 2
Зарегистрирован: 12 янв 2019, 00:24

Re: Плавный RotationAround plane к GameObject (c видео)

Сообщение 1max1 12 янв 2019, 01:28

Для плавной прокрутки используй Quaternion.Lerp или Vector3.Lerp (если крутить по ейлеру). А решение с поворотом я вообще не понял.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Плавный RotationAround plane к GameObject (c видео)

Сообщение asyven 12 янв 2019, 01:36

1max1 писал(а):Для плавной прокрутки используй Quaternion.Lerp или Vector3.Lerp (если крутить по ейлеру). А решение с поворотом я вообще не понял.

Плавность получилась, спасибо.

Можете рассказать о своем виденье реализации прокрутки?
asyven
UNец
 
Сообщения: 2
Зарегистрирован: 12 янв 2019, 00:24


Вернуться в Скрипты

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

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