Autor Wątek: Co sądzicie o unity 4.3 dla 2D  (Przeczytany 5137 razy)

Offline Pawelx156

  • Użytkownik

# Listopad 25, 2013, 19:18:21
Witam.
Od jakiegoś tygodnia testuje sobie Unity 4.3 2D, skuszony troszkę tą multiplatformowością i  ogólnie wielkim boomem na to środowisko, i te superanckie 2d.
Od razu napiszę, że nie używałem jeszcze Unity ( bo nie czułem takiej potrzeby - nie tworze i nie będę tworzył gier 3d) .

No i po skromnych testach jestem w szoku jak można szczycić się wsparciem 2d, w środowisku które kompletnie  nie zna potrzeb gier tego typu.  Zwyczajnie się do robienia gier nie nadaje.

Fajnie jest fizyka, są sprajty, animacje i chyba tyle dobrego.

1. Wydajność.
Tu jest okropnie. Prosty animowany sprite w licznie 2k na ekranie i fps leci do 60.
W XNA przy liczbie około 4.5k mam podobny wynik. Tylko że tu akurat były to obiekty poruszające się mające kolizje z tilami i inteligencję.

Oczywiście zdaje sobie sprawę z tego że realnie tyle nie będzie potrzebne.

2. Warstwy Sorting Layers a  pozycja Z.

Tworzymy sobie  kilkanaście obiektów składających się z elementów które muszą być wyświetlane w odpowiednich kolejnościach.  Dodajmy do tego, że ich pozycje powinny być sortowane ( robimy jakąś grę  z widokiem izometrycznym albo pseudo ) .

I teraz żeby obiekt w obiekcie posortować, każdemu elementowi trzeba ustawić odpowiedni z. I teraz te zety w multi-obiektach popsują całe sortowanie obiektów. Czyli unity 2D nie nadaje się do gier z kamerami od "góry".

3. Światła.
Światła działają ok, ale raczej w grze 3d.
Poza tym wystarczy 100 drzewek i 4 światła żeby zabiły wydajność do 60FPS. Ten sam efekt ( nawet lepszy )  robię w XNA z 650 drzewami i 17 światłami.

No i wystarczy ze mam 2 sprajty nachodzące na siebie z tymi samymi zetami, a dostaję podświetlone miejsce ich łączenia przy światłach.

4. Particle.

Super sprawa można przygotować szybko fajne efekty. Ale jakoś nie udało mi się jeszcze zrobić żeby działały bez użycia osi z.  No i brak im jest Sorting Layer w inspektorze czyli stawiają się zawsze z tyłu.  Widziałem jak w przykładowej grze sobie pomagają skryptem. Ale to nie tędy droga.

5. System koordynatorów.

Tu się bez bicia przyznam że nie umiem zmienić w unity tak, żeby  góra osi Y była malejąca, tak jak ma to miejsce w XNA.  Dość mocno jest to irytujące ( pewnie kwestia przyzwyczajenia ).
Ale jeszcze gorsze jest to, ze nie ma żadnego wsparcia w pozycjonowaniu obiektów.  Brak ustawianej siatki, brak wyrównań, brak przełożenia  metrów (uu) na pixele.
Po co mi w 2D ustawiać pozycję 3.12345 to ja nie rozumiem.




I teraz nie bardzo rozumiem, gdzie tu jest haczyk, czemu jest taki boom na to unity.
Niby wszystko pięknie z tym 2D to i tamto można zrobić, ale jak spróbujesz tego czy tamtego użyć to się poparzysz.
Powinni moim zdaniem zrobić to porządniej, a zrobili raczej na zwykłą platformówkę, bez wykorzystania świateł.
Chciałem z XNA zrezygnować, bo się boję że znając politykę M$ okaże się że XNA będzie nie do zainstalowania na przyszłych windowsach.  Stąd własnie zainteresowanie Unity , no ale z unity i jego systemem 2d  to raczej walka jak ze ścianą.

Ktoś się przesiadał na nie , też ma podobne problemy?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 25, 2013, 20:39:22
1. FPS = 60 jednoznacznie wskazuje, że zadziałał to vsync. Reklamacje zostaną uwzględnione dopiero po spadku FPS poniżej 60 (a nawet 30). ;)

