Wolę C / C ++ niż Unity i inne narzędzia: czy jest to tak duży minus dla twórców gier? [Zamknięte]

35

Mamy duży projekt gry wykorzystujący Unity w szkole. Pracuje nad tym 12 osób. Mój nauczyciel wydaje się być przekonany, że jest to ważne narzędzie do nauczania uczniów, ponieważ pozwala uczniom patrzeć z poziomu wysokiego na niższy.

Rozumiem jego pogląd i zastanawiam się: czy jedność jest tak ważnym motorem w firmach tworzących gry? Czy wiele firm korzysta z niego, ponieważ nie stać ich na użycie czegoś innego? Mówi, że Unity jest dużym graczem w tworzeniu gier, ale widzę, że pasuje to tylko małym niezależnym firmom, które chcą grać jak najszybciej.

Czy uważasz, że Unity ma tak duże znaczenie w branży? Czy zagraża to wartości umiejętności C ++?

Nie chodzi o to, że nie lubię Unity, po prostu niczego się z tym nie uczę, wolę robić małe kroki za pomocą Ogre lub SFML.

Mamy również ćwiczenia praktyczne w C ++, ale są to tylko ćwiczenia z teorią, nic więcej.

żart
źródło
9
Punktem C ++ i OOP jest ponowne użycie obiektu. Jedność jest tego najlepszym przykładem i przenośności między platformami. Oferują wszystkie narzędzia potrzebne do uruchomienia gry na XBox, iPhonie lub Wii. Mówisz mi poważnie, że wolisz napisać wszystko od nowa w C ++?
Stephen Furlani
2
Absolutnie nie, nie to chcę powiedzieć. Mówię tylko, że nie podoba mi się śmieci, w których jest on wysyłany, a także fakt, że nie można zmienić kodu, ponieważ jest zastrzeżony: nie można go tak mocno, jak można ulepszyć inny istniejący silnik . Twój punkt jest słuszny, ale jeśli podążę za tobą, firmy mogą również ponownie wykorzystać swój poprzedni silnik zamiast po prostu przejść na Unity. Dzięki Unity trzymasz się czegoś, czego tak naprawdę nie możesz zmienić, to zawsze jest dla mnie największą wadą, gdy myślę o takich narzędziach: silnik prawnie zastrzeżony nie ma tego problemu.
Jokoon
2
Cóż może zmienić Jedności zakładając uzyskać licencję źródłowy (co jest kosztowne, podobnie jak większość innych licencji zawodowych źródłowych). Jest również często aktualizowany, więc nie jest zbyt statyczny pod względem zestawu funkcji.
Tetrad
Jest to w zasadzie pytanie „jakiej technologii użyć”. Również jest bardziej zorientowany na dyskusję / opinię. Niestety nie mogę zagłosować na zamknięcie po raz drugi ...
bummzack

Odpowiedzi:

34

Jedność jest w tym kontekście doskonale poprawnym rozwiązaniem. Wyobraź sobie, że sekundę ma 12 osób, z których większość wciąż uczy się C ++, pisząc przy użyciu dużej i złożonej aplikacji do gry. W czasie samego debugowania prawdopodobnie będziesz w stanie napisać kolejną grę w Unity.

Nie twierdzę, że umiejętność korzystania z C ++ nie jest ważna - szczególnie, jeśli planujesz dołączyć do głównego nurtu branży gier. Ale być może Twój instruktor ma rację w tym przypadku - wykorzystaj ten projekt jako doświadczenie edukacyjne w zakresie myślenia o tworzeniu gry i baw się dobrze. W tym procesie staraj się doskonalić swoje umiejętności C ++ za pomocą ćwiczeń, a nawet posunąć się do pisania w międzyczasie małych gier przy użyciu SFML lub innej podstawowej struktury.

Kiedy to wszystko się skończy, wiele się nauczysz, prawdopodobnie staniesz się lepszym programistą, a twój następny projekt można rozwiązać w C ++ z większą pewnością.

