Поворот объекта + 90 градусов

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Поворот объекта + 90 градусов

Сообщение akter23 24 окт 2018, 15:02

Всем привет. Так получилось, что при импорте и настройки спрайтов не уследил за их изначальным поворотом, поэтому они все повернуты вправо, что мешает реализовать правильный поворот объекта.
Суть вопроса: нужно повернуть объект в сторону курсора + 90 градусов.
Сам кодец направления поворота я написал, а вот как теперь прибавить к не еще 90 градусов не знаю.
Синтаксис:
Используется csharp
Vector3 posAngle = curPos - transform.position;
transform.rotation = Quaternion.LookRotation(transform.forward, posAngle);
Аватара пользователя
akter23
UNITрон
 
Сообщения: 191
Зарегистрирован: 21 фев 2014, 08:11

Re: Поворот объекта + 90 градусов

Сообщение 1max1 24 окт 2018, 16:12

transform.right = target.position - transform.position;
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Поворот объекта + 90 градусов

Сообщение Woolf 24 окт 2018, 18:06

Очевидно, что..

Синтаксис:
Используется csharp
transform.rotation = Quaternion.LookRotation(transform.forward, posAngle);
transform.Rotate (0,90,0);
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Поворот объекта + 90 градусов

Сообщение Tolking 24 окт 2018, 19:00

Может проще один раз переимпортить спрайты?
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Поворот объекта + 90 градусов

Сообщение akter23 24 окт 2018, 19:07

Tolking писал(а):Может проще один раз переимпортить спрайты?

Думал над этим, но спрайтов очень много, и я так понимаю, что каждый из них мне придется ручками поворачивать. Так что это крайний вариант

1max1 писал(а):transform.right = target.position - transform.position;

Этот вариант не подходит, т.к. у персонажа начиаются приступы эпилепсии

Woolf писал(а):Очевидно, что..

Синтаксис:
Используется csharp
transform.rotation = Quaternion.LookRotation(transform.forward, posAngle);
transform.Rotate (0,90,0);

Ваш вариант тоже не подходит, т.к. персонаж начинает ходить и смотреть строго в одну сторону + эпилепсить.

Значит я плохо объяснил.

Вот спрайт в его первоначальном виде Изображение

Игра 2д. В ней есть скрипт управления персонажем с помощью перемещения джойстика. Джойстик передает свои координаты в скрипт перемещения, тот его принимает
Синтаксис:
Используется csharp
void ReceivePosition(Vector3 poistion)
    {
        curPos = poistion;
    }

И все бы работало правильно, но т.к. спрайт изначально развернут, то происходит примерно такая картина Изображение
Где, красный круг - позиция джойстика.
Аватара пользователя
akter23
UNITрон
 
Сообщения: 191
Зарегистрирован: 21 фев 2014, 08:11

Re: Поворот объекта + 90 градусов

Сообщение 1max1 24 окт 2018, 19:52

Синтаксис:
Используется csharp
static class Extensions
{
    public static void LookAt2D(this Transform me, Vector3 target, Vector3 eye)
    {
        Vector3 look = target - me.position;

        float sAngle = Vector2.SignedAngle(eye, look);

        if (sAngle != 0.0f)
        {
            var eulerAngles = me.eulerAngles;

            eulerAngles.z += sAngle;

            me.eulerAngles = eulerAngles;
        }
    }
}

Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Поворот объекта + 90 градусов

Сообщение akter23 24 окт 2018, 20:39

1max1 писал(а):
Синтаксис:
Используется csharp
static class Extensions
{
    public static void LookAt2D(this Transform me, Vector3 target, Vector3 eye)
    {
        Vector3 look = target - me.position;

        float sAngle = Vector2.SignedAngle(eye, look);

        if (sAngle != 0.0f)
        {
            var eulerAngles = me.eulerAngles;

            eulerAngles.z += sAngle;

            me.eulerAngles = eulerAngles;
        }
    }
}


То что надо! Спасибо большое.
Правда я так и не понял, как работает этот скрипт :/

Вот тут, мы получаем направлеие вектора.
Синтаксис:
Используется csharp
Vector3 look = target - me.position;


Здесь я так понимаю, мы получаем угол между векторами.
Синтаксис:
Используется csharp
float sAngle = Vector2.SignedAngle(eye, look);


А вот эту часть кода не понял совершенно.
Если угол между векторами != 0, то мы объявляем перменную eulerAngles и присваиваем ей значение me.eulerAngles, т.е. метод отвечающий за вращение вектора вокруг своей оси.
Потом мы берем ось Z и прибавляем ей угол между векторами, после чего стало вообще непонятно.
Синтаксис:
Используется csharp
if (sAngle != 0.0f)
        {
            var eulerAngles = me.eulerAngles;

            eulerAngles.z += sAngle;

            me.eulerAngles = eulerAngles;
        }


Каким образом это помогло нормализовать направление поворота, не подскажите?
Аватара пользователя
akter23
UNITрон
 
Сообщения: 191
Зарегистрирован: 21 фев 2014, 08:11

Re: Поворот объекта + 90 градусов

Сообщение 1max1 24 окт 2018, 20:45

Второй аргумент метода это тот вектор, который должен смотреть в точку (target), в твоём случае это transform.right, это мог бы быть и forward, но так как моделька у тебя повернута на 90 вправо, вектор right - то что нужно.
Если угол между векторами != 0

В целях оптимизации, зачем поворачивать если уже и так все повернуто?))
после чего стало вообще непонятно.

К углу поворота по Z добавляются недостающие градусы вот и всё.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

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

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