Jakie są zalety / wady Unity3D jako wyboru do tworzenia gier? [Zamknięte]

64

Robimy nasz szkolny projekt z Unity3d, ponieważ używali Shivy w poprzednim roku (co wydaje mi się okropne), i chciałem poznać twój punkt widzenia na to narzędzie.

Plusy:

  • na wielu platformach, słyszałem nawet, że Google zamierza wdrożyć go w Chrome
  • wszystko czego potrzebujesz jest tutaj
  • języki skryptowe sprawiają, że jest to dobry wybór dla osób, które nie programują guru

Cons:

  • multiplayer?
  • zastrzeżony, jesteś całkowicie zależny od jedności i jej granicy i nie możesz jej przedłużyć
  • mniej znaczy „tworzenie gry od zera”
  • C ++ byłoby fajną rzeczą

Naprawdę uważam, że tego rodzaju narzędzie jest interesujące, ale czy warto używać go w szkole do projektu obejmującego więcej niż 3 osoby programujące? Czego tak naprawdę uczymy się w zakresie programowania przy użyciu tego rodzaju narzędzia (nie mam nic przeciwko Python i js, ale nienawidzę C #)? Zamiast tego moglibyśmy użyć Ogre, nawet gdybyśmy uczyli się bezpośredniego x od stycznia ...

żart
źródło
Kolejną wadą jest to, że musisz znać modelowanie / projektowanie 3D, ale kolejne spojrzenie na stronę i to nie wydaje się tak. Ponieważ gry 2D są możliwe
Johnny Quest
1
@Johnny Quest Po prostu nie do końca to, do czego było przeznaczone, może sprawić, że korzystanie z niego będzie niezręczne.
Spooks
7
„C ++ byłoby fajną rzeczą” - poważnie, co? Pisanie w C ++ jest teraz „fajne”? Osobiście nienawidzę języka (pisanie, Python przez całą drogę: p), ale z pewnością jest to świetna funkcja językowa i biblioteka.
Kaczka komunistyczna
1
Unity to niesamowity silnik, ale ... Kilka wad, o których należy pamiętać: 1) Unity ma tendencję do przypominania świni. Zajmuje więcej pamięci, niż myślisz; prawdopodobnie z powodu buforowania takich rzeczy jak tekstury. Może to powodować problemy z debugowaniem, a nawet błędy OOM na urządzeniach mobilnych. 2) Problemy z wydajnością mogą być trudne do zlokalizowania, rozwiązania i naprawy, ponieważ masz do czynienia z czarną skrzynką (bez kodu źródłowego). Przyjrzyj się dokładnie swoim shaderom i obserwuj, jak zarządzasz sceną.
milkplus
2
@milkplus: dlatego uważam, że jedność nie jest tym, z czego uczeń powinien się uczyć. przykład: Mogę uczyć ucznia o programowaniu, na początku ucząc go Pythona, ale w pewnym momencie musisz nauczyć go, jak działa poziom, nawet podstawy. Ludzie powinni korzystać z narzędzia, gdy wiedzą wszystko o jego działaniu. Jeśli nie, to katastrofa czeka. Nie zawsze możesz uzasadnić cytat Knutha czymś tak złożonym jak jedność.
Jokoon

Odpowiedzi:

66

Głównym „pro” Uinty3D jest to, że jest szalony szybko. Nie mówię tu o wydajności, ale o szybkości programowania. Ty masz:

  • Potok ujednoliconego zasobu. W ogóle nie trzeba tracić czasu na podsystem zasobów, nie ma żadnych wadliwych procedur importowania do napisania i naprawy: wystarczy upuścić plik do folderu i działa.
  • Zintegrowany edytor poziomów. Nie musisz tracić czasu na narzędzia poziomu: po prostu przejdź do pracy.
  • Świetna obsługa poprawiania i debugowania: wszystkie zmienne w grze są wyświetlane w trakcie gry i można je również zmieniać w locie - a wszystko to bez pisania ani jednego wiersza kodu. Wstrzymaj grę w dowolnym momencie lub krok po kroku wypisz jedno zdanie.
  • Całkiem kompleksowa biblioteka gotowych komponentów. Renderowanie, dźwięk, fizyka, sterowanie - napisano już dużo kodu „płyty grzewczej”.
  • Mono jako host skryptów. Podczas gdy można spierać się o zalety C # jako języka, biblioteka bazowa klasy Mono oferuje bogactwo funkcji. Kolekcje, operacje wejścia / wyjścia, wielowątkowość i niesamowicie ekspresyjny LINQ znacznie przyspieszają rozwój.

