Für die meisten Plattformen können Sie Subsysteme schreiben, die von den spezifischen APIs abstrahieren, die zum Aufrufen und Abrufen von Informationen von der Plattform verwendet werden, auf der Sie ausgeführt werden. E / A-APIs sind normalerweise am einfachsten zu abstrahieren - alle Dateisysteme arbeiten mit einigen ziemlich grundlegenden Annahmen zum Öffnen, Schließen und Lesen von Dateien, selbst wenn Sie asynchrone Aufrufe berücksichtigen. Dann haben Sie Ihre Kernsysteme wie das Lesen von Controller-Eingaben, das Abfragen der Zeit, den Zugriff auf Speicher- und Thread-Grundelemente, von denen die meisten auf die gleiche Weise funktionieren.
Sogar Grafiken können weitgehend abstrahiert werden, und tatsächlich sind sie es in den meisten guten Engines. Aber Sie müssen die "renderbaren" Dinge in Blackboxen verpacken, in denen Sie nicht wissen dürfen, was in ihnen vor sich geht. Sie wissen, dass Sie ein „Ding“ haben, das Sie an einer bestimmten Position in der Welt rendern. Sie wissen nicht, wie es gerendert wird, nur dass es so ist. Und die Grafikabstraktionsschicht kümmert sich um alle Details, um sie auf den Bildschirm zu bringen. Die plattformspezifischen Build-Pipelines packen die grafischen Daten so zusammen, dass sie von der Engine aus referenziert werden können, ohne wirklich zu wissen, wie sie intern dargestellt werden.
Alles in allem gibt es jedoch bestimmte Teile, die man einfach nicht abstrahieren kann, wenn es darum geht, ein Spiel tatsächlich zu versenden. Es wäre lächerlich zu glauben, Sie könnten auf dem iPhone denselben Code wie auf 360 oder PS3 ausliefern, da die Eingabemechanismen, die grundlegende Funktionsweise und die Plattformfunktionen einfach zu unterschiedlich sind. Sie könnten einen Titel in iPhone-Größe auf 360 erstellen, aber er müsste seine Eingabemechanismen auf diejenigen beschränken, die der 360 unterstützen kann. Also ein virtueller Cursor auf dem Bildschirm, der einen Finger simuliert und möglicherweise den Joystick verwendet, bei dem die Eingabe des 3D-Beschleunigungsmessers verwendet wird.
Sinnvoller ist, dass Teile des Spiels wiederverwendbar geschrieben werden können und einzelne Codemodule zwischen Plattformen portiert werden können, obwohl der Großteil des Titels unterschiedlich ist. Wenn Sie beispielsweise eine KI-Zustandsmaschine haben, ist es egal, ob sie auf 360, PC oder iPhone ausgeführt wird. Ihr Spiel wird viele solcher Komponenten verwenden. Solange sie so konzipiert wurden, dass sie genau definierte Ein- und Ausgänge enthalten, kann der Rest eines Spiels unabhängig von der Plattform um sie gewickelt werden, ohne dass diese neu geschrieben werden müssen Komponenten.
Diese Wiederverwendbarkeit ist der Schlüssel für eine plattformübergreifende Entwicklung, ohne nach einer Einheits-Engine zu suchen, die auf allen Plattformen funktioniert. Selbst wenn es so etwas gäbe, wäre es so verkrüppelt, wenn man auf dem kleinsten gemeinsamen Nenner arbeiten müsste, dass es nicht viel nützen würde, Spiele damit zu machen.