Превратите панель в мировое пространство - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть холст в мировом пространстве. Панель - дитя этого холста. У меня есть еще одна сфера, которая перемещается со ссылкой на MainCamera.

Я бы хотел прикрепить изображение к Сфере в мировом пространстве. Ниже приведен мой код,

 public class ClampImage : MonoBehaviour
    {

        public Camera FirstpersonCamera;
        public GameObject panel;

        void Update()
        {
            //get the position of the sphere in the worldspace
            Vector3 spherePosition = FirstpersonCamera.WorldToScreenPoint(this.transform.position);
            //assign the world position of the sphere to the image
            panel.transform.position = spherePosition;

        }
    }

Этот скрипт был подключен к сфере Gameobject. К сожалению, панель вообще не движется. Как прикрепить панель к сфере?

1 Ответ

1 голос
/ 06 февраля 2020

Ну, это сработало с Screenspace Overlay, потому что тогда ваша строка

Vector3 spherePosition = FirstpersonCamera.WorldToScreenPoint(this.transform.position);

имела смысл и помещала вашу панель в координаты пространства пикселей.


Теперь, когда ваша панель находится в Worldspace вы больше не хотите преобразовывать позицию World-Space в область отображения пикселей. Так что просто избавьтесь от этого шага и, скорее, прямо используйте мировое космическое положение, которое у вас уже есть

//assign the world position of the sphere to the image
panel.transform.position = transform.position;

Затем, чтобы он всегда смотрел на камеру, вы можете просто сделать

panel.transform.rotation = FirstPersonCamera.transform.rotation;

Или если вы хотите, чтобы оно было более правильным и не зависело от направления, в котором вы смотрите, вы можете использовать

panel.transform.LookAt(panel.transform.position + Camera.transform.forward);

, поскольку передний вектор панели должен фактически смотреть точно в сторону от камеры.


Если вы хотите, чтобы изображение имело дополнительное смещение, например, перед сферой, вы также можете сделать

panel.transform.position = transform.position - FirstPersonCamera.transform.forward * SomeOffsetInUnits;
...