Interactive

02 / 3D APPS / AMOS / 2020.08–2021.11

Realtime 3D Game

Ich habe die Weboberfläche und Zustandsverwaltung eines Echtzeitspiels sowie die 3D-Dealer-Animation und das Kartenrendering entwickelt.

AUFGABE
Gesamter Spielclient · Entwicklungsleitung
TECHNOLOGIEN
React · Three.js · XState · Socket.IO

REALTIME CLIENT

AmosSPIELCLIENT · Bildschirmaufnahme

Game Client

Anmeldung und Spielpanels wurden mit React umgesetzt, Dealer und Karten mit Three.js. Serverereignisse und Spielphasen steuerten die Aktualisierung der Oberfläche und der 3D-Szene.

Von Serverereignissen zu Zuständen

Der Client trat über Socket.IO Räumen bei und empfing Spiel- und Benutzerereignisse. Ich habe diese auf XState-Zustandsübergänge abgebildet, damit nicht jeder Bildschirm sie separat interpretieren musste. Änderungen gegenüber dem vorherigen Spielzustand wurden an untergeordnete Zustandsmaschinen weitergegeben.

Wann Eingaben möglich sind

Ich habe den Anmeldestatus getrennt von den Phasen Warten, Setzen, Austeilen und Ergebnis verwaltet. Je nach Phase wurden passende Panels, Timer und Eingaben aktiviert. React-Komponenten abonnierten die Zustände, die sie für ihre Anzeige benötigten.

Animation & Rendering

Wechsel zwischen Clips und IK

Beim Austeilen wurden die Hände per IK positioniert, die übrigen Bewegungen liefen über Animationsclips. Während der Clip-Wiedergabe habe ich IK-Updates ausgesetzt, damit beide Verfahren nicht dieselben Bones gleichzeitig steuern.

Wiederkehrende Karten rendern

Die Karten teilten sich über InstancedMesh Geometrie und Material. Instanzspezifische UV-Bereiche wählten die jeweilige Karte aus einem Atlas. So konnten unterschiedliche Karten mit einer gemeinsamen Mesh-Struktur dargestellt werden.

Geometryshared mesh / materialper-instance transform + UV
Karten-Rendering mit gemeinsamer Geometrie und gemeinsamen Materialien sowie individuellen Positionen und UV-Koordinaten pro Instanz.
WEITER / WEBPLATTFORMENMembership Platform