Ponadto Unity3d jest naprawdę dobry na wielu platformach. Oczywiście nie można stworzyć, powiedzmy, gry Windows .exe, a następnie magicznie sprawić, by „po prostu działała” na iPhonie; ale Unity bardzo się do tego zbliża. Wymagane jest „podkręcenie” bardziej niż „przeniesienie”.

Oczywiście w niektórych przypadkach Unity3D nie jest idealny. Sieciowy multiplayer zintegrowany z Unity jest OK dla niektórych peer-to-peer LAN, ale wszystko, co wymaga centralnego serwera, wymaga napisania całego kodu sieciowego od zera. System GUI Unity jest dość dziwaczny i wolny, więc tworzenie skomplikowanych GUI w grze jest uciążliwe. Jednak wszystkie inne systemy GUI gier, które widziałem, są również bolesne, więc jeden z Unity nie jest wcale taki zły.

I oczywiście Unity3D jest nieco mniej elastyczny niż „silniki gier”, takie jak OGRE, które oferują tylko bibliotekę / kod źródłowy. Jego wydajność nie jest na najwyższym poziomie, a ponieważ masz tylko piaskownicę skryptową, nie możesz użyć sprytnych hacków niskiego poziomu, aby go poprawić. Na przykład, jeśli wbudowany moduł renderujący drzewa Unity z jakiegoś powodu Cię nie zadowoli, nie możesz napisać własnego (dobrze, możesz, ale działałoby to za pomocą skryptów i najprawdopodobniej działało by zbyt wolno i powodowało problemy ). W Unity można jednak zrobić wszystko, o ile nie masz nic przeciwko utracie wydajności.

Największym „oszustwem” Unity3D jest jednak kontrola źródła. Jak już wspomniano, własny serwer zasobów Unity kosztuje dość grosza. I to jest naprawdę do kitu. Nie ma nawet rozgałęzień. Podczas gdy Unity3D teoretycznie obsługuje systemy SCM innych firm, korzystanie z nich jest również niebezpieczne. Widziałem, jak ustawienia importowania „magicznie” zmieniają się po zatwierdzeniu SVN lub parametry wszystkich obiektów znikają po użyciu Perforce. Wszystko to można obejść, ale i tak Unity3D + Kontrola źródła = ból.

Tak więc, aby odpowiedzieć na twoje pytanie. Wierzę Unity3D jest jednym z najlepszych, jeśli nie najlepszy, wybór silnika gry dla „małej” gry. Zwłaszcza na etapie prototypu.

To powiedziawszy, jeśli mówimy o projekcie edukacyjnym, odradzam go. Aby dowiedzieć się, jak działają gry, lepiej napisać jedną na jak najniższym poziomie. Silniki gier są doskonałym narzędziem; ale aby użyć go do maksymalnych korzyści, trzeba zrozumieć, jak działają i dlaczego działają w ten sposób. A najlepszym sposobem, aby się tego nauczyć, jest napisanie własnego silnika gry - nawet jeśli ostatecznie okaże się kiepski.

Nieważne
źródło
3
zacytuję „Potok ujednoliconego zasobu. W ogóle nie trzeba tracić czasu na podsystem zasobów, nie ma żadnych wadliwych procedur importowania do pisania i naprawy: wystarczy upuścić plik do folderu i to działa”.
nkint
7
a „największym„ oszustwem ”Unity3D jest jednak kontrola źródła.”
nkint
2
i „To powiedziawszy, jeśli mówimy o projekcie edukacyjnym,„ odradzam ”.
nkint
O twoim problemie z „drzewkiem”. Myślę, że esepcially w C #, możesz napisać gen drzewa C ++, umieścić go w .dll i traktować jako zarządzany c ++. Możesz więc teoretycznie uzyskać dostęp do własnych „poprawek silnika” w jedności.
daemonfire300
Przyznaję, że system Unity GUI 2.0 to nic innego, jak system „renderowania prostego z tekstem”, ale można go bardzo łatwo rozszerzyć. Spójrz na @AffinityUI lub inne projekty Unity UI, które są bardzo lekkie, open source i sprawiają, że system interfejsu użytkownika jest wart.
daemonfire300
28

