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

Общие вопросы о Unity3D

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

Сообщение LoneRay 09 июн 2019, 11:20

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

Дополнение: Есть данные позиции красного объекта впереди нас, нашей позиции и угол нашей ротации(transform.rotation.eulerAngles.y)
«Нужно делать так, как нужно. А как не нужно, делать не нужно!»
Аватара пользователя
LoneRay
UNец
 
Сообщения: 49
Зарегистрирован: 11 июн 2016, 11:31

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

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

Аватара пользователя
~AvA~
UNIверсал
 
Сообщения: 396
Зарегистрирован: 17 фев 2015, 13:09

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

Сообщение LoneRay 09 июн 2019, 13:28

~AvA~ писал(а):Должно помочь

Не могли бы подсказать как это применить в моей проблеме? Если указать координаты объекта 1 и объекта 2 то угол меняться будет только при перемещении, а не при повороте.
«Нужно делать так, как нужно. А как не нужно, делать не нужно!»
Аватара пользователя
LoneRay
UNец
 
Сообщения: 49
Зарегистрирован: 11 июн 2016, 11:31

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

Сообщение 1max1 09 июн 2019, 13:34

Угол между объектами найти невозможно, только между векторами (направлениями).
Синтаксис:
Используется csharp
Vector3.Angle(red.position - player.position, player.forward);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение LoneRay 09 июн 2019, 14:49

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

А что если первым вектором будет red.position - player.position, а вторым вектором будет [from.pos + eulerAngles.y] (то есть найти вектор который зависит от угла поворота), такое возможно?
«Нужно делать так, как нужно. А как не нужно, делать не нужно!»
Аватара пользователя
LoneRay
UNец
 
Сообщения: 49
Зарегистрирован: 11 июн 2016, 11:31

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

Сообщение 1max1 09 июн 2019, 14:59

[from.pos + eulerAngles.y]

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

Вектор зависящий от поворота это и есть transform.forward, есть еще transform.up и right, в сцене они показаны синим, желтым и красным цветом, когда выбираешь объект.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение LoneRay 09 июн 2019, 15:01

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);
 
«Нужно делать так, как нужно. А как не нужно, делать не нужно!»
Аватара пользователя
LoneRay
UNец
 
Сообщения: 49
Зарегистрирован: 11 июн 2016, 11:31

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

Сообщение LoneRay 09 июн 2019, 15:30

Спасибо за помощь в решении над моей проблемой 1max1 и ~AvA~
«Нужно делать так, как нужно. А как не нужно, делать не нужно!»
Аватара пользователя
LoneRay
UNец
 
Сообщения: 49
Зарегистрирован: 11 июн 2016, 11:31

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

Сообщение AngryCat 09 июн 2019, 18:26

1max1 писал(а):Вектор зависящий от поворота это и есть transform.forward, есть еще transform.up и right, в сцене они показаны синим, желтым и красным цветом, когда выбираешь объект.
Может я дальтоник, но по моему, это все же зеленая стрелка, а не желтая :-? :-?
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 716
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

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

Сообщение Woolf 09 июн 2019, 19:00

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


ага )
RGB = XYZ
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

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

Сообщение 1max1 09 июн 2019, 19:15

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

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

Сообщение AngryCat 09 июн 2019, 20:17

1max1 писал(а):Ну она салатовая, зеленый чуть насыщенней.

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


Вернуться в Общие вопросы

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

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