Rentowność C#/. NET jako nowej standardowej platformy Game dev?

Od dawna C++ jest dominującym językiem programowania gier. Wiele silników 3D o jakości AAA jest dostępnych w każdym budżecie.

Moje pytanie brzmi, czy wraz z rozwojem XNA, C# i. NET framework zostały na tyle dobrze pozycjonowane, aby przejąć rolę nowej standardowej platformy do tworzenia gier? Oczywiście nieodłączny wieloplatformowy charakter frameworka XNA (Windows, Xbox, Zune) ma swoje zalety, ale czy te korzyści są wystarczająco dobre, aby zachęcić duże studia deweloperskie do przełączania się gears?

Osobiście jestem rozdarty między używaniem C# / XNA dla nowego projektu, a używaniem Javy przez jMonkeyEngine. Mam wielkie pragnienie, aby moja gra była przenośna na wiele platform, a jedynymi językami, które znam wystarczająco dobrze, aby to osiągnąć, są C# i Java. chciałbym zobaczyć implementację kodu XNA, która jest zasilana przez OpenGL i będzie działać na Mono, ale myślę, że to tylko pobożne życzenia w tym momencie.

Jestem ciekaw, czego doświadczyli inni podczas budowanie gier 3D w czymś innym niż C++.

 23
Author: Jason Miesionczek, 2008-12-10

13 answers

Duże studia gier prawdopodobnie nie zaadoptują XNA w najbliższym czasie. Niektóre Indie go używają, ale na pewno ma potencjał, aby w końcu odnieść wielki sukces i zostawić C++ za sobą.

XNA zapewnia wiele klas, które można wykorzystać w tworzeniu gier, ale wiele innych często decyduje się na korzystanie z pełnowartościowego silnika gier. Chociaż XNA jest raczej dobre dla początkujących, aby wyciąć zęby, jeśli jesteś nowy w programowaniu gier.

C # jest dobrym językiem do tworzenia gier. Games development produkuje aplikacje, które wymagają dźwięku, zaawansowanej grafiki, sztucznej inteligencji, fizyki itp. Wszystko to wymaga potężnego i dość szybkiego środowiska językowego. Podczas gdy większość najlepszych gier na PC i Konsole są napisane w C++, C# ma mapę drogową, która prawdopodobnie pozostawi C++ w tyle. Nadchodzące zmiany w C++0x bez wątpienia ożywi C++ na jakiś czas, ale C# wygląda na gotowego go wyprzedzić.

Jeśli naprawdę chcesz być programistą gier to zachęcam cię przynajmniej do nauki C++ i napisz własny silnik gry. Korzystanie z gotowego silnika gry jest łatwe i możesz kodować coś, co jest "w porządku", ale napotkasz wiele ograniczeń, których nie będziesz w stanie kodować. Będziesz skutecznie ograniczone do możliwości silnika gry (chyba że masz dostęp do źródła, które można następnie zmodyfikować do własnych upodobań).

Naucz się C++ i najlepiej OpenGL :) Gdy już poznasz OpenGL, możesz całkiem łatwo nauczyć się DirectX.

C # to bułka z masłem, gdy już wiesz C++.

 17
Author: Brock Woolf,
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
2010-08-29 15:20:26

Myślę, że C++ wyjdzie z mody w ciągu najbliższych 10 lat, tak samo jak assembly. Jestem profesjonalnym programistą gier od ponad 15 lat. Na początku lat 90-tych Wiele osób stwierdziło, że C nie jest wystarczająco wydajny do gier. Pod koniec lat 90-tych ci sami ludzie mówili, że C jest OK, ale C++ jest po prostu zbyt wolny dla aplikacji o krytycznym znaczeniu, takich jak gry. Teraz C++ jest standardowym językiem o wysokiej wydajności i ludzie twierdzą, że inne języki byłyby zbyt wolne. Tymczasem dzisiejsze mecze używaj języków skryptowych takich jak Lua, Python lub Unrealscript do logiki gier, które są dziesięć razy wolniejsze niż C# lub Java.

