Как задать пуле нужный угол

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

Как задать пуле нужный угол

Сообщение DimaJoke 19 фев 2019, 18:00

здравствуйте, насколько этот вопрос не был нубским.. Мне нужно буквально узнать угол между тремя векторами(как на картинке)
Изображение
И вывести это в float переменную, которая будет задавать вращение по оси Z Quaternion.Euler при Instantiate
Перекопал учебники пол линейной алгебре, опробовал функции Vector3.Angle и Vector3.SignedAngle, но... ничего не работает(хм, логично, тогда бы я сюда не писал).

Но пока получается одно из трёх
Изображение Изображение
(в третьем случае угол получается максимум одному)

коды выглядит.. *вырвал часть кода*
Синтаксис:
Используется csharp
Vector3 MousePosition = camera.ScreenPointToRay(Input.mousePosition).origin;

float Angle = (float) Vector3.Angle(MousePosition - transform.position, transform.right - transform.position);

Instantiate(FireBall, transform.position, Quaternion.Euler(0f, 0f, Angle));
 


вот так
Последний раз редактировалось DimaJoke 19 фев 2019, 18:40, всего редактировалось 2 раз(а).
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: Угол между тремя векторами

Сообщение Paul Siberdt 19 фев 2019, 18:05

Вам нужен не угол между тремя векторами, а угол между векторами ВА и ВС. ВА = А-В, ВС = С-В.

Синтаксис:
Используется javascript
Vector3 vA, vB, vC;
float angle = Vector3.Angle(vA-vB, vC-vB);
 
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Угол между тремя векторами

Сообщение DimaJoke 19 фев 2019, 18:16

Paul Siberdt, спасибо за ответ, но есть небольшая проблема.
Есть погрешность на несколько градусов(для меня критично), если Va оказывается нижу Vc то происходит отражение по оси X (могу решить с помощью условий).
Что делать с погрешностью?
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: Угол между тремя векторами

Сообщение Paul Siberdt 19 фев 2019, 18:24

Как я всегда советую: расскажите, какую задачу пытаетесь решить. Не выбранную реализацию, а задачу.

Не могу представить, какую погрешность имеете в виду. Если появляется погрешность - это звоночек, что что-то у вас в коде накожено не то. :)
А править "отражение" можно через Vector3.SignedAngle.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Угол между тремя векторами

Сообщение DimaJoke 19 фев 2019, 18:25

Paul Siberdt писал(а):Как я всегда советую: расскажите, какую задачу пытаетесь решить. Не выбранную реализацию, а задачу.

Хорошо, спасибо. Новую тему создавать? Или эту перименовывать?(после ответа это сообщение будет отредактировано)
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: Угол между тремя векторами

Сообщение Paul Siberdt 19 фев 2019, 18:28

Лучше переименовать, чем плодить новую. А еще лучше - просто продолжить решать проблему. Если под конец решение уже не будет иметь ценности ни для вас, ни для сообщества, тему можно даже удалить.

Вот, я сижу, рефрешу страницу и жду объяснялку, что должно получиться и отчего, вдруг, выскакивают лишние градусы. :) Название темы на это никак не повлияет.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как задать пуле нужный угол

Сообщение Paul Siberdt 19 фев 2019, 18:53

Вот, я смотрю на картинку, потом на название "Как задать пуле нужный угол" и ничего не понимаю. :)
Где там пуля и, тем более - углы? :)

Судя по коду, вы читаете позицию мышки на экране и рождаете файерболл с каким-то углом... Вот, и напишите что-то, типа, "я хочу запускать шар, задавая ему стартовую позицию в клике мышки, а направление - в сторону смещения мышки". Так? Нет? Тогда пишите сами, что хотите. :)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как задать пуле нужный угол

Сообщение DimaJoke 19 фев 2019, 19:56

Paul Siberlit, именно так.
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

Re: Как задать пуле нужный угол

Сообщение Paul Siberdt 19 фев 2019, 20:12

Ок, а игра 2D, верно?
Тогда самое простое, что можно сделать - это посчитать вектор направления между экранными точками Press и Release (все также: vDirectionScreen = vRelease - vPress)
Вам угол вообще не нужен.

Если хотите повернуть файербол по направлению, определите кватернион: Quaternion qDirection = Qiaternion.FromToRotation(vFireballForward, vDirectionScreen)
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Как задать пуле нужный угол

Сообщение AngryCat 21 фев 2019, 21:57

Возможно, следует проверять не сразу, а после небольшой задержки. Это может устранить погрешность
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 716
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: Как задать пуле нужный угол

Сообщение 1max1 22 фев 2019, 14:23

Синтаксис:
Используется csharp
var mp = Camera.main.ScreenToWorldPoint(Input.mousePosition);
var fb = Instantiate(FireBall, transform.position, Quaternion.identity);
fb.LookAt2D(mp, fb.transform.up); // поворот оси up в сторону mp

Синтаксис:
Используется 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)
        {
            Vector3 eulerAngles = me.eulerAngles;

            eulerAngles.z += sAngle;

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

Re: Как задать пуле нужный угол

Сообщение DimaJoke 23 фев 2019, 09:21

Всем спасибо, Quaternion.FromToRotation() было уже достаточно для решения моей задачи.
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт


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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 30