Создать позицию Vector3 по разнице углов - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть позиция игрока , указатель, указывающий игроков направление просмотра , расстояние и по горизонтали и вертикальный угол .Я хочу вычислить целевую позицию :

  • , что составляет расстояние от позиции игроков
  • , котораяот игроков направление просмотра , горизонтальный угол вправо и вертикальный угол вверх

Речь идет о позиционировании гололенса.Пользовательский интерфейс приложения в сфере вокруг игрока.Пользовательский интерфейс должен быть на 40 градусов левее и на 20 градусов вверх от направления обзора игроков.

Редактировать : Добавлено изображение для пояснения.Даны данные о позиции игрока (pX | pY | pZ), радиусе (= длина черной жирной линии) и оба угла в градусах.

Я ищу способ расчета положения центра пользовательского интерфейса (x? | y? | z?).

enter image description here

Ответы [ 4 ]

0 голосов
/ 28 ноября 2018

Ответ математика:

Для вычисления сферической позиции с заданной информацией (расстояние между объектами, угол x, угол y) вы используете тригонометрию:

float x = distance * Mathf.Cos(yAngle) * Mathf.Sin(xAngle);
float z = distance * Mathf.Cos(yAngle) * Mathf.Cos(xAngle);
float y = distance * Mathf.Sin(yAngle);

ui.transform.position = player.transform.position + new Vector3(x,y,z);
0 голосов
/ 28 ноября 2018
// Set UI in front of player with the same orientation as the player
ui.transform.position = player.transform.position + player.transform.forward * desiredDistance;
ui.transform.rotation = player.transform.rotation;

// turn it to the left on the players up vector around the the player
ui.transform.RotateAround(player.transform.position, player.transform.up, -40);

// Turn it up on the UI's right vector around the player
ui.transform.RotateAround(player.transform.position, ui.transform.right, 20);

при условии, что вы также хотите, чтобы пользовательский интерфейс был лицом к игроку, в противном случае вам придется установить другое вращение после этого.

Нет необходимости вычислять его самостоятельно, API-интерфейс Unity уже сделает это за вас (см. Поворот вокруг )

0 голосов
/ 28 ноября 2018

Вы можете использовать Quaternion.Euler , чтобы создать вращение на основе углов в мировом пространстве, а затем получить желаемый результат, умножив его на известную позицию.

Итак, используя ваш примерВы можете найти позицию, подобную этой:

float radius, x_rot, y_rot;
Vector3 forwardDirection, playerPos;

Vector3 forwardPosition = playerPos + (forwardDirection * radius);
Vector3 targetPosition = Quaternion.Euler(x_rot, y_rot, 0) * forwardPosition;

Попробуйте проверить документы по Quaternion и Quaternion.AngleAxis для более удобной ротации.

0 голосов
/ 27 ноября 2018

Если я вас правильно понимаю, вы хотите создать пользовательский интерфейс, который находится над точкой.Я недавно сделал подобное в моей игре.и вот как я это сделал.

 if (Input.GetMouseButtonDown(0)) // use the ray cast to get a vector3 of the location your ui      
                                 // you could also do this manualy of have the computer do it the main thing is to 
                                  // get the location in the world where you want your ui to be and the
                                 // WorldTOScreenPoint() will do the rest
        {
            RaycastHit hit;
            Vector3 pos;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                pos = hit.point;
                pos.y += yOffset; // use the offset if you want to have it hover above the point
                ui.transform.position = cam.WorldToScreenPoint(pos); // use your main cammera here              
                // then either make your ui vissible or instanciati it here and make sure if you instanciate it 
                // that you make it a child of your cnavas


            }
        }

Надеюсь, это решит вашу проблему.Если я не понимаю, что вы пытаетесь сделать, дайте мне знать, и я постараюсь помочь.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...