2. Nie do końca jasno wynika, o czym tutaj piszesz. Masz generalnie dwa mechanizmy:
- współrzędna Z - tutaj normalnie działa Z-bufor i zasłanianie,
- kamery i layery (czy jak to się tam nazywało) - możesz każdy obiekt przypisać do danego layeru, a na scenie mieć dowolną ilość kamer, z których każda rysuje tylko wybrane layery; jeżeli zepniesz kamery żeby poruszały się razem, możesz bardzo dokładnie określić kolejność renderowania layerów

Offline Pawelx156

  • Użytkownik

# Listopad 25, 2013, 21:46:15
@Up własnie nie bo testuje z Vsync - off używając frapsa .  I z reguły jak testuję to własnie do spadku około 60 fps( wale tyle obiektów żeby zjechało fps do około 60). Sorki mój błąd, źle napisałem.

Generalnie co do drugiego punktu to chodzi o to, że unity 2D ma sortowanie  na zasadzie: Sorting layer potem dodatkowo z.  W grze  z rzutem np izometrycznym muszę sortować np drzewa i gracza na jednej warstwie po Y.  Nie mając dostępu do sortowania po Y zamieniam je na Z. 
I cały pic polega na tym ze nie mam jak sortować obiektu w obiekcie. Jak użyje z to się obiekt rozjedzie.

Mam nadzieję że troszkę zrozumialej opisałem.


Offline Kebab_u_Turka

  • Użytkownik

# Listopad 25, 2013, 21:56:16
Zanim będziesz pisał takie herezje, to proszę zapoznaj się np. z tym :

http://www.youtube.com/watch?v=4qE8cuHI93c

Że masz 60 fps'ów to moim zdaniem bardzo dobrze, a sam dodałeś, że miałeś kolizje i "inteligencje"

Offline Pawelx156

  • Użytkownik

# Listopad 25, 2013, 22:05:35
@UP
Taa tyle że do 60 FPS miałem spadek w XNA i w XNA działały kolizja + inteligencja nie w Unity. W unity były same animacje i sprajty stojące.

A co do filmiku to już go oglądałem, demko też przerabiałem.
I nie chodzi mi o pierdolę w stylu platform game ( gdzie ten system jest idealny) a o isometric game i sortowanie multi obiektów po osi Y.

Offline Kebab_u_Turka

  • Użytkownik

# Listopad 25, 2013, 22:12:20
@UP Źle zrozumiałem :D

A co do izometrii, no to sorry, ale silnik sam za Ciebie wszystkiego nie zrobi, jednak musisz pisać mnóstwo skryptów i MYŚLEĆ.

Silnik tylko zarządza i daje narzędzia, Ty musisz je umieć dobrze wykorzystać ;)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Listopad 25, 2013, 22:15:02
Cytuj
@Up własnie nie bo testuje z Vsync - off używając frapsa .
Doświadczenie podpowiada, że Windows niekiedy olewa kompletnie ustawienia VSync i i tak je wymusza. Szansa jest też, że Unity po prostu więcej FPS nie pompuje, skoro nie musi.

Cytuj
W grze  z rzutem np izometrycznym muszę sortować np drzewa i gracza na jednej warstwie po Y.  Nie mając dostępu do sortowania po Y zamieniam je na Z.
Zazwyczaj musisz sortować, jak nie masz Z-bufora. Tutaj z-bufor masz, więc możesz zrobić to w sposób klasyczny 3D.

Offline Veldrin

  • Użytkownik

  • +3
# Listopad 25, 2013, 22:18:47
Na przyszłość jak rzucasz wynikami testów wydajnościowych to dodawaj proszę informacje o platformie testowej. Bez tego dane nie mają żadnej wartości!

Nie wiadomo czy uruchamiałeś to na swojej lodówce, czy nowym desktopie.

Offline Pawelx156

  • Użytkownik

# Listopad 26, 2013, 11:38:00
@UP

Co do platformy testowej to:
Procesor: Intel i5 750 2.67 GHz
4GB ramu
Grafika Gigabyte GF GTX 460