C++ jest znacznie szybszy, gdy robisz matematykę w grze. Wykonywanie algebry liniowej jest boleśnie wolne w C # lub Javie. Jest to jednak tylko część (10 - 25%) Gry. Jeśli chodzi o logikę gry wąskim gardłem jest dostęp do pamięci, więc użycie innego języka nie zmniejsza znacząco wydajności. Strona narzędziowa gry, która stanowi 50-80% kodu, naprawdę nie wymagaj dowolnego C++. Działa w C#, który jest wystarczająco szybki dla prawie każdego narzędzia.

Nie należy również zapominać, że C++ wywodzi się z C, który powstał na początku lat 70-tych. C++ jest więc przestarzały pod wieloma względami. Najbardziej irytującą rzeczą jest prawdopodobnie pre-procesor, który zabija przezroczystość i powoduje szalenie długie czasy kompilacji. Przeciętny najnowocześniejszy silnik C++ kompiluje się w 30-60 minut. W tym czasie można było skompilować każdy projekt C# i Java kiedykolwiek stworzony przez ludzi. Brak siebie odbicie i dynamiczne tworzenie kodu jest również wadą. Pokonanie tych niedociągnięć często kosztuje dużo czasu na rozwój.

Mimo to rozwój C++ kosztuje dużo kosztowałoby jeszcze więcej dla studia gier ryzyko niepowodzenia poprzez przejście na nową technologię, która nie jest jeszcze sprawdzona w tworzeniu gier. Jest również ważnym czynnikiem, że większość doświadczonych programistów gier używa tylko C / C++ i nie mają doświadczenia z innymi językami, które zdecydowanie zwiększ ryzyko zmiany. Z tego powodu prawdopodobnie nie zobaczysz game studios w ciągu najbliższych kilku lat przełączających się na C#. Jednak jest prawdopodobne, że studio należące do Microsoftu zrobi wielki hit z grą C# w ciągu najbliższych 5 lat, co przekona inne studia, że jest możliwe, aby tytuły AAA w C#i wtedy zobaczysz coraz więcej studiów przełączających się na C#.

Na razie moja rada to: Jeśli chcesz stworzyć tytuł wieloplatformowy AAA, nie masz innego wyboru niż C++ dla części runtime gry. Rozważ użycie C# Po Stronie narzędzia. Wydajne łączenie zarządzanego i niezarządzanego kodu jest trochę trudne, ale na dłuższą metę warto poświęcić na to wysiłek. Jeśli robisz projekt hobbystyczny lub tytuł B, w którym wydajność jest mniej ważna niż koszt/czas rozwoju, zapomnij o C++ i po prostu użyj C# do wszystkiego i poświęć trochę dodatkowego czasu na optymalizację matematyki.

 67
Author: Luppy,
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
2009-12-20 22:48:26

Podczas gdy jakiś czas temu ogłoszono XNA Professional, Microsoft wydaje się teraz skupić się na edycji Express (choć stracił "Express" w nazwie), a to wydaje się być skierowane raczej na rynek hobbystyczny niż na rynek komercyjny. Między innymi jest to w dużej mierze korzystne dla społeczności XBox 360, ponieważ teraz pozwalają programistom hobbystycznym rozwijać swoje gry na Windows i XBox 360, a następnie sprzedawać swoje gry w sieci XBox, i to jest dobra rzecz.

I ' d naprawdę uwielbiam widzieć, jak XNA nabiera rozpędu w profesjonalnym świecie, ale to się nie stanie, chyba że będzie dostępny dla innych głównych platform gier (PS3 i Wii). Problem polega nie tylko na frameworku / API XNA, ale także na wymaganiach językowych / frameworkowych, więc nie można nawet napisać gry w C#, a następnie użyć XNA na platformach Microsoft i OpenGL na innych platformach.

Profil wydajności XNA jest również skierowany do rynku hobbystycznego, a nie komercyjnego, choć wydajność wydaje się być całkiem dobrym i są imponujące dema w dziczy.

Edit:

Jeśli twoje pytanie brzmi "Czy powinienem teraz używać XNA dla mojego projektu z budżetem znacznie mniejszym niż milion", moja odpowiedź brzmi zdecydowanie tak. Wypróbuj go, jest za darmo. I jest potężny.

 13
Author: OregonGhost,
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
2008-12-10 16:33:14

Pracowałem w miejscu zwanym Newfire pod koniec lat 90-tych. przed wyczerpaniem funduszy, mieliśmy silnik, który mógł renderować wciągający świat, który miał 10 000 km kwadratowych z rozdzielczością 10 cm. Możesz dostać ogromną liczbę graczy na raz i uporczywie deformować krajobraz. Ten silnik pracował z szybkością klatek na sekundę na P200 z kartą Voodoo 2.

Większość silnika została napisana w starannie dostrojonym C++. Cały kod gry został napisany w języku C lub c++ lub Java. Miałem też kod prototypu, który może definiować zachowania obiektów za pomocą automatów push down, które mogłyby zrobić bardzo przyzwoitą sztuczną inteligencję. Nie zajęło to prawie żadnego czasu procesora. Wykonanie logiki gry zostało przyćmione przez rendering.

W pewnym momencie miałem demo gry Conwaya o życiu działającej w Javie przy użyciu naszego renderera oprogramowania. Komórki były sześcianami ułożonymi w płaszczyźnie, która pojawiała się lub znikała i zmieniała kolor w miarę starzenia się kolejnych pokoleń. Podczas gdy gra działała ze stałą szybkością generowania 4 generacji na sekundę, wyświetlacz 3D był uruchomiony z 20+ FPS, ponownie na P200 z oprogramowaniem renderer.

Więc odpowiedź nie jest definitywnie C++. Odpowiedzią, jak każda problemowa domena, jest język, który działa najlepiej w tej domenie. C++ działa dobrze w tej dziedzinie dla silnika renderującego, ale dla rzeczywistej logiki gry i zasad, wiele języków działa dobrze. Python jest świetny. C # jest świetne. Jawa jest świetna.

 10
Author: plinth,
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
2008-12-10 14:27:04

Jak wspomniano na plakacie, XNA jest obecnie ograniczony do platform Microsoft, ale nadal można używać C#,. Net i dowolnych języków programowania. NET do tworzenia gier w sposób wieloplatformowy.

Mono runtime zapewnia wieloplatformowy silnik, który może być używany do uruchamiania Twojego C# (lub kodu. NET) pod różnymi platformami komputerowymi (Windows, MacOS, Linux), a także konsolami do gier (Wii wspierane przez Novell, PS3 coming soon i Xbox360 "na własną rękę").

Jest też reklama platforma gier o nazwie Unity3D, która zrobiła cuda za pomocą Mono. Są to IDE gry, które przewyższa XNA jako środowisko rozwoju gry: fizyka, grafika, światła, modele, kolizje są obsługiwane w natywnym kodzie C++, podczas gdy cała logika gier (AI, sterowanie kamerą, widoki i tak dalej) są obsługiwane przez zarządzany kod napisany zazwyczaj w C # lub UnityScript (silnie wpisana implementacja Javascript, która daje najlepsze z obu świata: składnia Javascript, ale silne typy, które poprawiają osiągi).

 10
Author: miguel.de.icaza,
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
2009-01-02 07:43:45

Nie jestem programistą gier (chyba, że liczyć grę Reversi pisałem w Atari 6502 assembly language w ~1982), ale mam duże doświadczenie w pisaniu komercyjnych aplikacji w Assembly - > C - > Objective-C (ktoś pamięta następną kostkę?)- >C++ - > Java a teraz C#.

Nie mogę porównywać bibliotek gier, ale mam kilka przemyśleń na temat C++ kontra C#.

IMO argument dla C++ NAD C# ze względu na wydajność nie jest tak prosty, jak niektórzy chcieliby, abyś sądził. Na oprogramowanie, na którym pracuję, ma kluczowe znaczenie dla wydajności. Konkurujemy z produktami skompilowanymi do kodu natywnego (prawdopodobnie napisanymi w C / C++ / Assembly) i wygrywamy na wydajności do tego stopnia, że nasi konkurenci używają nawet własnego oprogramowania do niektórych aplikacji.

