Dzisiejszy materiał stworzony specjalnie dla tych, którzy chcą podjąć się dużo większego wyzwania, niż tworzenie gry 😱! O wiele trudniejszym zadaniem dla programisty niż tworzenie gier jest...tworzenie silnika do gier 🧨! W tym artykule przedstawię Ci mój własny punkt widzenia co nasz silnik gry powinien w sobie mieć oraz na co trzeba być przygotowanym, aby miał jakiekolwiek zainteresowanie wśród osób, które chciałyby tworzyć w nim gry 🎮! Pomyślałem, że mimo faktu iż nigdy nie brałem się za stworzenie własnego silnika gry, będę w stanie przekazać jakieś cenne rady gdyby ktoś się podjął takiego wyzwania 🌟!

CO TRZEBA WIEDZIEĆ, ZANIM ZABIERZEMY SIĘ ZA TWORZENIE SILNIKA DO GIER?

Treść skupia się na etapie przystępowania do pracy nad tworzeniem własnego silnika i będzie dotyczyła tego, co w mojej ocenie jest istotne, aby tak poważny projekt miał szansę na zyskanie grona zainteresowanych osób ⚠️. Na początek jedna ważna kwestia 🫵!

CO JEST NAJWAŻNIEJSZE W TWORZENIU SILNIKA DO GIER?

Najważniejsza przy tworzeniu własnego silnika do gier jest świadomość, że to przedsięwzięcie będzie o wiele cięższe, niż stworzenie gry 💀! Gra posiada określone, konkretne cechy "uformowane" w jednym projekcie. Innymi słowy, jedna gra reprezentuje jeden tytuł ➡️. Silnik gry to "fabryka" tych tytułów, a to oznacza, że jeden program odpowiada za wiele tytułów 😮!

To z kolei przekłada się na morderczą ilość pracy jaką musisz włożyć w projekt 😰. Tam, gdzie grę tworzysz X czasu, przy silniku gier wyjdzie Ci kwadrat tego czasu ⌚! Niezależnie od tego, jak daleko sięgają Twoje ambicje, musisz wczuć się w osobę, która chciałaby skorzystać z Twojego przyszłego narzędzia i zadać sobie pytanie "co bym chciał(a) w nim zobaczyć?" 💡. A to oznacza uwzględnienie jak największej części grupy docelowej 👨‍👩‍👧‍👦!

Oprócz tego, musisz się liczyć z uwzględnieniem różnych scenariuszy. Na przykład czy masz przemyślane takie zagadnienia 👇:

  • Jaki gatunek mają reprezentować gry pochodzącego od tego silnika?
  • W jaki sposób te gry mają być tworzone: pisanie kodu czy korzystanie z gotowych bloków ("drag and drop")?
  • Czy koncentrujemy się na tworzeniu gier dwuwymiarowych, a może trójwymiarowych?
  • Jakie okna powinny się znaleźć w edytorze?
  • Jakie platformy docelowe powinny być wspierane?

Zobacz jak bardzo kilka ważnych pytań potęguje powagę sytuacji 💥. Tworzenie silnika do gier to ogromna odpowiedzialność wzięta na siebie na całe lata, a może nawet dekady 😱! Rozpoczęcie prac nad własnym narzędziem do tworzenia gier, które ma mieć choć cień szansy na bycie konkurencyjnym wśród znanych silników, takich jak "Unity", "Unreal Engine" czy "Godot", musi to być bardzo skrupulatnie przemyślana i zaplanowana decyzja ⚠️!

A zatem, gdy przeczytałeś(-aś) moje ostrzeżenie i przyjmujesz do wiadomości, że praca silnikiem do gier może trwać nawet kilkanaście lat 😳, możemy przejść do meritum ⏩.

CO POWINIEN ZAWIERAĆ W SOBIE TWORZONY SILNIK DO GIER?

Oto punkty, które moim zdaniem są kluczowe, aby tworzony przez Ciebie silnik do gier miał szansę na potencjał na przyszłość 👇:

  1. posiadanie bogatej dokumentacji API i licznych samouczków jak poruszać się po interfejsie,
  2. możliwość swobodnego dostosowywania silnika od strony wyglądu, układu okien i konfiguracji skrótów klawiszowych,
  3. dążenie do jak najkrótszych czasów wczytywania projektu, edytorów i uruchamiania testów gry,
  4. wspieranie języka programowania i możliwość modyfikacji gry od strony kodu źródłowego,
  5. zapewnienie pełnego wsparcia na kluczowe platformy docelowe (PC, HTML5, smartfony i konsole),
  6. regularne aktualizowanie silnika.

