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 ...
Odpowiedzi:
Głównym „pro” Uinty3D jest to, że jest szalony szybko. Nie mówię tu o wydajności, ale o szybkości programowania. Ty masz:
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.
źródło
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.
źródło
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.
źródło
for ( auto x : xs )
.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.
źródło
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:
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
źródło
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.
źródło