James
źródło
2
Co ciekawe, istnieją szkoły, które uczą wyłącznie języka C ++ i oczekują, że uczniowie zbudują od podstaw cały silnik gry i grę, mimo że nadal uczą się języka C ++. Oczywiście faktyczne ćwiczenie umiejętności polega na tym, jak się ją uczy (nie wykłady klasowe i małe projekty domowe, przez większe projekty semestralne lub roczne) i dlatego wspomniane szkoły produkują programistów najwyższej klasy. Programiści, którzy potrafią bardzo szybko podnosić narzędzia takie jak Unity lub dowolny inny silnik. Lepiej zmusić uczniów do nauki trudnych rzeczy, ponieważ łatwe rzeczy nie będą potem problemem.
Sean Middleditch
Nie wszystkie gry są programowane, a korzystanie z Unity niekoniecznie „pozwala uniknąć trudnych rzeczy”. Podkreśla tylko inne trudne rzeczy niż wdrażanie od zera. Dał projekt raczej tego programowania. Gdyby gra została zaimplementowana od zera, oczekiwałbym znacznie bardziej prymitywnej „sztuki programistycznej”, bez postaci i fabuły.
wrosecrans
43

Jedność zyskuje na popularności w branży, głównie w mniejszych firmach. Jest to jednak doskonałe środowisko nauczania. Jest to ważne narzędzie dydaktyczne, ale niezbyt powszechne wśród głównych firm. W porządku, że tego nie lubisz.

Chciałbym jednak odnotować coś tutaj, ponieważ często widzę zamieszanie wśród studentów programowania. „Umiejętności C ++” nie są bardzo przydatne na dłuższą metę. Powinieneś szukać „umiejętności programowania” i „umiejętności projektowania”. Jeśli rozumiesz pojęcia związane z językiem programowania i sposób łączenia systemu oprogramowania, język nie ma tak naprawdę znaczenia. Nie uważam się za niesamowitego programistę, ale mogę wybrać nowy język i stworzyć użyteczny kod w ciągu jednego lub dwóch dni, ponieważ rozumiem podstawy.

Learning Unity sprawi, że będziesz lepszy w C ++.

Gregory Avery-Weir
źródło
Gameforge i BigPoint są wiodącymi firmami na świecie i używają Unity :)
daemonfire300
1
+1 za bycie bardzo dobrą odpowiedzią. Nauka silnika gry jest bardzo ważną rzeczą dla szkół, ponieważ w 99% przypadków nie będziesz go tworzyć od zera. Będąc w stanie zanurkować w istniejący silnik i rozpoznać jego części, rozpoznać przepływ danych i takie są bardzo kluczowe rzeczy. Jak wspomniano powyżej, język nie ma znaczenia, mimo że w 99% przypadków to C / C ++, ale znajomość silnika lub, bardziej ogólnie, kodu innej osoby, jest nieocenioną umiejętnością w każdej dziedzinie programowania ... zwłaszcza słowo krytyczne słowo stresujące, czyli gry wideo :)
James
1
Nie zgadzam się z tą odpowiedzią. Dla mnie istnieją różnice między skryptami i programistami. Programiści Unity to programiści, a użytkownicy Unity to skrypty. Rezultat jest taki sam, tworzą gry, ale na dłuższą metę używanie Unity może być problemem. Przemysł gier jest bogaty i teraz pozwala na takie narzędzia jak Unity, ale dla mnie dzieje się tak dlatego, że komputery są szybsze. więc możesz rzucić dużo kodu, to działa: Unity jest wyraźnie stworzone z myślą o szybkości programowania, coś, co rynek lubi ze względu na dolary, ale nie sądzę, że to prawdziwy plus.
Jokoon
14
jokoon: Jaka jest różnica między skryptowaniem a programowaniem? Zaawansowany użytkownik Unity pisze shadery, zarządza kolejnością renderowania i pisze kod AI. Skrypty Unity są kompilowane i można je rozszerzyć za pomocą kodowania niskiego poziomu od uczciwości do bogini. A dobre kodowanie Unity opiera się na tych samych zasadach, co dobre kodowanie Unity. Nie ma magicznej różnicy między tymi dwoma paradygmatami.
Gregory Avery-Weir
9