A teraz rozwinę każdy z tych punktów 🔁!

ZADBAJ O DOKUMENTACJĘ I SAMOUCZKI DO WŁASNEGO SILNIKA DO GIER

To jest fundament 🎯! Aby móc poruszać się po silniku, najpierw trzeba się dowiedzieć jak. Ty jako twórca będziesz doskonale znać swoje narzędzie od podszewki, natomiast najbardziej liczą się ludzie z zewnątrz 🫵! Jeżeli chcesz, aby ktokolwiek korzystał z Twojego silnika na serio, to musisz się zatroszczyć o "wprowadzenie" do swojego silnika 🔔.

Gdy będziesz dodawać nową funkcjonalność do silnika, już wtedy zacznij myśleć o wyjaśnieniu jej prostymi słowami pod kątem czterech perspektyw 👇:

  • co to jest,
  • do czego służy,
  • do jakich przykładowych celów się to stosuje,
  • jak krok po kroku zacząć z tego korzystać.

Rozważ też dodanie zrzutów ekranu z widokiem na opcje gdzie kliknąć lub w celu prezentacji efektu końcowego 💡. Dokumentacja powinna być tak napisana, aby były zawarte wszystkie informacje w jak najbardziej zwięzłej formie (aby nie wyszła z tego cała powieść 😉) 👀!

Samouczek (ang. tutorial) może zostać wykonany w formie tekstowej lub filmów wideo 🎬. Najlepiej wydzielić sobie materiał w postaci: jeden tekst/film, jeden temat np. tworzenie projektu albo dodawanie przeciwnika na scenę. Dąż do tego, aby nie wymagały więcej niż 15 minut na przerobienie jednego zagadnienia (po tym czasie człowiek może być znudzony) ⏰.

DAJ UŻYTKOWNIKOWI MOŻLIWOŚĆ KONFIGURACJI SILNIKA DO GIER POD SWOJE PREFERENCJE

To druga rzecz, która dla mnie jest istotna w narzędziach do tworzenia gier: swoboda w modyfikowaniu konfiguracji 🔧. Prosty przykład - skórka, czyli motyw. Ktoś może nie lubić jasnego motywu i wolałby ciemną skórkę (nazywaną też "trybem nocnym" 🌕). Daj możliwość przełączania 👍! Ludziom o wiele lepiej pracuje się w danym narzędziu ze świadomością, że mogą je dostosować pod swoje nawyki ☑️.

Moim zdaniem, 3 najważniejsze kryteria takiej swobodnej konfiguracji, to 👇:

  1. wygląd (zmiana kolorów i czcionki do tekstów),
  2. układ okien wewnątrz edytora (tak jak np. w "Unity" gdzie występuje podział na wiele okien i można regulować wielkością oraz pozycją każdego z nich, a nawet całkowicie zamknąć),
  3. skróty klawiszowe (możliwość zmiany skrótu do rutynowych czynności, jak np. otwarcie edytora materiałów).

Oczywiście im więcej swobody w większej liczbie właściwości, tym lepiej 😄, natomiast 3 powyższe uznałbym za fundamentalne 🔥! Jeżeli użytkownik będzie mógł konfigurować silnikiem od tej strony, to na pewno będzie na plus 😉!

ZMINIMALIZUJ CZASY OCZEKIWANIA PODCZAS DZIAŁANIA SILNIKA DO GIER

Chyba niebudzące wątpliwości 😄. Dobre narzędzie, to szybkie narzędzie ⏩. W tym punkcie "kłania się" zdolność pisania kodu z użyciem technik optymalizacyjnych i umiejętność zarządzania pamięcią z użyciem wskaźników znanych z języka C 💪. Bo umówmy się, taki poważny projekt jak silnik gry, pisze się jedynie w językach będących w bliskim sąsiedztwie z niskimi warstwami systemu (bo potrzebujemy maksymalnej wydajności w operowaniu na pamięci 🧠), a do takich należą C i C++ 😊.

