Unity 4.6 - jak skalować elementy GUI do odpowiedniego rozmiaru dla każdej rozdzielczości

Nowy Unity 4.6 pochodzi z nowym GUI, kiedy zmieniam rozdzielczość de NA Unity przycisk UI skaluje się idealnie, ale kiedy testuję na urządzeniu Nexus 7 Przycisk wygląda zbyt mały. Jakiś pomysł, jak to rozwiązać?

Jedność 4.6

Android-Nexus 7 2gen

Author: user3071284, 2014-08-25

5 answers

Nowy system GUI Unity używa "kotwic" do kontrolowania skalowania elementów gui (takich jak przyciski) w stosunku do macierzystego kontenera.

Unity ma film instruktażowy, jak używać nowego komponentu "Rect Transform" (gdzie kotwice są skonfigurowane) tutaj: http://unity3d.com/learn/tutorials/modules/beginner/ui/rect-transform .

Ostatnia połowa poradnika dotyczy kotwic. Ta strona zawiera linki do całej serii samouczków. To nie za długo. Powinieneś obejrzeć wszystko.

Specyficzne dla Twojego pytania:

Kotwice są widoczne na pierwszym zrzucie ekranu. Są to te 4 małe strzałki w lewym górnym rogu przycisku.

W tej chwili twój przycisk jest zakotwiczony tylko w lewym górnym rogu.

Dwie prawe kotwy należy przeciągnąć w prawo, aby prawa krawędź przycisku była zakotwiczona w przestrzeni wewnątrz kontenera macierzystego.

W zależności od sytuacji, dwie dolne strzałki mogą wymagać przeciągnięcia w dół tak, że dolna krawędź przycisku jest zakotwiczona, jak również.

Wideo, które podlinkowałem powyżej, opisuje to wszystko szczegółowo.

Wreszcie, aby rozmiar czcionki był dobrze skalowany w różnych rozdzielczościach, musisz dodać i skonfigurować komponent rozdzielczości referencyjnej do podstawowej kanwy interfejsu użytkownika, jak napisał Ash-Bash32 wcześniej.

Update: najlepszym sposobem na dodanie komponentu rozdzielczości referencyjnej jest okno Inspektora dla obszaru roboczego w interfejsie użytkownika.

1) Kliknij przycisk "Dodaj komponent" na dole Inspektora.

2) wpisz słowo "Reference" w polu filtra wyszukiwania.

3) Wybierz komponent "rozdzielczość referencyjna" w wynikach wyszukiwania.

kroki dodawania komponentu rozdzielczości referencyjnej w Unity

 23
Author: schmosef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-31 22:42:12

Rozdzielczość referencyjna jest teraz zmieniana na Skaler Canvas.. Wraz ze zmianą nazwy dodali wiele więcej funkcji dynamiczności płótna. Możesz przejrzeć dokument Unity Doc skalera Canvas, a także spojrzeć na Ten artykuł, aby znaleźć praktyczny przykład, jak i dlaczego używać skalera Canvas. Upewnij się również, że korzystasz z punktów kontrolnych, aby było to bardziej wytrzymałe...

 21
Author: gameOne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-22 08:41:55

Aby skalować interfejs dodał komponent ReferenceResolution do obszaru roboczego, który chcesz skalować. Tutaj wpisz opis obrazka

P. S. nie ma dokumentacji dla ReferenceResolution

 10
Author: Ash-Bash32,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-31 13:31:02

Jeśli chcesz, aby przycisk był tego samego rozmiaru dla wszystkich ekranów i rozdzielczości, musisz dodać komponent Skaler canvas do obszaru roboczego i ustawić tryb dopasowania ekranu na: Dopasuj szerokość lub wysokość, oto link do dokumentów, to bardzo pomaga, jeśli chcesz dążyć do różnych rozmiarów lub Rozdzielczości:

Http://docs.unity3d.com/Manual/HOWTO-UIMultiResolution.html

 2
Author: MykeAngel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-18 17:04:31

Staje się to gigantyczne i zawiłe, gdy zaczniesz układać rzeczy w kodzie i używać skalera canvas, więc chciałbym udzielić dokładnej odpowiedzi, aby zaoszczędzić komuś godziny, przez które przeszedłem.

Po pierwsze, nie używaj anchoredPosition do pozycjonowania czegokolwiek, chyba że w pełni zdasz sobie sprawę, że jest to liczba 0.0 do 1.0. Użyj recttransform localPosition, aby wykonać rzeczywiste ułożenie i pamiętaj, że jest w stosunku do kotwicy macierzystej. (Musiałem ułożyć siatkę od środka)

Po drugie, put a Skaler canvas na nadrzędnym obiekcie układu i wewnętrznych elementach interfejsu. Jeden sprawia, że układ w odpowiedniej pozycji, drugi zmieni rozmiar elementów tak, aby rzeczywiście pokazać się w prawo. Nie możesz polegać na rodzicu, chyba że dzieci mają również Skalery (i graficzne Raycastery, które je dotykają).

Po trzecie, jeśli masz Skaler, nie używaj ekranu.szerokość i wysokość, zamiast tego Załóżmy, że ekran jest tą samą wartością, którą umieściłeś dla skalerów (mam nadzieję, że użyłeś tego samego lub wiesz, co robisz). Na szerokość ekranu zawsze zwraca rzeczywiste piksele urządzenia, również urządzenia retina, ale Skalery canvas nie uwzględniają tego. To prawdopodobnie daje jedność jeden pozostały sposób, aby znaleźć rzeczywiste dpi ekranu, jeśli gra chce. Edit: ten akapit dotyczy każdego obszaru nadrzędnego połączonego z kodem wykonującym układanie. Nie zabłąkane płótna, pewnie można je pomieszać. Pamiętaj tylko o wytycznych unity dotyczących performance z płótnami.

Po czwarte, płótno jest nadal trochę buggy. Nawet z powyższymi niektóre rzeczy nie są renderowane, dopóki nie usuniesz i nie odtworzysz obszaru roboczego, jeśli ponownie otworzysz scenę lub ulegnie awarii. W przeciwnym razie powyższe to ogólne "zasady", które znalazłem.

Aby wyśrodkować "siatkę rzeczy", nie możesz użyć połowy szerokości lub wysokości skalera canvas, musisz obliczyć wysokość siatki i ustawić przesunięcie o połowę, w przeciwnym razie zawsze będzie lekko wyłączone. Dodałem to jako dodatkową wskazówkę. To obliczenie działa dla wszystkich orientacji.

 1
Author: Stephen J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-10 18:25:05