Czy wiele firm korzysta z niego, ponieważ nie stać ich na użycie czegoś innego?

Tak, ale „stać” to znacznie więcej niż zwykłe wartości dolara.

Tak, zestaw funkcji, które oferuje Unity Pro po koszcie, który pobierają, jest absurdalny, zwłaszcza biorąc pod uwagę fakt, że jest to licencja na miejsce zamiast licencji na tytuł.

Co więcej, jest to naprawdę łatwe w użyciu narzędzie. Nie spędzasz tyle czasu na szkoleniu artystów i projektantów, jak korzystać z potoku sztuki. Łatwo powiedzieć „po prostu przeciągnij tekstury i modele i już są gotowe.

Co więcej, jest to jedno z niewielu narzędzi, które pozwalają robić 3D w przeglądarce z dowolną regularnością. Obsługują prawie każdą platformę cieniującą, od stałej funkcji po DX9 +, a także Mac i Windows. Ta technologia sama w sobie jest nieoceniona, jeśli chcesz kierować reklamy na rosnący rynek gier opartych na przeglądarce.

Od strony programowania rzeczy, które otrzymujesz od Unity, to solidne opanowanie projektowania komponentów (w porównaniu do tworzenia własnego silnika C ++, który zwykle jest zbyt ciężki po stronie dziedziczenia), a także bardzo szybkie i wizualne środowisko do wypróbowania nasz kod gry. Mam nadzieję, że nauczysz się dobrych praktyk projektowych za pomocą Unity, które możesz przejąć w przyszłych silnikach C ++.

Jasne, dobrze jest mieć preferencje jednego języka nad drugim. Osobiście wolę C # niż C ++. Ale to, jakiego języka używasz, jest bardziej zależne od wymagań projektu niż cokolwiek innego. Deweloperzy nie mogą sobie pozwolić na bycie fanem, ponieważ nie chcesz zablokować się na rynku, ponieważ z jakiegoś powodu nie lubisz narzędzi lub języka.

Poza tym, kiedy naprawdę nauczysz się drugiego języka, zobaczysz, że przeważnie jest to po prostu wybieranie nowej składni i paradygmatów, i naprawdę tak naprawdę nie jest trudno dodawać nowe narzędzia do paska narzędzi. Tak, powinieneś nauczyć się i rozumieć C ++, ale na wysokim poziomie musisz najpierw zrozumieć dobry projekt.

Tetrad
źródło
wyjaśnienie: Czy masz na myśli, że licencja Unity Pro jest tego warta w porównaniu do zwykłej starej Unity? Twój komentarz był dla mnie trochę niejasny.
Kyle C
7
Nie korzystałem z darmowego, tyle że licencja za 1500 USD za miejsce jest tania jak brud w porównaniu z innymi licencjami na komercyjne silniki.
Tetrad
W tej chwili nie ma problemu z korzystaniem z darmowej wersji, są tylko drobne ograniczenia.
XandruCea,
9

Z tego, co widzę, głównym problemem nie jest C ++ ani Unity3D, ale raczej potrzebujesz rozwiązania wysokiego poziomu lub rozwiązania niskiego poziomu .

Rozwiązanie niskiego poziomu to takie, które zabrudzisz procesami przekazywania danych wejściowych, zarządzania pamięcią lub ładowania modeli. Rozwiązaniem wysokiego poziomu jest jeden zgrabny pakiet, taki jak Unity3D.

Dla mnie to, czy korzystać z Unity3D (lub innego silnika gry), czy C ++, zależy od celów twojej gry i projektu.

  • Użyj Unity3D, jeśli czas programowania musi być szybki i / lub twoja gra nie wymaga dużej wydajności lub nie ma wysokiej wydajności graficznej / obliczeniowej. Jeśli chcesz skoncentrować się na grze, a domyślne narzędzia Unity3D są w porządku, możesz rozważyć użycie Unity3D

  • C ++ z innymi bibliotekami, jeśli masz dłuższy czas programowania, gra wymaga więcej mocy obliczeniowej / graficznej lub wykorzystuje technologię, której Unity3D nie może zastosować.