Jak to możliwe skoro C++ jest szybszy od C#? Z mojego doświadczenia wynika, że dla każdego złożonego systemu architektura i algorytmy są ważniejsze od języka (zakładając, że potencjał wydajność jest na tym samym poziomie-co na pewno jest z C++ i C#). Mimo, że byłem pełnoetatowym programistą C++ przez więcej lat niż używałem C#, jestem znacznie bardziej produktywny w C# niż C++. Oznacza to, że mogę poświęcić więcej czasu na refaktoryzację i doskonalenie mojej architektury i algorytmów niż mogłem wcześniej.

Teraz, czasami muszę przyznać, że kusi mnie przepisanie silnika core mojej aplikacji w C++ , ponieważ Wiem, że mógłbym sprawić, by działała szybciej i zużywała mniej pamięć. Do tej pory opierałem się tej potrzebie, ponieważ wierzę, że spadek produktywności oznaczałby, że jest tylko kwestią czasu, zanim moja baza kodowa C++ będzie wolniejsza niż tam, gdzie byłbym, gdybym został z C#.

Uważam, że to tylko kwestia czasu, zanim rozwój gry przejdzie na C# i / lub Javę i / lub jakiś inny język, który jest bardziej produktywny niż C++. Mając Javę od kilku lat, a teraz C# od kilku lat postawiłbym na C# - ale to tylko Zgadnij.

Gdybym dzisiaj zaczynał pracę nad grą, na pewno postawiłbym na Silverlight i / lub WPF. WPF jest zbudowany na Direct3D. Microsoft ogłosił już, że Silverlight 3 będzie obsługiwał sprzętowo wspomagany rendering 3D. Silverlight działa na różnych przeglądarkach i komputerach Mac. Z Moonlight działa na Linuksie. Została zapowiedziana na niektóre platformy telefoniczne. Dzięki temu, że Silverlight jest zasadniczo lekką wersją WPF (początkowo wprowadzono ją jako " WPF / E" gdzie " E " oznacza wszędzie) możesz celować Zarówno bez większego wysiłku. Możesz mieć lekką wersję (darmową lub obsługiwaną przez reklamy) swojej gry za pomocą Silverlight w przeglądarce i prawdziwą ofertę dla poważnych graczy, która korzysta z WPF i działa w systemie Windows.

Jeszcze lepiej, być osobą do stworzenia doskonałej biblioteki gier, która pozwala na łatwe kierowanie zarówno WPF i Silverlight 3 (lub Silverlight 2, jeśli nie potrzebujesz sprzętowo wspomaganego 3D rendering).

Chociaż nie widziałem oficjalnej zapowiedzi, trudno uwierzyć, że nowa generacja XBox nie będzie obsługiwać Silverlight. Oczywiście nie szukałbym go na systemach Do Gier Sony lub Nintendo.

 10
Author: Joe Erickson,
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
2009-02-15 20:45:35

Myślę, że jest jakiś BS elitaryzm, który zdarza się, gdy ludzie mówią o XNA lub java game framework lub pygame lub cokolwiek innego. Tak, profesjonalne domy gier będą używać C++ przez długi, długi czas. Ale Atmospherian pyta o coś dla własnego projektu, więc zakładam, że jest amatorem (gdyby był prezesem Epic czy coś to wątpię, żeby tak pisał)

W każdym razie to, że nie mogłeś w nim zakodować FarCry, nie znaczy, że jest to bezwartościowy framework. Gry na poziomie studia wymagają milionów dolarów i dziesiątek ludzi, ale XNA / Java / pygame / etc pozwoliły amatorom robić niesamowite rzeczy. Gry Amatorskie i gry major-studio to dwie różne bestie i wymagają dwóch różnych zestawów narzędzi.

Aby odpowiedzieć na twoje pytania:

- Tak, XNA może zrobić całkiem fajne rzeczy i ludzie używali go do tworzenia fajnych gier.