A co do testów to zrobiłem na mniejszej animacji i wypada to tak:

Dla XNA
220 Tysięcy obiektów w poziomie i ponad 13 Tysięcy animowanych obiektów widocznych na scenie.
Spadek do 52 Fps w edytorze. W czystym poziomie jest około 70 fps.



A teraz Unity.
Tym razem poziom bez obiektów dookoła sceny. Tylko czyste animacje w liczbie 4230.
FPS 57.




I Unity ale tym razem z dodatkowymi obiektami poza renderowaniem. Obiekty są tilami nie mają żadnych dodatków.

Ilość obiektów po za sceną widoczną 160 Tysięcy.
Ilość animacji na scenie 3790 przy FPS 51.



A teraz ruszmy kamerą poza scenę
Mam 79 FPS


Animacje mają zaznaczone Culling Mode na Based on Renderers
Są też bez żadnej fizyki.


Tym razem w XNA są to tylko zwykłe animacje i nic więcej.  Nie muszę tłumaczyć że jak w XNA wyjadę poza  obszar tych animacji to FPS mi skoczy koło tysiąca.
A w unity im więcej obiektów na mapie tym startowy FPS mniejszy.


Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Listopad 26, 2013, 13:10:34
Osobiście nie kojarzę żadnej komercyjnej gry, która by miała setki tysięcy obiektów na mapie. ;)

Offline Pawelx156

  • Użytkownik

# Listopad 26, 2013, 14:32:54
Nawet pomińmy fakt, że ciężko jest uzyskać 160K obiektów ( mój max to 69K na poziom). W unity wystarczy że animacje tego potworka będą porozrzucane  po poziomie, nawet nie muszą być wyświetlane, a max takich animacji to 13K ( tysięcy) i  fps nie podnosi się powyżej 50.  I nie ma znaczenia że aktualnie obszar kamery jest zupełnie pusty.
Czyli mam 13K animacji na poziomie, zero innych obiektów i  jest zonk.  A akurat w strategi itp możne być od  groma jednostek animacyjnych.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 26, 2013, 15:33:36
Cytuj
Czyli mam 13K animacji na poziomie, zero innych obiektów i  jest zonk.  A akurat w strategi itp możne być od  groma jednostek animacyjnych.
Tylko po co robisz te animacje, skoro niczego nie widać?

Offline Pawelx156

  • Użytkownik

# Listopad 26, 2013, 15:58:32
Tylko po co robisz te animacje, skoro niczego nie widać?
Bo wykonuje testy wydajności Unity 2D vs XNA?
I każda animacja jest podpięta do GameObject wiec one nie fruwają same. A animacje korzystają z tego czy  są widoczne czy nie. Więc skoro mogę wbić 160K tili to obiektów z animacjami powinienem móc tez tyle, bez żadnego ale.
« Ostatnia zmiana: Listopad 26, 2013, 16:03:39 wysłana przez Pawelx156 »

Offline laggyluk

  • Użytkownik
    • twitter

# Listopad 26, 2013, 16:03:34
jak chcesz robić grę 2d to na gołym unity niewygodnie ale od czegóż asset store ;p
co do fpsów to cośtam mi się przypomina że ipady i phony mają 'snapa'  do 60-30-15
w związku z czym unity może nie stara się mieć więcej

Offline steckel

  • Użytkownik

  • +1
# Listopad 26, 2013, 17:02:13
No ale co ty chcesz udowodnić? To oczywiste, że jak korzystasz z wysokopoziomowych narzędzi to będzie spadek wydajności w porównaniu do niskopoziomowych lub np. czystego OpenGL, gdyż obłsugują więcej różnych mechanizmów. Wyświetlanie tylku animacji na raz to jak dla jest sztuką dla sztuki.
Boom na Unity jest dlatego, że bardzo łatwo się w nim tworzy gry 3D. 2D też można jeśli się do tego przyzwyczaisz. Wydajność może nie jest jakaś świetna, ale wystarczająca dla średnich wielkości gier. Portowania z Unity odbywa się bez problemów. Bardzo podoba tez mi się to, że przy zmianach nie trzeba za każdym razem przekompilować projektu, tylko można użyć podglądu.