Architektur von Videospielen

Die Seite wird erstellt Max Pfeifer
 
WEITER LESEN
Architektur von Videospielen
Architektur von Videospielen

  Vincent Langenfeld, Daniel Dietsch

         November 25, 2020

                                       0 / 33
Architektur von Videospielen
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 von Videospielen
Architektur

              2 / 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