Zacznę od komentowania twojej listy:

  • Skrypty to nie tylko korzyść dla nie-programistów. Bycie (dobrym) programistą to coś więcej niż znajomość języka, to umiejętność dekonstruowania problemów i myślenia w określony sposób. Języki skryptowe mogą pozwolić programiście wykorzystać umiejętności krytycznego myślenia wyższego rzędu w celu uzyskania mocniejszych, bardziej interesujących wyników w krótszym czasie, niż on lub ona może potrzebować do uzyskania równoważnych wyników, jednocześnie martwiąc się o szczegóły niższego poziomu niż niektóre języki (C ++ przychodzi na myśl) siła na zdjęciu.

  • Wsparcie dla wielu graczy (lub jego brak) to problem w taki czy inny sposób, jeśli twój projekt tego potrzebuje.

  • Nie rozumiem, jak „zastrzeżony” jest oszustwem. Jeśli jest to projekt szkolny, prawdopodobnie nie będziesz chciał spędzać czasu na hakowaniu źródła używanego frameworka lub czegokolwiek innego. Poza tym DirectX jest również zastrzeżony.

  • Nie ma absolutnie nic złego w korzystaniu z ram wyższego poziomu lub narzędzi takich jak Unity. „Tworzenie gry od zera” jest nieosiągnięciem - co dokładnie uważasz za „od zera”? Nadal będziesz używać czyjegoś interfejsu API grafiki. Środowisko wykonawcze innej osoby (nawet C wymaga biblioteki wykonawczej). „Tworzenie gry” zyskuje szacunek, a nie „tworzenie gry bez użycia przydatnych narzędzi”.

  • C ++ będąc „fajną” rzeczą jest nieco subiektywne. Język jest bardzo często używany przez profesjonalistów w branży, ale prawdopodobnie nie z powodów, które można by pomyśleć. Jako język zaczyna się pokazywać swój wiek i może być wyjątkowo niewygodny w porównaniu do bardziej nowoczesnych opcji. W każdym razie języki to tylko narzędzia, a dobry programista powinien być w stanie wybierać nowe ze względną łatwością.

Dużą zaletą korzystania z Unity w szkolnym projekcie jest to, że jest to platforma wysokiego poziomu z dużą ilością pracy infrastrukturalnej już dla Ciebie - pozwoli ci to skoncentrować się na grze, a nie na budowaniu podstaw. Prawdopodobnie masz stosunkowo ograniczone okno do produkcji tej gry, więc im więcej możesz wykorzystać istniejące narzędzia, tym więcej czasu będziesz musiał stworzyć logikę lub zasoby, które są specyficzne dla twojej gry i sprawią, że gra będzie wyglądać i działać bardziej kompletny - istnieje krzywa uczenia się dla Unity, ale ostatecznie masz do dyspozycji znacznie więcej.

Wadą jest to, że potencjalnie pochłaniasz czas na naukę konkretnego narzędzia, które obejmuje wiedzę, która może nie być przekazywalna, szczególnie jeśli zdecydujesz, że przepływ pracy i środowisko Unity po prostu nie są dla Ciebie i nigdy nie będziesz chciał z nich korzystać ponownie . Ponadto Unity nie ma najbardziej oczywistego przepływu pracy 2D - jest bardzo skoncentrowany na grach 3D, które wiążą się z dodatkowymi kosztami w zasobach sztuki. Ale myślę, że w przypadku szkolnego projektu, który opisujesz, Unity jest całkiem dobrym wyborem.

Josh
źródło
13
zacytuję „Tworzenie gry”, co zyskuje szacunek, a nie „tworzenie gry bez użycia przydatnych narzędzi”.
nkint
2
„Nie ma absolutnie nic złego w korzystaniu z frameworków lub narzędzi wyższego poziomu, takich jak Unity.„ Tworzenie gry od zera ”jest nieosiągnięciem - co dokładnie uważasz za„ od zera ”? Absolutnie nie ma nic złego, ale dochodzi do pamiętajcie, że ludzie, którzy tworzą nowe technologie, idą na jak najniższym poziomie, na przykład Uncharted 2 nawet używał wewnętrznego API zmodyfikowanej grafiki.
concept3d
1
Każdy programista, który chce być absolutnie nowatorski w dziedzinie grafiki komputerowej, musi skoncentrować się na najniższym poziomie i stworzyć własny silnik w swojej grze; ale wydaje się, że jest to około 1% wszystkich twórców gier. Gdyby firma tworzyła grę tak zaawansowaną jak Uncharted 1, w momencie pojawienia się Uncharted 3, prawdopodobnie używałby istniejących ram (niekoniecznie Unity). Pytanie brzmi: czy tworzysz Uncharted 4?
Katana314
9