Zaletą Unity3D jest to, że nadal wykorzystuje języki skryptowe, które odzwierciedlają rzeczywisty rozwój (C # lub JavaScript). Wyuczone koncepcje OOP i inżynierii oprogramowania (singletony, elewacje, automaty stanów, dekoratorzy, kompozycje) można zastosować w Unity3D. Pomaga zadbać o procesy usuwania plików cookie, takie jak zarządzanie zasobami, wykres scen, ładowanie modelu, renderowanie, zapisywanie scen itp. Jeszcze lepiej, jeśli potrzebujesz funkcji, których nie zapewnia Unity3D, możesz to zrobić Kodowanie DLL.

Gdzie to pozostawia C ++? C ++ jest językiem i istnieje wiele koncepcji programowania, które możesz zrobić w C ++ w Unity3D, bez zarządzania pamięcią lub być może w szablonach (w Unity 3.2 specyfikacje języka poprawiły się, na przykład, na zamykanie).

Jak już wspomniałem, tak naprawdę nie jest to C ++ vs. Unity3D. To bardziej „C ++ plus biblioteki / SDK lub stwórz własny silnik” vs. Unity3D. To zależy od twoich celów. W przypadku wysokiej klasy gier lub gier, w których potrzebujesz kontroli nad strumieniem renderowania lub danymi wejściowymi, możesz użyć C ++ plus silnika, który pozwala na bałagan pod maską. Jeśli nie, wybieram Unity3D jako domyślny wybór gier 3D.

Jednak wiedza na temat Unity3d nie jest pod wrażeniem, ale jest to dobre miejsce, aby rozpocząć naukę ogólnego procesu tworzenia gier. Na przykład prawdopodobnie będziesz potrzebować semestru nauki, aby napisać renderer i załadować model w OpenGL, a także podstawowy scenariusz i dane wejściowe. Zrobisz to w Unity3D w niecały dzień.

Extrakun
źródło
lub pracuj z Ogre3d!
Jokoon
Ostatni raz pracowałem z Ogre3D dawno temu; Myślę, że przygotowanie gry wymaga więcej pracy niż Unity3D i jest to dobry środek, aby rzucić okiem na to, jak działają rzeczy pod maską.
Extrakun
+1 na tym. Nie możesz preferować C / C ++ i Unity per se, ponieważ jest to jabłko i pomarańcze. To, co możesz preferować, to pomysł pracy na niższym poziomie rozwoju zapewnianym przez C / C ++ lub wyższy poziom, na który zezwala Unit.
Tim Holt
8

Nie, Unity3D w żaden sposób nie zagraża umiejętnościom w C ++. W rzeczywistości znajomość C ++ jest o wiele ważniejsza dla programisty gier.

Unity3D to naprawdę świetne narzędzie do tworzenia gier. Bardzo mi się podoba i poleciłbym go do prawie każdej gry, szczególnie dla małych drużyn. Ale sam Unity3D jest napisany w C ++; i musisz znać C ++ (a także kilka innych rzeczy niskiego poziomu), aby naprawdę zrozumieć, jak to działa.

Nawet jeśli korzystasz z Unity3D, tylko umiejętności C ++ i zrozumienie zasad i algorytmów na niskim poziomie pozwolą ci wykorzystać go w pełni. Nawiasem mówiąc, dotyczy to również innych silników gier.

Aby wykonać naprawdę dobrą robotę, wycisnąć każdą ostatnią wydajność z wybranej platformy i wcisnąć jak najwięcej supernowoczesnych efektów i algorytmów, nie można używać niczego poza C / C ++. Prawdopodobnie z kawałkami asemblera.

Nieważne
źródło
Oto odpowiedź, na którą czekałem, aby dać +1:]
Notabene
3

