Strona 1 z 1

Przyporządkowanie elementu UI obiektowi na scenie

PostWysłany: 06 Maj 2019, 09:24
przez Skatton
Witam,

Kwestia dotyczy dodania elementu UI do obiektu 3d na scenie, celem jego opisania. Dla uproszczenia posłużę się prostym przykładem. Mam na scenie dom i chciałbym go opisać za pomocą UI Text, czyli nazwą tego domu. Warunki są następujące:

A. Nazwa domu jest do niego „przyklejona” i widoczna dokładnie nad samym domem. Dlatego też wyświetla się wówczas, gdy dom znajduje się w perspektywie kamery, nie podążając za kamerą, gdy kamera się obróci i dom wyjdzie poza jej perspektywę.

B. Jeśli dom znajduje się w perspektywie kamery, nazwa domu wyświetla się tylko DO określonej odległości. Gdy kamera wyjdzie poza tę odległości, nazwa przestaje się wyświetlać.

C. Podobnie, jak powyżej. Jeśli dom znajduje się w perspektywie kamery, nazwa domu wyświetla się tylko OD określonej odległości. To znaczy: jeśli kamera zbliży się bardzo blisko domu, nazwa przestaje się wyświetlać.

Czy znacie jakiś sposób, jak to zrobić? :)

Re: Przyporządkowanie elementu UI obiektowi na scenie

PostWysłany: 06 Maj 2019, 10:01
przez Hostur
Potrzebujesz
TextMeshPro (z package managera)
Canvasa w world space

Pamiętaj, że jak masz canvas w world space to musisz mu podpiąć kamerę, inaczej będzie w updacie guiowym wołać cały czas Camera.main co jest tym samym co FindObjectWithTag. Jeśli masz dużo domków to oczywiście będzie to bardzo kosztowne.

Do canvasu dodajesz prosty skrypt z 3 funkcjami
Jedna to OnTriggerEnter. Ustawiasz całemu obiektowi osobną warstwę, dodajesz do kamery obiekt z colliderem i nadajesz mu tę samą warstwę. Ustawiasz w settingsach fizyki żeby ta warstwa kolidowała tylko z samą sobą.

Na triggerenter nie musisz sprawdzać z czym triggerujesz bo będzie to możliwe tylko z kamerą (lub innym domkiem).
Wystarczy wtedy włączyć canvas.

W LateUpdate obracasz canvas w kierunku kamery.

W triggerexit wyłączasz canvas.

Oddziel LateUpdate od triggerów żebyś nie obracał nieaktywnych canvasów w stronę kamery.
Musisz skorzystać z TMP bo zwykły text z unitowego UI się nie skaluje do małych rozmiarów.

Na koniec tylko ustawiasz odpowiednią wielkość sphere collidera (tego na camerze) i tą wielkością sterujesz zasięgiem widzenia tych że canvasów.

Re: Przyporządkowanie elementu UI obiektowi na scenie

PostWysłany: 06 Maj 2019, 10:07
przez Skatton
Dzięki! Wypróbuję tę metodę, zobaczę jak mi pójdzie :). Mam TextMeshPro, ale zaimportowany do wcześniejszej wersji Unity. Zauważyłem, że na wersjach 2018 ma ograniczone funkcje, nie można np wpisywać tekstu. Chyba będę musiał usunąć go i zaimportować raz jeszcze.