wie von Josh Petrie gesagt :
" Nicht hier Syndrom gebaut ;"
Ich schreibe auch meine eigene Engine, und ich nehme an, dass der Grund für jeden Entwickler anders sein wird, aber in der Tat - ich arbeite im Allgemeinen nicht gerne in Code anderer Leute. Ich bin zwanghaft in dem Sinne, dass es keinen Sinn macht, sich mit etwas anderem zu begnügen, wenn ich das Gefühl habe, es selbst bauen zu können .
Ich habe verschiedene Arten von Spiele-Engines, Rendering-APIs und dergleichen getestet, insbesondere Ploobs, UNITY WaveEngine, XNAFinalEngine, Love, Ogre usw. Viele weitere ... Ich wollte mit dem Schreiben von Spielen beginnen und gut dokumentierter Einstiegspunkt ...
Mein Problem war jedoch zu dem Zeitpunkt, als ich keine Ahnung hatte, was unter dem Motor geschah. Ich wollte eine gute Kontrolle und einen Rahmen, den ich kenne wie meine Westentasche. Ich kam auf die Idee "Hey! Ich denke, der einzige Weg, wie ich lernen kann, wie das Ding funktioniert und wie ich es verstehe, besteht darin, meine eigene Engine komplett von Grund auf neu zu bauen. Der größte Teil meiner Programmiergeschichte war mit Web- und Verarbeitungslösungen - Das war ein ganz neues Ballspiel für mich.
Welches ist, was ich getan habe.
Deshalb habe ich XNA eingerichtet, da ich C # bereits kannte, und überlegt, wie oder wo ich anfangen soll. Ich brauchte eine Idee.
Ich entschied, dass ich, egal was passiert, direkt in 3D gehen würde .
Die Grundlagen zu verbessern war cool - das Sprite-Batch-Zeug, aber im weiteren Verlauf entdeckte ich neue Barrieren und Hindernisse - mein erstes echtes war das Batch-Limit . Mein Ziel war es, ein Spiel zu entwickeln, das zu jeder Zeit mindestens 10000 Entities im View-Frustum rendern kann.
Ich begann eine neue Reise der Implementierung von Shader Based Instancing (und lernte HLSL, als ich dabei war). Ich ließ die in XNA eingebauten Model- und Effect-Objekte fallen, um stattdessen meine eigenen Ersetzungen zu schreiben. Anfangs hatte ich Probleme, die VBO-Streams zu verstehen. Ich habe Dinge kaputt gemacht - ich bin online gegangen und habe Fragen zu den Instanzen gestellt und bin dabei geblieben, bis ich endlich verstanden habe, was die GPU tat. Es hat sich ausgezahlt; Nach ein paar Tagen Debugging meines VBO mit PIX (dxsdk) hatte ich nun über 20.000 Testobjekte in meinem Ansichtsfenster.
Jetzt hatte ich eine Vorstellung davon, wie das Rendern von Pipelines funktioniert, war aber noch nicht fertig - ich erstellte schließlich meinen eigenen Spielstatus, meine eigene Kamera, Post-Effekte und eigene Entity-Objekte und entfernte mich von der XNA-Content-Pipeline, indem ich meine eigene erstellte Loader (persönliche Abneigung gegen das XNB-Ding) erstellten eine komplizierte, tiefsortierte und im Mischzustand getrennte Geometriekette und hatten auch Sprites und Text instanziiert, die alle in die Spielszene projiziert wurden.
Ich habe fast ein ganzes Jahr lang kontinuierlich daran gearbeitet, es repariert, verändert und experimentiert. Am Ende kam es ziemlich gut heraus. Ich hatte jetzt ein Verständnis dafür, was unter der Haube vor sich geht, weil ich es geschaffen habe - mein Baby.
Jetzt war mein Motor größtenteils stabil und fast fertig. Es ist nicht perfekt: Das Scripting ist hupend und die GUI war überhaupt nicht großartig. Aber ich habe es trotzdem geliebt. Tausende Zeilen Code, Assets und Medien - eingebettet in ein privates 2-GB-Git-Repository, und all die Kopfschmerzen, die ich hatte, um eine Art von Entwicklung durchzuführen, die ich noch nie zuvor gemacht hatte. Jedes Hindernis, das ich überwunden habe, war eine Lektion gelernt - und eine Erleichterung.
Ich habe fast alles geschafft, was ich wollte.
Aber am Ende - ich entschied, dass es Zeit war, sie niederzulegen.
So sehr ich mich auch selbst davon überzeugt habe, eine so große Engine mit Ratschlägen aus dem Netz und von anderen Spielefreunden zu schreiben, habe ich beschlossen, es noch einmal zu machen - und es noch besser zu machen -, denn diesmal weiß ich es meistens Was mache ich.
Das Projekt steckt immer noch in meinem GIT-Repo.
Mein zweiter Versuch, eine neue Engine zu schreiben (diesmal auf MonoGame), macht gute Fortschritte. Wenn etwas kaputt geht, ist es einfacher, es zu beheben. Weniger Chaos. Ich hoffe, dass ich mein Spiel in diesem Jahr irgendwann öffentlich präsentieren kann, da ich meinem Code ein bisschen zu sehr angehängt bin.
Letztendlich habe ich beim Schreiben meiner eigenen Engine gelernt, wie man das macht, während ich sagen konnte, dass ich genau weiß und verstehe, was jede Komponente tut und wie sie funktionieren soll. Eigentlich HASSE ich es, den Code anderer Leute zu lesen, besonders für große undokumentierte Projekte. Ich möchte, dass alles, was ich benutze, von mir gebaut wird.
Das bin nur ich. Ich bezweifle, dass ich jemals eine vorgefertigte Engine verwenden werde, wahrscheinlich, weil es mir einfach mehr Spaß macht, meine eigenen Frameworks zu schreiben, als mit dem Code eines anderen umzugehen - volle Kontrolle.