Страница 1 из 1

Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 11:20
LoneRay
День добрый уважаемые участники форума Unity. Подскажите пожалуйста, как можно найти угол между двумя объектами используя Angle, signedAngle или другие методы? Проблема именно в том, что надо понять, как определить сам угол между красным объектом и ротацией объекта в форме полукруга. Грубо говоря эта форма похожа на транспортир и надо понять в какой угол попадает красный объект. Надеюсь понятно рассказал)
Demo

Дополнение: Есть данные позиции красного объекта впереди нас, нашей позиции и угол нашей ротации(transform.rotation.eulerAngles.y)

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 11:47
~AvA~

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 13:28
LoneRay
~AvA~ писал(а):Должно помочь

Не могли бы подсказать как это применить в моей проблеме? Если указать координаты объекта 1 и объекта 2 то угол меняться будет только при перемещении, а не при повороте.

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 13:34
1max1
Угол между объектами найти невозможно, только между векторами (направлениями).
Синтаксис:
Используется csharp
Vector3.Angle(red.position - player.position, player.forward);

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 14:49
LoneRay
1max1 писал(а):Угол между объектами найти невозможно, только между векторами (направлениями).
Синтаксис:
Используется csharp
Vector3.Angle(red.position - player.position, player.forward);

А что если первым вектором будет red.position - player.position, а вторым вектором будет [from.pos + eulerAngles.y] (то есть найти вектор который зависит от угла поворота), такое возможно?

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 14:59
1max1
[from.pos + eulerAngles.y]

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

Вектор зависящий от поворота это и есть transform.forward, есть еще transform.up и right, в сцене они показаны синим, желтым и красным цветом, когда выбираешь объект.

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 15:01
LoneRay
1max1 писал(а):
[from.pos + eulerAngles.y]

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

Вектор зависящий от поворота это и есть transform.forward, есть еще transform.up и right, в сцене они показаны синим, желтым и красным цветом, когда выбираешь объект.

Ну что в скобке это я очень грубо приблизил. Попробовал я по формуле выше всегда 90 показывает Нашёл я ошибку почему у меня 90 всегда показывало, оказалось что transform.posisiton дочернего объекта относительно мира был почему-то не подвижен хотя он дочерний, а поворот идёт по главному объекту, а значит и дочерний тоже поворачивается только вот по данным почему-то как не поворачивается. В итоге проблема решилась и показывает координаты корректно в зависимости от положения и поворота объекта. Ниже код прилагаю.
Синтаксис:
Используется csharp
FocusBot.transform.position - это позиция объекта в фокусе (объект впереди нас)
GetComponentInParent<Person>().transform.position - позиция главного объекта, а не дочернего, который отвечает за зрение главного объекта
GetComponentInParent<Person>().transform.forward - данные оси Z главного объекта исходя из его поворота
Vector3.Angle(FocusBot.transform.position - GetComponentInParent<Person>().transform.position, GetComponentInParent<Person>().transform.forward);
 

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 15:30
LoneRay
Спасибо за помощь в решении над моей проблемой 1max1 и ~AvA~

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 18:26
AngryCat
1max1 писал(а):Вектор зависящий от поворота это и есть transform.forward, есть еще transform.up и right, в сцене они показаны синим, желтым и красным цветом, когда выбираешь объект.
Может я дальтоник, но по моему, это все же зеленая стрелка, а не желтая :-? :-?

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 19:00
Woolf
AngryCat писал(а):
1max1 писал(а):Вектор зависящий от поворота это и есть transform.forward, есть еще transform.up и right, в сцене они показаны синим, желтым и красным цветом, когда выбираешь объект.
Может я дальтоник, но по моему, это все же зеленая стрелка, а не желтая :-? :-?


ага )
RGB = XYZ

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 19:15
1max1
Ну она салатовая, зеленый чуть насыщенней.

Re: Как найти угол между двумя объектами?

СообщениеДобавлено: 09 июн 2019, 20:17
AngryCat
1max1 писал(а):Ну она салатовая, зеленый чуть насыщенней.

:)) :)) Ладно, отмазался :))