Пятница, 19 Апреля 2024, 18:35

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Наматывание вокруг точки
Наматывание вокруг точки
sinoptisДата: Понедельник, 07 Сентября 2015, 18:16 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Добрый день. Встала следующая проблема, которую я никак не могу переварить. Допустим, по центру экране есть точка, если водить мышкой вокруг этой точки по часовой стрелке, допустим, счетчик(угол) накапливается, а в другую сторону, уменьшается. Т.е. получается некоторое наматывание нити(будто), сначала наматываешь в одну сторону, а потом в другую сторону нужно столько же размотать. Т.к. Vector2.Angle возвращает только острый угол, у меня никак не получается правильно посчитать. Просто на словах обьясните, пожайлуста, как это можно сделать.
EchoITДата: Понедельник, 07 Сентября 2015, 19:44 | Сообщение # 2
старожил
Сейчас нет на сайте
Рубрика быдлокодер:
Сделай невидимый коллайдер и вращай его вслед за мышью, считывая разницу поворота по оси через eulerAngles (или чо у тебя там, если 2D).

P.S.: не факт, что это нужное тебе решение.
P.P.S.: скорее всего факт, что оно не работает. biggrin


Долгожданный анонсик: State of War

Сообщение отредактировал EchoIT - Понедельник, 07 Сентября 2015, 19:45
seamanДата: Вторник, 08 Сентября 2015, 18:34 | Сообщение # 3
старожил
Сейчас нет на сайте
Каждый кадр измерять разницу в угле поворота от предыдущего значения. Она всегда острая. Внутри скрипта суммировать. Конечно будут накапливаться ошибки. Но кругов 10 -20 думаю можно так считать.
sinoptisДата: Четверг, 10 Сентября 2015, 17:53 | Сообщение # 4
почетный гость
Сейчас нет на сайте
seaman, естественно, я так пробовал, но дело в том что угол то всегда в пределах от 0 до 180 и при вращении в одну сторону можно просто модуль дельты суммировать и все, но необходимо и разматывать. И тут встает главная проблема, как определить в какую сторону вращает игрок мышь. Знак дельты здесь бесполезен, т.к. до 180 он будет положителен, а потом отрицателен. И тоже самое в обратную сторону, знак дельты чередуется +, -, +, - и таким способом невозможно определить отнимать дельту или прибавлять.

Сообщение отредактировал sinoptis - Четверг, 10 Сентября 2015, 17:54
seamanДата: Четверг, 10 Сентября 2015, 20:18 | Сообщение # 5
старожил
Сейчас нет на сайте
Ну так элементарная векторная математика:
Код
public float AngleWithSign(Vector2 v1, Vector2 v2)
{
     float angle = Vector2.Angle(v1, v2);
     float discriminat = v1.x * v2.y - v1.y * v2.x;
     return Mathf.Sign(discriminat) * angle;
}

PS: это не отменяет предыдущего комментария...
sinoptisДата: Пятница, 11 Сентября 2015, 09:08 | Сообщение # 6
почетный гость
Сейчас нет на сайте
seaman, спасибо, я что-то не додумался считать dicriminant. А почему такое выражение v1.x * v2.y - v1.y * v2.x, можете обьяснить?
falcowareДата: Пятница, 11 Сентября 2015, 09:54 | Сообщение # 7
старожил
Сейчас нет на сайте
sinoptis, это векторное произведение двух векторов.
равное произведению длин векторов на синус угла между ними.
Если значение отрицательное, значит угол отрицательный.


Сообщение отредактировал falcoware - Пятница, 11 Сентября 2015, 09:57
wcptДата: Пятница, 11 Сентября 2015, 13:22 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Цитата falcoware ()
sinoptis, это векторное произведение двух векторов.
равное произведению длин векторов на синус угла между ними.
Если значение отрицательное, значит угол отрицательный.

всё так up

отрицательный угол up

немного математики на ресурсе не повредит up


Сообщение отредактировал wcpt - Пятница, 11 Сентября 2015, 13:22
seamanДата: Пятница, 11 Сентября 2015, 18:55 | Сообщение # 9
старожил
Сейчас нет на сайте
Цитата wcpt ()
отрицательный угол up

Это ирония?
https://ru.wikipedia.org/wiki/%D0%A3%D0%B3%D0%BE%D0%BB
wcptДата: Пятница, 11 Сентября 2015, 19:23 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
Цитата seaman ()
Это ирония?

нет confused
sinoptisДата: Пятница, 11 Сентября 2015, 21:52 | Сообщение # 11
почетный гость
Сейчас нет на сайте
falcoware, спасибо, что-то совсем вылетело из головы.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Наматывание вокруг точки
  • Страница 1 из 1
  • 1
Поиск:

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