Функция WorldToScreenPoint () не работает должным образом - PullRequest
0 голосов
/ 15 октября 2019

Мне нужна небольшая помощь с функцией WorldToScreenPoint (позиция), может кто-нибудь немного подсказать мне? Я использую эту функцию для отображения названия города:

public class LabelsTest : MonoBehaviour
{
    [SerializeField]
    private Text nameLabel;

    // Update is called once per frame
    void Update()
    {
        Vector3 cameraPos = Camera.main.WorldToScreenPoint(transform.position);
        nameLabel.transform.position = cameraPos;
    }
}

Но проблема в том, что я вижу интерфейс с текстом два раза, один над плоскостью, которая идеально подходит:

In the scene

но когда я смотрю в сторону от плоскости, я тоже вижу там этикетку .:

on the other side of me from the plane

Я не знаю, делаю ли я что-то не так или оно просто работает не так, как должно.

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Вы должны предотвратить рендеринг Text, когда он находится за камерой. К счастью, WorldToScreenPoint дает вам аз-компонент, который говорит вам, как далеко перед камерой находится точка. Итак, просто установите Text, чтобы он был включен при z>0 и отключен при z<=0:

public class LabelsTest : MonoBehaviour
{
    [SerializeField]
    private Text nameLabel;

    // Update is called once per frame
    void Update()
    {
        Vector3 cameraPos = Camera.main.WorldToScreenPoint(transform.position);
        nameLabel.transform.position = cameraPos; 
        nameLabel.enabled = cameraPos.z>0;
    }
}
0 голосов
/ 15 октября 2019

Это потому, что ваш «самолет» отбраковывает заднюю поверхность, то есть, когда самолет поднимается в определенной точке выше положения Y камеры, он становится невидимым. Вот GIF проблемы. https://gyazo.com/d22c51951d1e8abd07a354af7f48ffef

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