Jednym z głównych problemów z Unity jest kontrola źródła. Jeśli nie pracujesz w zespole, nie będzie to miało większego znaczenia (prawdopodobnie), ale prawdopodobnie tak nie będzie.

Możesz korzystać z Unity Asset Server, ale wymaga to 1) Unity Pro (1500 USD) i 2) licencji Asset Server na stanowisko (500 USD). Zakładam, że możesz uzyskać jakąś zniżkę edukacyjną, ale nie jest za darmo.

Alternatywnie możesz użyć czegoś takiego jak SVN z Unity. Aby właściwie go obsługiwać, nadal potrzebujesz Unity Pro.

Nie można tak naprawdę po prostu sprawdzić w SVN nieprofesjonalnej wersji Unity i oczekiwać, że zadziała ona bezbłędnie. Ich mechanizm wiązania identyfikatorów GUID z zasobami itp. Nie jest dokładnie bezpieczny dla SCM.


Funkcjonalność gry wieloosobowej jest całkiem przyzwoita, chociaż szczerze mówiąc, nie wysłałem z nią gry. Teoretycznie po prostu dołączasz widoki sieciowe i mówisz, co chcesz serializować, aby poprawnie skonfigurować replikację. Stamtąd jest trochę pracy z interfejsem użytkownika, aby połączyć się z innymi urządzeniami równorzędnymi i skonfigurować. Jednak w większości jest to peer-to-peer. Możesz być w stanie wykonać programowanie klient / serwer działające w trybie bezdźwięcznym, ale nic z tym nie zrobiłem. Ale nakłonienie osoby A do biegania po ekranie osoby B jest dość łatwe i szybkie.

Również C # jest dodatni, jeśli o mnie chodzi. LINQ jest bardzo ekspresyjny. Ma odpowiednią obsługę wyjątków i wyrzucanie elementów bezużytecznych. Ma znacznie bardziej nowoczesne paradygmaty, takie jak delegaci, lambdy, interfejsy i lepsze wsparcie ogólne niż C ++. ( Edycja : jest to oczywiście kontrowersyjne. Chodzi mi o to, że C # nie jest wcale złym językiem. Nie chcę wdawać się w długą debatę na temat zalet i wad języka vs. C ++.)

Jednak największą zaletą korzystania z Unity jest prawdopodobnie sztuka. Możesz wziąć plik PSD lub Max (zakładając, że masz zainstalowany program 3ds max) w folderze i zostanie on zaimportowany.

Tetrad
źródło
3
@DeadMG, tak, naprawdę bardzo dobrze. Tak, wiem o doładowaniu, metaprogramowaniu szablonów itp. Ale uważam, że C # jest bardziej nowoczesnym językiem.
Tetrad
3
@DeadMG Myślę, że chodzi o to, że C # jest niezwykle płynny w wielu przypadkach użycia, że ​​C ++ pozostawia wiele do życzenia. Nie to, że C ++ nie może robić tych rzeczy.
Nate
3
Jedyną rzeczą na jego liście, z którą mógłbym się nie zgodzić, było „lepsze ogólne wsparcie niż C ++”.
Kylotan
1
@Kylotan "for (vector <vector <int>> :: iterator iterator = score.begin (); iterator! = Score.end (); iterator ++) {" VS "foreach (var scoreset in score)" .. .yup, jestem z C #.
Katana314
3
@ Katana314 Oczywiście w C ++ 11: for ( auto x : xs ).
Eric
6

Aktualizacja: Unity oferuje teraz wszystkie te funkcje, nawet w wersji darmowej, więc zignoruj ​​odpowiedź poniżej.


Coś wartego odnotowania - jeśli korzystasz z darmowej wersji Unity3D, nie będziesz w stanie korzystać z kilku efektów, w tym shaderów do przetwarzania końcowego (takich jak Bloom) i, co ważniejsze, dynamicznych cieni. Te oczywiście nie będą miały większego wpływu na przebieg pracy w projekcie, ale nakładają ograniczenia na to, co można osiągnąć za darmo dzięki silnikowi.

