Jak zwykle, to zależy. Choć najprostsza odpowiedź brzmi: w jakim chcesz.

Sam całkiem niedawno miałem ten dylemat. W pierwszej chwili odpowiedź była dla mnie oczywista: Java. Jestem javowcem, nie będę się musiał uczyć języka, skupię się od razu na konkretnym frameworku lub silniku i na samej grze.

Kierowanie się wygodą to nie jest optymalne rozwiązanie

Zrobiłem krótki research i wyszło, że najpopularniejszym rozwiązaniem jeśli chodzi o Javę, będzie LibGDX. Z tym, że to w sumie bardziej framework, niż silnik. Jednak nie zniechęciło mnie to, zainwestowałem nawet w kurs online i zacząłem tworzyć swoją pierwszą grę.

Pierwsze co mnie uderzyło, to, że nawyki z pisania aplikacji dla branży finansowej mogę sobie brzydko mówiąc, wsadzić… W świecie tworzenia gier, wiele rzeczy robi się po prostu inaczej. Głównie ze względu na wydajność i na znacznie większy nacisk na re używalność zasobów. To, w połączeniu z faktem, że LibGDX ma nawet własne implementacje dla standardowych kolekcji takich jak listy czy mapy sprawiło, że i tak poczułem się jakbym musiał uczyć się języka od nowa. Sporym „spowalniaczem” prac był brak edytora graficznego. W końcu to nie jest pełnoprawny silnik.

Po przerobieniu kursu zacząłem się zastanawiać, co tak na prawdę trzyma mnie przy tej Javie. Większość game developerów poleca początkującym Unity, a co za tym idzie pisanie w C# (ewentualnie w trochę przerobionym Java Scripcie). Może niepotrzebnie sobie utrudniałem?

Po zainwestowaniu w kolejny kurs, tym razem z Unity, ja osobiście stwierdzam, że tak. Niepotrzebnie sobie utrudniałem. O wiele przyjemniej mi się pracuje w tym środowisku, nawet mimo, że muszę uczyć się C# praktycznie od zera. Jednak to, że taka opcja faktycznie sprawdziła się u mnie, nie znaczy, że Unity jest jedynym słusznym wyborem.

OK, więc inne opcje?

Naturalnie C# czy Java nie są, ani jedynym, ani jednoznacznie najlepszym wyborem. Powinieneś się kierować własnymi preferencjami, sprawdzić różne możliwości i w żadnym razie nie decydować się na coś tylko dlatego, że wszyscy mówią, że tak powinieneś zrobić.

Zanim w ogóle zaczniesz myśleć o języku, odpowiedz sobie, co chcesz osiągnąć. Jeśli bardziej interesuje Cię sama technologia, dużo matematyki, fizyki i właściwie to wolisz mieć pełną kontrolę nad środowiskiem w jakim tworzysz, a sama gra ma dla Ciebie znaczenie drugorzędne – może spróbuj napisać własny silnik? Niestety jest to ścieżka, którą obecnie się nie interesuję i w ogóle nie zgłębiałem tematu. Podejrzewam jedynie, że pod kątem wydajności, a także dostępnych materiałów pomocniczych i gotowych rozwiązań, dobrym wyborem byłby C++. Jednak zaznaczam, że to tylko moje spekulacje.

Jeśli również nie jesteś zainteresowany wynajdywaniem koła na nowo, zostaje Ci druga możliwość, czyli praca przy pomocy istniejącego silnika lub frameworku. Wydaje mi się, że prędzej czy później, każdy game developer zwiąże się z jakimś silnikiem, bo na dłuższą metę jest to po prostu wygodniejsze i szybsze. Dlatego w tym wpisie skupię się na wyborze języka programowania jako konsekwencji wyboru silnika gry.

Silnik gry -> język programowania

Oto kilka propozycji, które sam brałem niedawno pod uwagę.

Unity

