Aby uzyskać naprawdę szczegółowe wyjaśnienie, polecam przeczytać jedyną biblijną architekturę Game Engine autorstwa Jasona Gregory'ego. Myślę, że jest to najbardziej kompletna praca na ten temat, odkąd została opublikowana. Obsługuje on nie tylko część C ++, ale także i jest ważny dla każdego programisty silnika gry, stojącego za teorią / architekturą. To dobry punkt wyjścia niezależnie od języka. Aby uzyskać przegląd, mówimy o tym obrazie z książki
Pozwól, że spróbuję odpowiedzieć na pytanie.
Cokolwiek napiszesz, będzie kodem :-) po latach doświadczenia napisz, czego potrzebujesz i jak potrzebujesz lub użyj tego, co zapewnia ci to, czego potrzebujesz.
Określenia silnika i ramy pochodzą z architektury oprogramowania wraz z innymi warunkami. Zacznijmy od podstawowych warunków i przejdźmy w górę.
Biblioteka
Typowe przykłady: biblioteka matematyczna zapewniająca wszystkie podstawowe typy i funkcje do obliczeń matematycznych (Vector, Matrix, ...) lub biblioteka obrazów (jpeg lub png) zapewniająca funkcjonalność do pisania obrazów jpeg lub png
W Unity 3D Math to biblioteka matematyczna.
Teoria: libray zapewnia dedykowane funkcje wokół tematu (np. Matematyki) ORAZ jest wywoływany przez programistę na żądanie .
Podgląd: mogą istnieć biblioteki przechowujące frameworki, czyli biblioteki frameworków.
Struktura
Teoria: Framework wprowadza odwrócenie kontroli . Oznacza to, że programista przez większość czasu nie wywołuje metod frameworka, ale framework wywołuje kod programisty. Wyjątkiem są sytuacje, gdy trzeba zintegrować bibliotekę frameworka z kodem i uruchomić frameworka. Biblioteka frameworka udostępnia wszystkie metody i funkcje oraz interfejsy dla frameworka o przeznaczeniu dedykowanym. Tak więc frameworki mogą znajdować się w bibliotece.
Typowy przykład: Unity 3D MonoBehaviour zapewnia metody takie jak Przebudź, Start, OnUpdate. Deweloper wdraża te metody, a następnie metody te są wywoływane przez środowisko (zarządzanie obiektami gry) (jest to odwrócenie kontroli) . To samo z metodami OnCollisionEnter, OnCollisionExit. Są w tym samym Monobehaviour, ale założę się, że są nazywani przez ramy fizyki.
Podgląd: silnik, środowisko wykonawcze, edytor, zestaw SDK
Ponieważ termin silnik zawsze był niejasny i nadal jest (i nie staje się lepszy wraz z dalszym rozwojem technologicznym), niektóre wyjaśnienia podglądu.
Termin silnik jest używany do wielu rzeczy i nie można jednoznacznie stwierdzić, która z nich jest poprawna. W 2004 roku, kiedy po raz pierwszy zetknąłem się z pisaniem silników do gier, było to również niejasne. Miałeś silnik gry w rozumieniu kodu ładującego predefiniowane dane i pozwalającego na grę. Ponieważ ładuje predefiniowane dane, nazwano je silnikami opartymi na danych. Kompilujesz je raz, a dane zewnętrzne mogły być różnymi grami bez ich ponownej kompilacji. W pewnym momencie było to tak samo jak środowisko uruchomieniowe.
Edytor jest przejrzysty. Pozwala zdefiniować predefiniowane dane ładowane przez silnik / środowisko wykonawcze.
Silnik z edytorem nazwano SDK (np. Hammer SDK).
Potem były / są dedykowane silniki. Silnik phyiscs, silnik renderowania, silnik dźwięku, silnik zarządzania obiektami, silnik sieci ...
Moim osobistym zdaniem nie są to silniki (szczególnie silnik renderujący NIE JEST silnikiem gry, ponieważ tylko renderuje). Kiedy używam silnika gry Google, wyniki zawierają 90% czystych silników renderowania, które nie są silnikami gier. Nazwałbym je wszystkimi bibliotekami, ale ponieważ mogą ładować predefiniowane dane, pasują do terminu silnik sterowany danymi.
Ostatnia krótka uwaga, zanim przejdziemy do szczegółów: z sukcesem ukończyłem studia informatyczne. Moja praca magisterska zajmowała się tematem „jak opracować rdzeń silnika gry”. Oznacza to część kodu, która łączy wszystkie inne silniki, czy zarządzanie obiektami gry, pętla gry itp.
Swoją pracę magisterską opublikowałem jako (krótką) książkę. Jedyny komentarz kupującego / czytelnika na temat Amazon to (po kilku latach): nie chodzi o silnik gry. Ponieważ ukończyłem z sukcesem studia i dlatego obroniłem moją tezę przed 3 doświadczonymi programistami (2 z nich zajmujących się grami i aplikacjami interaktywnymi), chyba napisałem silnik gry.
Redaktor
Łatwe: pozwala zdefiniować dane w formacie, którego wymagają inne części, a zatem eliminuje potrzebę ręcznego zapisywania tych plików lub korzystania z zewnętrznych narzędzi do ich tworzenia.
Tak właśnie działa edytor Unity 3D.
Środowisko wykonawcze
Termin ten jest często używany w równym stopniu z silnikiem (który może być poprawny lub niepoprawny).
Środowisko wykonawcze wykonuje wygenerowane dane i robi to, co ma z nimi wspólnego. Np. Pokaż grę i pozwól jej zagrać. Nie tworzy żadnych danych (oprócz zapisywania gier) w tym sensie, że nie można modyfikować samej gry.
Unity Web Player to / było środowiskiem uruchomieniowym, które pozwala grać w gry Unity w przeglądarce internetowej.
Możesz ładować i uruchamiać wiele różnych gier w tym samym środowisku uruchomieniowym.
W przypadku interfejsu API skryptów Unity 3D istnieje rozróżnienie między funkcjonalnością, która będzie działać w grze, a funkcjonalnością, która będzie działać tylko w edytorze.
SDK
Termin ten często nazywany jest również „ramowym” .
Wówczas SDK był pakietem narzędzi takich jak edytor, IDE (zintegrowane środowisko programistyczne) dla programistów, eksporterów formatów danych oraz środowiska uruchomieniowego / silnika.
Tak więc zestaw SDK / framework zapewnia wstępnie zdefiniowany przepływ pracy i narzędzia oraz pokazuje (dobrze zaprojektowany) sposób (łatwego) tworzenia gry.
Zasadniczo silnik Unity 3D byłby niewłaściwy, ponieważ bardziej pasowałby do kierunku SDK. Ale ponieważ Unity jest jeszcze bardziej potrzebne, nowe słowo / definicja musi pasować do tego, czym jest.
W każdym razie, aby wprowadzić inny termin, SDK / framework zapewnia wstępnie zdefiniowany potok rozwoju gry (nie tylko potok zasobów, ale może, podobnie jak Unity, potok zasobów, logiki, kompilacji, wdrożeń, ...)
Silnik
sarkazm na Używany do wszystkiego, ponieważ każdy chce być fajny, pisząc nie tylko bibliotekę, framework lub grę, ale lepiej pisząc kompletny silnik. sarkazm
Spuśćmy to:
Silnik
- jest kawałkiem kodu / oprogramowania
- jest przeznaczony do ponownego wykorzystania w wielu projektach (możesz także napisać silnik gry tylko dla jednej gry)
- za ponowne użycie silnik gry oddziela część wielokrotnego użytku od części specyficznej dla gry
- do wielokrotnego użytku (w zależności od tego, w jaki sposób mają być ponownie użyte) istnieją różne smaki, takie jak silnik sterowany danymi ładujący dane zewnętrzne
Silnik może składać się z wielu innych silników (ponieważ obecnie wszystko nazywa się silnikiem). Silnik gry może obejmować
- silnik renderujący renderujący (PONOWNIE: cholera, cholera, piekło: kod tylko renderujący NIE JEST silnikiem gry)
- silnik fizyki wykonujący fizykę (to silnik fizyki, a nie silnik gry)
- silnik AI obsługujący sztuczną inteligencję (to silnik AI, a nie silnik gry)
- silnik sieciowy (np. RakNet) wykonujący zadania sieciowe (to silnik sieciowy, a nie silnik gry)
- silnik audio wykonujący dźwięk (to silnik audio, a nie silnik gry)
Przykład aplikacji opartej na silniku rdzeniowym zapewniającej strukturę opartą na wtyczkach do łączenia wszystkiego razem w opartym na komponentach modelu zarządzania obiektami gry. Każdy pod silnik (renderowanie dźwięku) to moduł dodawany do silnika gry jako wtyczka. Każdy element może być częścią pod silnika / modułu. A (oparte na komponentach) zarządzanie obiektami gry jest łącznikiem pomiędzy oddzielnymi modułami.
Najbliższa definicja Game Engine
Silnik gry jest częścią kodu źródłowego swojej grze, która zapewnia wszystkie funkcje , które są przeznaczone do ponownego wykorzystania po drugiej stronie wielu gier i niech Ci kod i uruchomić grę. Dlatego łączy wszystkie pozostałe części kodu (renderowanie, audio, fizyka, zarządzanie obiektami w grze, tworzenie sieci), które są bibliotekami, frameworkami lub dedykowanymi silnikami (renderowanie, fizyka, ...).
Silnik gry to bałagan na środku.