Po prostu spraw, aby projekty nie otwierały się tyle czasu, co w "Unity" (ten kto korzysta, to wie ile czasu to trwa) 😁, a silnik aby nie musiał "rozgrzewać" wszystkich edytorów "na wszelki wypadek", tylko najlepiej przygotować to, co jest potrzebne lub widoczne na pierwszy rzut oka, a daną część dopiero wtedy, gdy jest to konieczne 👍.

To o czym piszę ma ciekawy termin istniejący w programowaniu: "leniwa inicjalizacja" (ang. lazy initialization) ℹ️. To jest technika polegająca na zrezygnowaniu z inicjowania danego modułu lub obiektu (w zależności od paradygmatu) podczas uruchamiania aplikacji i "przełożeniu" tej inicjalizacji na moment, w którym jest już pewne, że będzie to potrzebne 💡. Przy dużej liczbie ciężkich modułów może to robić znaczną różnicę w czasie oczekiwania (zwłaszcza przy takim poważnym projekcie, jak silnik gry) 🙂.

To można dostrzec również podczas uruchamiania testów gry 👀. Możesz zwrócić uwagę, że niektóre narzędzia potrzebują za pierwszym razem dużo więcej czasu na przygotowanie testu, niż za każdym następnym. Tu może (lecz nie musi) działać "leniwa inicjalizacja", ponieważ na początku wszystkie niezbędne moduły muszą zostać załadowane do pamięci, a za drugim (i każdym następnym) razem już są gotowe i jedynie mogą potrzebować wyczyszczenia poprzedniego stanu ✅.

DODAJ MOŻLIWOŚĆ MODYFIKACJI PROJEKTU W SILNIKU DO GIER POPRZEZ KOD ŹRÓDŁOWY

Są takie narzędzia, które posiadają wbudowane w sobie gotowe bloczki, które pozwalają tworzyć grę bez pisania kodu 👍. To jest fajne rozwiązanie, jednak problem zaczyna powstawać, gdy chcemy dodać do gry coś niestandardowego i nie jest to możliwe do uzyskania z użyciem tychże bloczków 😐. Wtedy jedynym rozwiązaniem jest dodanie tego czegoś samodzielnie poprzez modyfikację kodu, natomiast program musi umożliwiać dostęp do kodu źródłowego, a nie wszystkie dają taką możliwość 😏. Dlatego elastyczność jest tak istotna 💥!

Jeżeli planujesz stworzyć silnik gry, który ma zachęcić spore grono osób, to powinieneś/powinnaś dodać wsparcie języka programowania i swobodny dostęp do kodu źródłowego 🔓. Wtedy dajesz możliwość swobodnego rozbudowywania projektu tak, jak dana osoba tego chce, bez żadnych ograniczeń narzucanych przez narzędzie ❤️!

Gdy ktokolwiek będzie chciał zmienić coś, co wykracza poza wygodne klikanie (a na pewno takie osoby się znajdą 😉), może w każdej chwili dopisać własny kod i poczuć się przez to szczęśliwy 😊.

ZAPEWNIJ EKSPORT GRY NA WIELE PLATFORM PRZEZ SILNIK

W dzisiejszych czasach, wdrażanie gier na różne platformy jest już normą 🙂. Gdy patrzę na narzędzie do tworzenia gier, to jedną z rzeczy która mnie najbardziej interesuje, jest lista wspieranych platform 🔥. Muszę mieć pewność, że dany program wspiera eksport gry nie tylko na PC, lecz także na HTML5 i na Androida, bo to też są platformy, z których korzystam. Stąd też w mojej ocenie, to kolejny z ważnych czynników decydujących o ostatecznej ocenie Twojego silnika do gier 🚀!

Nie twierdzę, aby dodawać wsparcie na każdą platformę tego świata 😅. Chodzi mi o te, które są brane pod uwagę komercyjnie, czyli 👇:

  • PC (Windows, Mac, Linux),
  • Xbox,
  • HTML5,
  • Android,
  • PlayStation,
  • Nintendo Switch.