Jak już wspomniałem, bardzo popularny i polecany początkującym. Pozwala na tworzenie gier 2D oraz 3D. Darmowy nawet do użytku komercyjnego, póki nie przekroczymy 100 tysięcy dolarów zysku rocznie. Bardzo duża społeczność, niezliczona ilość kursów, tutoriali, dobra dokumentacja z przykładami w obu wspieranych językach – C# oraz UnityScript (coś na kształt JavaScript, dla ciekawskich, info tutaj). Unity działa na Windowsie oraz Mac OS i pozwala tworzyć na większość najpopularniejszych platform.

Unreal Engine

Główny konkurent dla Unity, czytając o nim odniosłem wrażenie, że jest postrzegany jako bardziej zaawansowane narzędzie dla „większych profesjonalistów”. Również wspiera tworzenie gier 2D i 3D. Działa na Windowsie, Macu i Linuksie. Kodujemy w C++ oraz przy użyciu tzw. Blueprints Visual Scripting. W razie zysków, jesteśmy zobligowani do zapłacenia 5% prowizji.

Cry Engine

Zdecydowanie nie polecane początkującym, zaawansowane narzędzie, które przyczyniło się do powstania takich produkcji jak Sniper: Ghost Warrior, Far Cry czy ArcheAge. Developujemy tylko na Windowsie i tylko gry 3D, pisząc w C++, C# lub Lua. Nie jesteśmy zobligowani do żadnych opłat, ani prowizji, mile widziane jest dobrowolne wsparcie w dowolnej kwocie.

Game Maker: Studio

Silnik bardzo często polecany początkującym, szczególnie w młodszym wieku. Niestety jest też kojarzony z amatorką i często nie brany poważnie, ale niech Cię to nie zniechęci, Game Maker przyczynił się do powstania wielu ciekawych produkcji. Gry piszemy w dedykowanym języku GML, jednak trzeba mieć na uwadze, że jego znajomość nie przyda nam się nigdzie indziej poza Game Makerem. Piszemy tylko gry 2D, na wszystkie popularne platformy. Nie płacimy żadnych prowizji od sprzedaży, jedynie jednorazową opłatę za za niektóre moduły- często można je kupić w promocji np. na Steamie lub w paczce Humble Bundle.

Godot

Zyskujący ostatnio coraz większą popularność, darmowy silnik z otwartym kodem. Piszemy w dedykowanym gdscript, który chwalony jest za niski próg wejścia. Obecnie (styczeń 2018) testowana jest implementacja obsługi C#. Możemy tworzyć gry 2D i 3D na wszystkie popularne platformy. Jest to stosunkowo młody silnik więc ma relatywnie małą, ale stabilnie rosnącą społeczność.

JMonkey3

To kolejna darmowa propozycja open source, w której kodujemy wyłącznie w Javie. Silnik umożliwia tworzenie gier 3D i jest dostępny na Windowsa, Maca i Linuksa. Również ma opinie przystępnego dla początkujących, jednak nie znalazłem żadnych znanych tytułów ukończonych z pomocą tego narzędzia.

Cocos2D

Bardzo popularny silnik wykorzystywany do tworzenia gier 2D, szczególnie (ale nie jedynie) na mobilne platformy. Silnik jest darmowy. Kodujemy w C++, C# lub Objective C (na iOS). W sieci znajdziemy bardzo dużo materiałów i kursów. Również polecany początkującym, choć odniosłem wrażenie, że społeczność trochę maleje i zaczyna się interesować nowszymi rozwiązaniami jak np. wspomniany wyżej Godot.

To nie jest kompletna lista

Powyżej wymieniłem jedynie silniki, które sam rozważałem pod kątem nauki tworzenia gier. Podsumowałem je na podstawie tego co sam wyczytałem w internecie, ale ostatecznie, brzydko mówiąc, zmacałem tylko Unity. Więc nie traktuj tego jako wyroczni, a jedynie jako punkt startowy do własnych poszukiwań.

Pamiętaj też, że jeśli nie przemawia do Ciebie żadna z propozycji silników gier, na rynku istnieje sporo dobrych frameworków, które również zrzeszają wokół siebie duże społeczności. Jeżeli wolisz zacząć od czegoś prostszego i bardziej skupić się na pisaniu kodu, rozważ te propozycje: LibGDX (Java), PyGame (Python), Phaser (Java Script).