Не могу правильно повернуть объект [решено]

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

Не могу правильно повернуть объект [решено]

Сообщение Riddik 24 ноя 2011, 21:09

Товарищи, то ли я заработался, то ли ещё что - запутался я с этими кватернионами.

Мне просто надо, чтобы объект "посмотрел" на точку (указатель мыши).

Синтаксис:
Используется csharp
Vector3 target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 velocity = target - transform.position;
velocity.Normalize();
float angle = Vector3.Angle(Vector.up, velocity);
//Здесь в попытки повернуть на angle перепробовал все, ведёт к не верным результатам
 


Всё в одной плоскости (одинаковая z).
Далее как повернуть gameObject на угол angle? Вокруг своей, локальной Z axis. При этом чтобы его направление движения не менялось.

У меня получается, только если каждую вершину меша умножить на матрицу поворота, которую я могу составить, но как это проще сделать?
Последний раз редактировалось Riddik 25 ноя 2011, 15:24, всего редактировалось 1 раз.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Не могу правильно повернуть объект

Сообщение gnoblin 24 ноя 2011, 21:17

можно не париться и просто сделать transform.LookAt()

если надо чтобы он смотрел куда-то только по одной оси,
тогда запоминаем eulerAngles, делаем LookAt, назначаем старые x,z и новый Y угол (если смотрит только по оси Y)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Не могу правильно повернуть объект

Сообщение seaman 24 ноя 2011, 21:27

transform.rotation = Quaternion.AngleAxis(angle, transform.up);
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Не могу правильно повернуть объект

Сообщение Riddik 24 ноя 2011, 21:39

gnoblin , делал, изменений нет:

Синтаксис:
Используется csharp
Vector3 ea = transform.eulerAngles;
transform.LookAt(target);
transform.eulerAngles = new Vector3(ea.x, transform.eulerAngle.y, ea.z);
 


seaman , и так делал - меняется траектория движения, пролетает мимо target, да и само вращение не всегда верно - зависит от того, в каком квадранте target.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Не могу правильно повернуть объект

Сообщение seaman 24 ноя 2011, 21:59

меняется траектория движения

Естественно будет меняться - Вы же поворачиваете объект.
Я еще у Вас вот этого не понял:
Синтаксис:
Используется javascript
float angle = Vector3.Angle(Vector.up, velocity);

Это угол между осью "вверх" и направлением на таргет. Вы этого хотели? Может все-таки:
Синтаксис:
Используется javascript
float angle = Vector3.Angle(transform.forward, velocity);
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Не могу правильно повернуть объект

Сообщение Riddik 24 ноя 2011, 22:04

seaman писал(а):
меняется траектория движения

Естественно будет меняться - Вы же поворачиваете объект.
Я еще у Вас вот этого не понял:
Синтаксис:
Используется javascript
float angle = Vector3.Angle(Vector.up, velocity);

Это угол между осью "вверх" и направлением на таргет. Вы этого хотели?


Именно этого, конечно :) Просто в исходной позиции объект направлен как раз по Vector3.up.

Насчёт смены траектории - ну а как повернуть "просто картнку" объекта, не меняя его траектории?

Вроде всё по правилам - сначала ставим объект в исходную позицию, затем поворот (нацелиться на мишень) и выстрел (то бишь transform.Translate(velocity * speed * Time.deltaTime);

Вот с поворотом беда (полная Ж)
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Не могу правильно повернуть объект

Сообщение seaman 24 ноя 2011, 22:14

Просто в исходной позиции объект направлен как раз по Vector3.up.

Т.е. "forward" объекта направлен вверх?
ЗЫ: а почему не попробовать как я написал?
Так, перечитал сообщение еще раз. Вы же делаете совсем не то, что написали. Вы каждый кадр поворачиваете объект, а написали, что надо один раз перед началом движения.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Не могу правильно повернуть объект

Сообщение Riddik 24 ноя 2011, 22:22

Нет -нет, поворот один раз в Start() вместе с вычислениеи вектора скорости, а каждый кадр лишь Translate()

Насчёт forward, это ось Z в локальном пространстве объекта, она всегда направлена от наблюдателя вглубь экрана, вокруг неё и надо вовернуть. Игра 2d, забыл уточнить.

seaman писал(а):ЗЫ: а почему не попробовать как я написал?

Пробовал и так, всё равно и поворот и траектория движения не те, что нужно получить.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Не могу правильно повернуть объект

Сообщение Riddik 24 ноя 2011, 22:32

Чтобы я вас не путал, вот код:

Синтаксис:
Используется csharp
void Start()
    {
        Vector3 target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        target.z = gunLayer;
        transform.position = gunPosition;
        velocity = target - gunPosition;
        velocity.Normalize();
       
        float a = Vector2.Angle(Vector2.up, velocity);

        transform.rotation = Quaternion.AngleAxis(a, transform.up); //нужно повернуть вокруг transform.forward, и так и так пробовал - все неправильно
 //transform.rotation = Quaternion.AngleAxis(a, transform.forward);
    }

    void Update()
    {        
        if(rectScreen.Contains(Camera.main.WorldToScreenPoint(transform.position)))
            transform.Translate(velocity * speed * Time.deltaTime);
        else Destroy(gameObject);
    }
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Не могу правильно повернуть объект

Сообщение seaman 24 ноя 2011, 23:11

Возможно я все же что-то не допонял, но если нужно четко поворачивать вокруг оси Z (игра двумерная), то вроде нужно так:
Синтаксис:
Используется csharp
transform.rotation = Quaternion.AngleAxis(a, Vector3.forward);

Ну и мне как-то понятнее:
Синтаксис:
Используется javascript
float a = Vector3.Angle(Vector3.up, velocity);

А траектория в Вашем случае должна быть прямой.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Не могу правильно повернуть объект

Сообщение Riddik 25 ноя 2011, 00:53

Именно всё так и сделано.

Вот выкладываю исходный проект, который иллюстрируют проблему - можно увидеть, какая ерунда происходит: http://webfile.ru/5691409 размер: 67 Кб

А вот такой результат нужен, накидал быстренько на великом и могучем С++ (HGE), результирующий exe: http://webfile.ru/5691360 размер: 302 Кб

Т.е. просто на примере стрельбы, луч корректно поворачивается и летит в сторону указателя в момент выстрела.
Щелчок левой кнопкой - выстрел.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Не могу правильно повернуть объект

Сообщение gnoblin 25 ноя 2011, 05:19

В каждой теме Риддика магические проблемы и это вызывает поток постов O:-).

Предлагаю с самого начала постить проект пример!
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Не могу правильно повернуть объект

Сообщение seaman 25 ноя 2011, 09:25

Именно всё так и сделано.

Вы же привели код. Там не так как я написал. Где правда? В Вашем коде, или в приведенной цитате.
Посмотрите внимательнее мой предыдущий пост и Ваш код. Найдите отличие.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Не могу правильно повернуть объект

Сообщение Riddik 25 ноя 2011, 10:25

seaman писал(а):
Именно всё так и сделано.

Вы же привели код. Там не так как я написал. Где правда? В Вашем коде, или в приведенной цитате.
Посмотрите внимательнее мой предыдущий пост и Ваш код. Найдите отличие.


Я несколько вариантов кода привёл, а в исходном проекте, который я выложил, всё именно так, как Вы написали.

Правка: о, чтобы скачать файл, webfile теперь просит установить их загрузчик. Сейчас перезалью,ещё вчера такого не было.

gnoblin, ага, напасть какая-то)
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: Не могу правильно повернуть объект

Сообщение Riddik 25 ноя 2011, 10:45

Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

След.

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

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

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