- jeśli chcesz XNA być cross platform i pracować z mono, myślę, że to technicznie możliwe, ale nie wstrzymałbym oddechu.

- jeśli chcesz skończyć z pracą w branży gier, musisz nauczyć się C++.

- myślę, że droga najmniejszego oporu do uzyskania działającego wieloplatformowego silnika gry jest obecnie w pyglet. W porównaniu z Javą lub c++łatwość obsługi może się różnić szybkością.

 5
Author: Ryan,
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
2008-12-10 14:39:23

Wystarczy dodać do rozmowy ... C#/. Net jest z pewnością dostępny na innych platformach innych niż microsoft.

Pomiędzy tymi dwoma tutaj, można celować linux, mac, wii ... Jestem pewien, że gdyby było wystarczająco dużo funduszy/zainteresowania, to mono też będzie działać na ps3. W tym momencie będziesz mógł pisać dla wszystkich głównych platform gier za pomocą C# (choć prawdopodobnie nie z XNA per-se).

Również dla każdego zastanawiasz się nad wydajnością ... wiele wspaniałych rzeczy jest w pracach, takich jak nowe wsparcie Mono dla szybkiej matematyki zmiennoprzecinkowej przy użyciu rozszerzeń SIMD (x86 tylko na razie, oczywiście): http://tirania.org/blog/archive/2008/Nov-03.html

 5
Author: Joel Martinez,
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
2008-12-10 18:05:47

Dziwi mnie, że nikt nie wspomniał o możliwościach gier mobilnych. Nie widzę żadnego zarządzanego kodu konkurującego z C++ w najbliższym czasie o takie gry jak Half-Life i Halo, ale dla mniej intensywnych gier na urządzenia mobilne wygląda na to, że ma nogi.

 3
Author: annakata,
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
2008-12-10 14:44:43

Jako kontynuację tego pytania, zacząłem szukać silników 3D opartych na OpenGL napisanych w C++ (CrystalSpace, Irrlicht, Panda3D) i wszystkie wyglądają raczej solidnie. Ciekawą uwagą na temat Panda3D jest to, że jest on napisany w C++, ale głównym sposobem korzystania z niego jest Python. Wydaje mi się, że metoda dałaby to, co najlepsze z obu światów, jeśli chodzi o szybki silnik napisany w C++ w połączeniu z łatwością programowania w Pythonie. Zadam kolejne pytanie porównując te silniki. Dzięki za odpowiedzi.

 3
Author: Jason Miesionczek,
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
2008-12-13 15:07:10

Cóż, między nimi też myślę, że C# / XNA jest wyraźnym zwycięzcą w oparciu o obsługę bibliotek i naprawdę dojrzałość biorąc pod uwagę doświadczenie Microsoftu w DirectX. To powiedziawszy, nie widzę C# / XNA zastępującego C++ jako lingua franca poważnego programowania gier 3D (tj. przez duże domy programistyczne) przez bardzo długi czas, jeśli w ogóle.

 1
Author: BobbyShaftoe,
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
2008-12-10 13:48:28

To nie tylko studia do rozważenia, to publiczność. Są szanse, że tak długo, jak Sony i Nintendo są wokół, są one mało prawdopodobne, aby przenieść platformę C # / XNA. Przynajmniej w przypadku Nintendo, gdy masz atrakcyjność rynku masowego, którą obecnie robią, będą nadal dyktować swoją platformę rozwojową.

Kocham XNA, ponieważ mogę teraz pisać aplikacje dla mojego Zune, ale C++ dla szerokiej platformy programistycznej do gier będzie na długo. Może być napływem nowych twórców niezależnych dla urządzeń Microsoft, ale jesteśmy daleko od tego, aby XNA był używany na całym świecie, jeśli w ogóle.

 1
Author: Joseph Ferris,
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
2008-12-10 13:59:35

Lua powinno Cię zainteresować, ponieważ możesz osadzić go w C# i uzyskać dostęp do swoich obiektów z LuaScript.

 -1
Author: David Robbins,
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
2009-02-15 19:43:20