Michael Younkin
źródło
1
To nie jest już dokładne i powinno zostać zaktualizowane lub usunięte.
MichaelHouse
@ Byte56 Thanks. W przyszłości powinieneś być w stanie samodzielnie aktualizować stare posty bez konieczności komentowania.
Michael Younkin
Odpowiedziałem na flagę, by usunąć tę odpowiedź, i nie sugerowałem, żebyś ją zaktualizował, żeby powiedzieć, że nie jest już dokładna. Sugerowałem, abyś zaktualizował go, aby był dokładny, lub go usunął. Ta odpowiedź nie odpowiada obecnie na zalety i wady Unity 3D jako wyboru. Jestem pewien, że możesz znaleźć sposób, aby go zapisać. (Możesz go zaktualizować, aby zawierał wszystkie funkcje, które teraz zapewnia Unity, i te, których nie oferują za darmo).
MichaelHouse
3

Odpowiedź Neverminda omawia wszystko dość dokładnie, ale po prostu po to, by wpaść na kontrolę źródła, nie jest to wcale takie straszne, gdy nauczysz się szukać garści gotchas:

  • Po pierwsze, tak, Asset Server jest drogi i dość okropny do wszystkich zastosowań poza podstawowym. Jego główną zaletą jest integracja z Unity, i chociaż jest to cenne ze względu na łatwość użycia i warto w prostszych projektach, dla wszystkiego większego (co zwykle byłoby projektem z budżetem na AS), po prostu nie jest wystarczająco elastyczne.
  • Przechodząc do zewnętrznej kontroli wersji, ważne jest, aby pamiętać, że pliki meta muszą być traktowane jak każdy inny zasób i zawsze dodawane / aktualizowane w kontroli wersji. Nie zrobienie tego jest prawdopodobne, co się stało w scenariuszu zniknięcia ustawień Neverminda.
  • Wreszcie, pracując z dowolnym systemem kontroli wersji w Unity (w tym Asset Server) komunikacja zespołowa staje się niezbędna podczas pracy z zasobami binarnymi, aby uniknąć wzajemnego narzucania się.

Jeśli chcesz uzyskać więcej informacji na temat tych punktów, napisałem jakiś czas temu na temat korzystania z git z Unity w oparciu o moje doświadczenie w niektórych dość dużych projektach Unity: http://goo.gl/ivJVR

FlintZA
źródło
Ok, wow, przepraszam nekropolię. Właśnie zauważyłem, że został zapytany (i odpowiedział) w 2011 roku! Dodałem do niego, ponieważ pojawił się w liście wiadomości o stosie wymiany gamedev w tym tygodniu .
FlintZA
Nie ma czegoś takiego jak „nekro” w SE. W tym przypadku mój komentarz. : P
Cypher
2

Tak właściwie. Obsługiwany jest tryb wieloosobowy. To po prostu kwestia wyboru serwera, na którym chcesz uruchomić grę.

Najpopularniejszym obecnie na rynku jest „SmartFox Server”, który oferuje kilka różnych pakietów, z których wszystkie są bezpłatne (do pewnego stopnia). To nic nie kosztuje, jeśli planujesz mieć określoną liczbę graczy, ponieważ każdy pakiet pozwala pewnej liczbie graczy na „darmową”.

Jeśli zdecydujesz się na aktualizację, cena dla niezależnego dewelopera jest dość wysoka. Więc ... Na dłuższą metę, jeśli masz dużo graczy na swoim serwerze, będziesz musiał pobierać opłaty za grę, zamiast przesyłać ją na stronach takich jak Download.com jako bezpłatna pełna gra. Dla niektórych może to nie stanowić problemu, ale większość z nas nie może sobie pozwolić na 2500 $ z kieszeni na serwer.

Na przykład - SmartFox pro umożliwia 20 graczy za darmo. Jeśli chcesz zaktualizować, będzie to kosztować 500 euro, czyli nieco więcej w USA, około 600-700, i to pozwala na 100 połączeń.

Kolejne ulepszenie dotyczy maksymalnej liczby graczy 500, i to 1000 euro, ale ... Nie musisz płacić 1000, płacisz różnicę.

Będziesz musiał zapłacić tylko o 500 euro więcej niż całe 1000. Ostatnie aktualizacje obsługują nieograniczoną liczbę połączeń za 2000 euro. Co stanowi prawie 3000 USD.

Tak więc, jeśli uaktualnisz z 500 połączeń, zapłacisz 1000 euro, jeśli uaktualnisz ze 100 połączeń, zapłacisz 1500 euro, i oczywiście 2000 euro, aby uaktualnić bezpłatnie.

Ponadto ten serwer jest bardzo łatwy do skonfigurowania w Unity, a na YouTube jest wiele filmów instruktażowych.

Ambo100
źródło
Pracowałem intensywnie z SmartFox Server od 2005 roku, i to bardzo dobrze. Bardzo stabilny i dojrzały.
PippoApps.com