Przyporządkowanie elementu UI obiektowi na scenie

Ogólne pytania na temat Unity3D

Przyporządkowanie elementu UI obiektowi na scenie

Postprzez Skatton » 06 Maj 2019, 09:24

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ć? :)
Skatton
 
Posty: 36
Rejestracja: 30 Cze 2016, 10:44
Has thanked: 0 time
Been thanked: 0 time

Re: Przyporządkowanie elementu UI obiektowi na scenie

Postprzez Hostur » 06 Maj 2019, 10:01

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.
Hostur
 
Posty: 733
Rejestracja: 05 Sie 2015, 07:36
Has thanked: 0 time
Been thanked: 0 time

Re: Przyporządkowanie elementu UI obiektowi na scenie

Postprzez Skatton » 06 Maj 2019, 10:07

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.
Skatton
 
Posty: 36
Rejestracja: 30 Cze 2016, 10:44
Has thanked: 0 time
Been thanked: 0 time


Wróć do Wsparcie Unity

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 3 gości

cron