O ile mi wiadomo, zależy to od platformy docelowej, gier AAA i gier konsolowych (XBOX, Wii itp.) Zazwyczaj będą w C ++, aby uzyskać maksymalną wydajność, jednak jeśli piszesz grę opartą na przeglądarce, Unity jest również często używany.

Jednak jeśli chodzi o twoje pytanie, myślę, że po prostu dotyczy to takich narzędzi, jak Unity, które zapewniają dużą, znormalizowaną platformę do pracy, która w projekcie trwającym pół roku może stanowić różnicę między częściowo wypieczonym prototypem a dość rozbudowaną grą.

Elva
źródło
3

Poszedłem na studia magisterskie na kierunku grafika komputerowa i technologia gier na Uniwersytecie Pensylwanii, gdzie realizowaliśmy wszystkie nasze projekty na najniższych poziomach, z projektami w C ++, OpenGL, CUDA itp. Nasze projekty obejmowały animację opartą na fizyce, architekturę animacji postaci i IK, reprezentujący różne formy krzywych Beziera ... wiesz, naprawdę podstawowe rzeczy, które wykorzystują wiedzę specjalistyczną w zakresie programowania, algebry liniowej i rachunku różniczkowego.

Następnie pobrałem Unity i okazało się, że wszystko, co stworzyłem, tworzyłem w tym bezpłatnym pakiecie, z którego każdy może korzystać.

Czy mnie to denerwowało? Trochę, co prawda, ale odkryłem, że posiadanie takiego zrozumienia ze szkoły czyni mnie o wiele bardziej niebezpiecznym, gdy używam narzędzi takich jak Jedność. Obecnie pracuję w grach, w których wprowadzamy gry od koncepcji na rynek za niecały rok, a ja nadal jestem typowym facetem, jeśli chodzi o „takie matematyczne rzeczy”. Moja rada dla ciebie polega na przejściu ruchów; będziesz absolutnie nieoceniony, gdy wejdziesz do branży.

mseltzer
źródło
Możesz (teoretycznie) wyciągnąć z tego odznakę . :)
Cyklop
Nie ma tu nekrozy, ponieważ pytania nie starzeją się i „umierają” jak na forach. :) Późne odpowiedzi są zawsze OK.
doppelgreener
0

Mogę spóźnić się z odpowiedzią, ale pomoże to niektórym ludziom mieć ten problem.

Początkowo jestem programistą c ++, który nienawidził korzystania z silników stron trzecich (na przykład jedności), ponieważ nie czuję się tak, jakby proces uczenia się wymagał dużo.

Po wypróbowaniu jedności natknąłem się na następujące rzeczy, które muszą mieć twórca gry: poniżej wymienię konkretnie jedność, ale wymieniam zalety korzystania z perspektywy WYSOKIEGO POZIOMU.

  1. Zrozumienie, jak projektować na wysokim poziomie, jest ważniejsze niż zawracanie głowy optymalizacjami na niskim poziomie.
  2. Silniki, które mają system architektury Entity (architektura oparta na komponentach), pomogą dowiedzieć się, jak dokładnie ta architektura będzie pomocna.
  3. Poznasz najnowszą technologię (przynajmniej terminologię) i będziesz przynajmniej na bieżąco z branżą dotyczącą grafiki. - to główny powód, dla którego postanowiłem spróbować jedności!
  4. Pomijam spędzanie czasu na różnych narzędziach do importowania zasobów. (Oczywiście nadal chętnie piszę własnych importerów 3d w c ++, ponieważ będzie więcej zabawy w wolnym czasie)

Powyżej podano niektóre z powodów wyboru silnika wysokiego poziomu. Ale jednocześnie nie powinieneś przestać uczyć się C ++ jako najbardziej wymaganego i użytecznego języka dla idealnego twórcy gier.

Najpierw zapoznaj się z wizualizacją na wysokim poziomie i zrób kilka szybkich prototypów w Unity i wykorzystaj to doświadczenie przy projektowaniu dobrej gry w c ++.

Wkrótce wrócę do c ++, ponieważ zdobyłem dobre doświadczenie na wyższym poziomie z jednością :)

Powodzenia!

Ayyappa
źródło