To nie jest łatwe zadanie, ponieważ każda platforma posiada swoje słabości, a czasem inne podejście do niektórych kwestii technicznych 😟. Na przykład na jednej platformie sterowanie wygląda inaczej, niż na drugiej 😊. Przy komputerze korzystasz z klawiatury, przy konsoli z gamepada, a do smartfona potrzeba dodać dżojstik na ekran w formie "gałki" 😮. Tu trzeba dążyć do bezproblemowego działania gry pochodzącej z tego silnika, aby jedna rzecz działała identycznie na każdej platformie ⚠️!

Trzeba też uwzględnić inne czynniki mogące zaburzyć prawidłowe działanie gry na danej platformie 😧. Dla przykładu, przeglądarka uruchamiająca grę powinna na czas działania aplikacji ignorować odbieranie zdarzeń naciskania klawiszy ze strony języka JavaScript, ponieważ strzałki w górę i w dół odpowiadają za przewijanie strony 😳! A kliknięcie w okno gry prawym przyciskiem myszy nie powinno wywoływać żadnego menu kontekstowego, chyba że wymaga tego sama gra.

PUBLIKUJ CO JAKIŚ CZAS AKTUALIZACJE SILNIKA DO GIER

Ostatnia kwestia jaka niewątpliwie zachęca do skorzystania z narzędzia: otrzymywanie regularnych aktualizacji ✅. To jest znak, że program dalej otrzymuje nowe dodatki i usprawnienia, a to pozwala na zgłaszanie sugestii przez zainteresowanych co chcieliby zobaczyć w przyszłych wersjach silnika 💙. Dzięki mocy społeczności możesz nie tylko liczyć na rosnące grono zaangażowanych osób, lecz także otrzymać dobre pomysły na rozwój projektu, co uczyni go jeszcze mocniejszą pozycją wśród innych kandydatów 🤩!

Chcę wyraźnie zaznaczyć, że tu nie chodzi o aktualizowanie co tydzień 😅. Może być nawet raz na miesiąc 🙂. Chodzi o cierpliwe i stopniowe ulepszanie swojego silnika, aby było widać, że nie został porzucony 👍.

6 punktów, które powinien spełniać tworzony silnik do gier

Oto 6 punktów, które moim zdaniem wpływają najbardziej na jakość tworzonego silnika do gier!

To wszystkie 6 punktów jakie dla mnie są istotne i które decydowałyby o tym, czy skorzystałbym z takiego narzędzia, czy też nie 👍. W wielkim skrócie, jeżeli chcesz stworzyć silnik gry, który będzie zachwycał społeczność, trzeba sprawić, aby zapewniał użytkownikowi maksimum komfortu i to pod każdym względem ❤️.

Człowiek potrzebuje informacji o czymś? Sięga do dokumentacji ✔️.
Potrzeba zmienić wygląd edytora? Zmieniamy ustawienia wyglądu ✔️.
Ktoś musi pilnie coś poprawić w materiale wymagającym przejścia do odrębnego okna? Wywołuje go i nie czeka Bóg wie ile czasu ✔️.
Jest potrzeba dodania wyjątkowego elementu do gry, a nie ma go w silniku? Można przejść do edytora kodu i napisać samodzielnie ✔️.
Twórca planuje wydanie aplikacji na kilka innych platform? Przełącza na interesującą go platformę, eksportuje i nie martwi się detalami technicznymi ✔️.
Jest zainteresowanie silnikiem? Dzięki regularnym aktualizacjom jest szansa, że będzie jeszcze większe ✔️.

Wszystko powinno przemawiać za wygodą dla użytkownika 😎.


Tyle w temacie 👍. Podsumowując, tworzenie silnika do gier to bardzo poważne wyzwanie, które z pewnością zajmie zdecydowanie więcej czasu niż sama gra 💥. Jeżeli się na to zdecydujesz, musisz być przygotowany(-a) na lata pracy 😳! A przy dzisiejszych silnikach gry będzie ekstremalnie trudno stworzyć coś, co naprawdę przykułoby uwagę wielu osób (dziś już nie wystarczy samo stworzenie okna z dynamicznie zmieniającym się podglądem sceny 🙂) 🧨. Życzę powodzenia, natomiast naprawdę warto się zatrzymać i zastanowić czy aby na pewno gra jest warta świeczki 🤔. Czy nie lepiej tworzyć gier korzystając z już gotowych i sprawdzonych narzędzi, zamiast "wynajdywać koło na nowo".

PODOBNE ARTYKUŁY