Ну, это сработало с 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;