Architektur von Videospielen
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Organisation Beginnen Sie jetzt mit dem Programmieren Ideenpräsentation (Do. Nächste Woche) I z.B.: /.sln I Ab 14 Uhr ct. in Zoom I Jenkins und Sonar sind nun online I Ab 14 Uhr st. Technik testen I Gesamte Gruppe mit Kamera I Arbeiten Sie an einem Projekt, integrieren Sie I max 10min (+ 5min Fragen) kontinuierlich I Bereiten Sie sich vor: I MS01: Nächste Woche (Spielobjekt in der I Worum geht es? Welt bewegbar, bewegliche Ansichten, Level I Zentrale Spielmechanik? laden/speichern, Soundausgabe) I Spielablauf? (gewinnen, verlieren) I Nehmen Sie die wöchentlichen Aufgaben als I Warum macht es Spaß? Chance sich zu verbessern 1 / 33
Architektur Engine Tools I Eingabe I Modelle integrieren I Menüs und Popups I Texturen integrieren I Persistente Einstellungen I Sounds integrieren I Speichern/Laden I Level erstellen I Rendern und Kamera I Debugging output I Pathfinding Content I Kollisionserkennung I Sound und Musik I Netzwerk I Modelle I Objektverwaltung I Sprites Spielmechanik I Levels I Spielobjekte und Eigenschaften I Interaktion I KI 3 / 33
Architektur Engine Tools I Eingabe I Modelle integrieren I Menüs und Popups I Texturen integrieren I Persistente Einstellungen I Sounds integrieren I Speichern/Laden I Level erstellen I Rendern und Kamera I Debugging output I Pathfinding Content I Kollisionserkennung I Sound und Musik I Netzwerk I Modelle I Objektverwaltung I Sprites Spielmechanik I Levels I Spielobjekte und Eigenschaften I Interaktion A Man Ran (WS17/18) I KI 3 / 33
Architektur Gregory, Game Engine Architec- ture, 2019 4 / 33
Architektur Content Am Besten Top-Down anfangen: I Zuerst Struktur aufbauen MonoGame Game Logic I Funktionalität aufteilen I Separation of Concerns Engine 5 / 33
MonoGame und .NET 6 / 33
MonoGame und .NET .net MonoGame I Mathematik I Abstraktion I Zufallszahlen I Grafik I Sound I (De-)Serialisierung in XML/Binär I Input I Datenstrukturen (Liste, Menge, ...) I Content Pipeline I Debugging I Einfache Anzeigemethoden I Profiling (BasicEffect, SpriteBatch) I Datentypen I Vector2, Vector3 I Matrix I ... I Game Loop 7 / 33
MonoGame Lifecycle (Un-)Load Content Initialize() LoadContent() Game Loop BeginRun() Update(GameTime t) BeginDraw(): bool Draw(GameTime t) EndRun() EndDraw() UnloadContent() 8 / 33
Bausteine 9 / 33
Screen Management I Verschiedene Ansichten des Spiels in Screens unterteilen I Hauptmenü I Optionsmenü I Spielansicht I HUD I Ladebildschirm I ... 10 / 33
Screen Management I Verschiedene Ansichten des Spiels in Screens unterteilen I Hauptmenü I Optionsmenü I Spielansicht I HUD I Ladebildschirm I ... I ScreenManager verwaltet alle Screens I ScreenManager verwaltet Übergänge zwischen Screens I Verwaltung der Screens vom Inhalt des einzelnen Screens trennen 10 / 33
Screen Management ScreenManager - mScreenStack:List + AddScreen(screen:IScreen) + RemoveScreen(...) + Draw(...) + Update(...) Draw() Update() MainMenuScreen mScreenStack 11 / 33
Screen Management ScreenManager - mScreenStack:List + AddScreen(screen:IScreen) + RemoveScreen(...) + Draw(...) + Update(...) AddScreen(OptionsScreen) MainMenuScreen mScreenStack 11 / 33
Screen Management ScreenManager - mScreenStack:List + AddScreen(screen:IScreen) + RemoveScreen(...) + Draw(...) + Update(...) Draw() Update() OptionScreen MainMenuScreen mScreenStack 11 / 33
Screen Management ScreenManager - mScreenStack:List + AddScreen(screen:IScreen) + RemoveScreen(...) + Draw(...) + Update(...) RemoveScreen() OptionScreen MainMenuScreen mScreenStack 11 / 33
Screen Management ScreenManager - mScreenStack:List + AddScreen(screen:IScreen) + RemoveScreen(...) + Draw(...) + Update(...) Draw() Update() MainMenuScreen mScreenStack 11 / 33
Screen Management ScreenManager - mScreenStack:List + AddScreen(screen:IScreen) + RemoveScreen(...) + Draw(...) + Update(...) UpdateLower? DrawLower? HudScreen GameScreen mScreenStack 12 / 33
Screen Management ScreenManager - mScreenStack:List Yes + AddScreen(screen:IScreen) Yes + RemoveScreen(...) + Draw(...) + Update(...) HudScreen GameScreen mScreenStack 12 / 33
Screen Management ScreenManager - mScreenStack:List + AddScreen(screen:IScreen) + RemoveScreen(...) + Draw(...) + Update(...) PauseMenuScreen HudScreen GameScreen mScreenStack 12 / 33
Screen Management ScreenManager - mScreenStack:List + AddScreen(screen:IScreen) + RemoveScreen(...) UpdateLower? + Draw(...) DrawLower? + Update(...) PauseMenuScreen HudScreen GameScreen mScreenStack 12 / 33
Screen Management ScreenManager - mScreenStack:List No + AddScreen(screen:IScreen) Yes + RemoveScreen(...) + Draw(...) + Update(...) PauseMenuScreen HudScreen GameScreen mScreenStack 12 / 33
Screen Management ScreenManager - mScreenStack:List IScreen + AddScreen(screen:IScreen) + UpdateLower: bool + RemoveScreen(...) + DrawLower: bool + Draw(...) + Update(...) + Update(...) + Draw(...) PauseMenuScreen HudScreen MenuScreen 13 / 33
Screen Management ScreenManagement ScreenManager - mScreenStack:List IScreen + AddScreen(screen:IScreen) + UpdateLower: bool + RemoveScreen(...) + DrawLower: bool + Draw(...) + Update(...) + Update(...) + Draw(...) Game PauseMenuScreen HudScreen MenuScreen 13 / 33
Screen Management ScreenManagement ScreenManager - mScreenStack:List IScreen + AddScreen(screen:IScreen) + UpdateLower: bool + RemoveScreen(...) + DrawLower: bool + Draw(...) + Update(...) + Update(...) + Draw(...) ScreenManagement Game IScreen PauseMenuScreen HudScreen MenuScreen MyGame 13 / 33
Input Management I Tastatur, Maus, Gamepad, ... I MonoGame Namespace Microsoft.Xna.Framework.Input I KeyboardState mKeyboardState = Keyboard.GetState(); I Statusinformation per Frame: Zustand der Tasten, Mausposition I keine Historie I Wir brauchen I Statusinformation in Abhängigkeit von Zeit (z.B.: A wurde diese Frame losgelassen) I Abstraktion von Tasten zu Aktionen 14 / 33
Input Management Xna...Mouse Xna...MouseState Xna...Keyboard Xna...KeyboardState Xna...Keys
Input Management Input Xna...Mouse InputManager + GetKeyMappings():Dictionary Xna...MouseState + SetKeyMapping(keyEvents: List, action: ActionType) + DeleteKeyMapping(...) + Update (...) Xna...Keyboard Xna...KeyboardState 1 InputState 0...* + MousePosition:Vector2 KeyEvent KeyEventType OnButtonDown Xna...Keys OnButtonPressed ActionType OnButtonUp 15 / 33
Menüs I Viele Elemente die sich sehr ähnlich verhalten I Panels I Buttons I Labels I Textboxen I Checkboxen I Auch im Hud verwendbar 16 / 33
Menüs IDrawable2D IKeyboardSelectable + CurrentRatio: float + Enabled: bool + Draw(...) MenuElement PaneElements + Position:Vector2 0..* MenuEventHandler + Size:Rectangle + Visible: bool 1 Pane Label Textbox Button TextButton ImageButton ITextElement + Text: String 17 / 33
Spielobjekte Spielobjekte Spielobjekte sind alle Dinge, die eine Repräsentation in der Spielwelt haben. I Charaktere, Fahrzeuge, Bäume, Raketen, Gras, Steine, Trigger, Lichter, Sounds, ... I Spielobjekte müssen manchmal I gezeichnet werden I sich bewegen I zerstörbar sein I miteinander kollidieren I etc. I Wie verwaltet man so viele (verschiedene) Objekte effizient? 18 / 33
Spielobjekte Spielobjekte Spielobjekte sind alle Dinge, die eine Repräsentation in der Spielwelt haben. I Charaktere, Fahrzeuge, Bäume, Raketen, Gras, Steine, Trigger, Lichter, Sounds, ... I Spielobjekte müssen manchmal I gezeichnet werden I sich bewegen I zerstörbar sein I miteinander kollidieren I etc. I Wie verwaltet man so viele (verschiedene) Objekte effizient? I Zur Laufzeit? I Im Softwaredesign? 18 / 33
Spielobjekte Szenengraph Ein Szenengraph ist eine zentrale Datenstruktur, die der logischen und/oder räumlichen Verwaltung der Spielobjekte dient. I Antwort auf räumliche Fragen I Update- und Drawaufrufe an Spielobjekte weitergeben I Beispiele: Liste, Heap, Quad-/ Octree, KD-Tree, R-Tree, ... 19 / 33
Spielobjekte Objektzentriert Eigenschaftszentriert I Spielobjekte sind Klassen mit I Jedes Spielobjekt ist nur eine ID I Eigenschaften des Spielobjekts I Eigenschaften der Spielobjekte werden in I Verhalten des Spielobjekts Tabellen gespeichert I Spielwelt ist eine Menge von Instanzen der I Verhalten von Spielobjekten sind Operationen Spielobjekte auf Tabellen I Änhnlich zu Datenbanken 20 / 33
Spielobjekte und Vererbung Mob Boss 21 / 33
Spielobjekte und Vererbung Enemy Mob Boss 21 / 33
Spielobjekte und Vererbung PlayerCharacter Enemy Mob Boss 21 / 33
Spielobjekte und Vererbung PhysicsObject PlayerCharacter Enemy Mob Boss 21 / 33
Spielobjekte und Vererbung MovableObject PhysicsObject PlayerCharacter Enemy Mob Boss 21 / 33
Spielobjekte und Vererbung MovableObject Platform PhysicsObject PlayerCharacter Enemy Mob Boss 21 / 33
Spielobjekte und Vererbung ColldiableObject MovableObject Platform PhysicsObject PlayerCharacter Enemy Mob Boss 21 / 33
Spielobjekte und Vererbung ColldiableObject AmbientTree MovableObject Platform PhysicsObject PlayerCharacter Enemy Mob Boss 21 / 33
Spielobjekte und Vererbung GameObject ColldiableObject AmbientTree MovableObject Platform PhysicsObject PlayerCharacter Enemy Mob Boss 21 / 33
Spielobjekte und Vererbung GameObject ColldiableObject AmbientTree MovableObject Platform Was ist mit der Kamera? PhysicsObject PlayerCharacter Enemy Mob Boss 21 / 33
Spielobjekte Eine einfache Kamera I Speichert z.B.: I View Matrix I Projection Matrix I Grundlage für Picking I Definiert View Frustrum 22 / 33
Spielobjekte Eine einfache Kamera I Speichert z.B.: I View Matrix I Projection Matrix I Grundlage für Picking I Definiert View Frustrum - Teil der Spielwelt - Nicht kollidierend - Beweglich 22 / 33
Spielobjekte Tree Platform PlayerCharacter Mob BossMob Camera GameObject X X X X X X Collidable X X X X Movable X X X X Physics X X X EnemyBehaviour X X 23 / 33
Spielobjekte und Vererbung GameObject ColldiableObject AmbientTree MovableObject Platform PhysicsObject Camera PlayerCharacter Enemy Mob Boss 24 / 33
Spielobjekte und Komposition IMovement Movement ICollidable 1 UnitMovement IMovement IEnemyBeaviour 1 1 Physics BossEnemy CollidableObject 1 ICollidable 1 EnemyBehaviour Behaviour 1 BossEnemyBeaviour IEnemyBeaviour FlyingEnemyBehaviour IGameObject IEnemy 25 / 33
Pathfinding Offline Online I Berücksichtigt Welt und unbewegliche Objekte I Beweglichen Objekten ausweichen I Meistens A* I Verschiedene Verfahren: I Viele mögliche Weltrepräsentationen: Steering, Flocking, Flow Fields, ... Grid, Hierarchical Grid, Waypoint Graph, Navigation Mesh,... 26 / 33
Pathfinding IPathFinder + GetPath(Location src, Location dest): Path Path AStarPathfinder Map IMapRepresentation NavigationMesh Grid 27 / 33
Library Falle 28 / 33
Die Libraryfalle Die Libraryfalle I Es existieren viele Libraries I Pro: I Rad nicht neu erfinden I Optimierte Lösungen für bekannte Probleme I Aber: I Problem muss verstanden sein I Library muss verstanden werden I Versteckte Kosten wenn Library fehlerhaft/schlecht/unpassend/... 29 / 33
Die Libraryfalle Die Libraryfalle I Es existieren viele Libraries I Pro: I Rad nicht neu erfinden I Optimierte Lösungen für bekannte Probleme I Aber: I Problem muss verstanden sein I Library muss verstanden werden I Versteckte Kosten wenn Library fehlerhaft/schlecht/unpassend/... I Vorher das Risiko abschätzen: I Wie zentral ist die Library? I Wie reif ist die Library? I Können wir das einfacher selbst machen? 29 / 33
Die Libraryfalle Die Libraryfalle Wie zentral ist die Library? I Es existieren viele Libraries -Viel möglicher Schaden: I Pro: Part4 I Rad nicht neu erfinden I Optimierte Lösungen für bekannte Probleme Part1 Part2 I Aber: I Problem muss verstanden sein Lib Part3 I Library muss verstanden werden I Versteckte Kosten wenn Library - Weniger möglicher Schaden: fehlerhaft/schlecht/unpassend/... I Vorher das Risiko abschätzen: Lib I Wie zentral ist die Library? Part1 Part2 I Wie reif ist die Library? I Können wir das einfacher selbst machen? Part4 Part3 29 / 33
Organisation 30 / 33
Architekturbesprechung Ziel Designprinzipien auf die Architektur anwenden um diese zu verbessern, und eventuelle Probleme mit Quelle: Dozent der Architektur frühzeitig aufdecken. Auslöser: Spieler Umgebung: Ich drücke im Hauptmenü auf Ablauf: Spiel Starten, und befinde mich danach I Kurze Zusammenfassung des Spiels im Spiel. I Übersicht über die Architektur I Was machen die einzelnen Komponenten Es wird eine Karte erzeugt. I Vorstellen der Architektur anhand der Szenarien I Fragen und zusätzliche Szenarien 31 / 33
Organisation I Fangen Sie jetzt an zu programmieren I In einem Projekt I Arbeiten Sie gemeinsam I GDD-Reviews lesen und Probleme beheben I Inhaltliche Probleme früh lösen I Nicht vergessen: I Architekturbesprechung I Ideenpräsentation 32 / 33
Organisation I Fangen Sie jetzt an zu programmieren I In einem Projekt I Arbeiten Sie gemeinsam I GDD-Reviews lesen und Probleme beheben I Inhaltliche Probleme früh lösen Für Fragen gibt es die Sprech- I Nicht vergessen: stunde: Donnerstags 14-18 Uhr, am I Architekturbesprechung besten per Mattermost ansprechen I Ideenpräsentation 32 / 33
33 / 33
Sie können auch lesen