GithubHelp home page GithubHelp logo

boundfoxstudios / fairy-tale-defender Goto Github PK

View Code? Open in Web Editor NEW
19.0 6.0 22.0 133.59 MB

Boundfox Studios Community-Projekt - Entwicklung eines Tower Defense Spiels

Home Page: https://docs.fairytaledefender.de/

License: MIT License

Batchfile 0.01% Shell 0.01% C# 84.52% ShaderLab 11.66% HLSL 2.03% PLSQL 1.77%
community-project unity hacktoberfest hacktoberfest-2022 hacktoberfest2022 tower-defence tower-defence-game tower-defense tower-defense-game

fairy-tale-defender's Introduction

YouTube Channel Subscribers Discord GitHub contributors (via allcontributors.org)

Windows Build Linux Build macOS Build

Fairy Tale Defender

Ein Boundfox Studios Community-Projekt

Boundfox Studios Fairy Tale Defender

I speak english.

[ Dokumentation ] [ Mitmachen ] [ Roadmap ]

Hallo!

Schön, dass Du hier her gefunden hast zu unserem Community-Projekt (oder eher auch ein Community-Experiment). In diesem Repository (kurz Repo) findest Du so ziemlich alles, was zu Fairy Tale Defender gehört.

Am besten liest Du Dich erstmal etwas durch die Dokumentation. Diese ist umfangreich und enthält alle wichtigen Informationen.

Als Genre wollen wir gemeinsam ein Tower Defense im Mittelalter-Theme umsetzen. Aktuell sind wir dabei zu definieren, welche Features implementiert werden sollen.

Ziele

Das Community-Projekt verfolgt mehrere Ziele:

  • Ein kleines, fertiges Spiel, das kostenfrei auf Steam spielbar ist.
  • Alle, die Lust haben, sich zu beteiligen, sollen die Chance dazu haben.
  • Lernen! Wir sind ein Tutorial-Kanal auf YouTube, daher steht natürlich auch das Lernen im Vordergrund.
  • Spaß! Alle, die mitmachen, sollen Spaß bei der Sache haben, sei's bei der Umsetzung ihrer Aufgabe oder beim Plausch mit der Community.

Projektfortschritt verfolgen

  • Interessiert Dich nur der Fortschritt des Projekts, dann bist Du auf dem YouTube-Kanal genau richtig. Hier werden immer wieder Videos erscheinen mit dem aktuellen Stand. Ältere Videos findest Du in der Playlist.
  • Du hast das Spiel schon gespielt und möchtest einen Fehler melden? Klasse! Das kannst Du entweder direkt hier auf GitHub (Du benötigst dafür einen kostenfreien Account) machen oder natürlich auch auf Discord.

Roadmap

Eine kleine Roadmap findest Du hier.

Eine MindMap mit aktuell allen verrückten Ideen findest Du hier. Falls Du hier noch was ergänzen möchtest, schreib gerne ein Issue oder direkt in Discord.

Ich will mitmachen!

Super! Spieleentwicklung ist aufwendig - auch wenn wir vorhaben, ein kleines Spiel zu erstellen - helfende Hände und kreative Köpfe sind daher immer willkommen!

Ich kann aber gar nicht programmieren. Kein Problem! Ein Spiel zu entwickeln bedeutet viel mehr als Programmieren zu können. Beispielsweise werden auch 3D-Modellierer, 2D-Designer, Musiker, Effekt-Designer, Spieletester, Übersetzer und vieles mehr benötigt.

Am Besten schaust Du Dir zuerst das Intro-Video auf YouTube an, danach kannst Du hier in der Dokumentation lesen, wie Du Dich bei Fairy Tale Defender beteiligen kannst.

Beachte beim Mitmachen auch unseren Code of Conduct, sodass wir hier alle, die mitmachen möchten, respektvoll miteinander umgehen.

Wer macht bereits mit?

Diese wundervollen Menschen haben sich bisher bei Fairy Tale Defender beteiligt:

BlackJack237
BlackJack237

💻
Christian E.
Christian E.

📖 🎨 🤔
Christian Schamara
Christian Schamara

💻
GodGamer948
GodGamer948

📖
Harry Alissavakis
Harry Alissavakis

🎨
Julia-dev1
Julia-dev1

📖 🤔
LotteMakesStuff
LotteMakesStuff

🧑‍🏫
M4lph
M4lph

💻 📖 🤔 👀 💬
Manuel Rauber
Manuel Rauber

💻 📖 🤔 🚇 🚧 📆 👀 💬
Maris
Maris

🎨
SirTobyB
SirTobyB

📖
SuperPirate-ai
SuperPirate-ai

💻
Thorsten Kattanek
Thorsten Kattanek

💻
TipiliF
TipiliF

📖 🤔
Tobby
Tobby

💻
Tommy
Tommy

🎨 🤔
fastFox2
fastFox2

💻 📖 🤔

Was bedeutet denn ...?

Du wirst im Laufe der Dokumentation sicher über Begrifflichkeiten stolpern, die Du so noch nicht kennst. Dann wirf am Besten einen Blick in das Glossar. Hier versuchen wir alle Begriffe zu sammeln und zu erklären, um das allgemeine Verständnis zu verbessern.

Ansprechpartner

Aktuell ist Manu Ansprechpartner für alles zum Projekt. Am besten erreichst Du ihn auf Discord.

Screenshots vom Spiel

Screenshot

Mehr Screenshots findest Du hier.

Wichtige Links

Lizenz

Die Lizenz dieses Repos ist die MIT-Lizenz. Das bedeutet ganz grob folgendes; alle weiteren Informationen siehst Du in der Lizenz oder hier.

Du darfst:

  • dieses Projekt kommerziell nutzen,
  • das Projekt verteilen,
  • das Projekt modifizieren.

Du musst:

  • Lizenz und Copyright Hinweis beilegen

JetBrains

JetBrains

JetBrains unterstützt unser Projekt zum einen mit Lizenzen für JetBrains Rider als auch mit einer Lizenz für TeamCity Cloud, um das Spiel zu bauen und auf Steam hochzuladen.

Herzlichen Dank hierfür!

JetBrains Rider

JetBrains sponsert unser Fairy Tale Defender mit Lizenzen für JetBrains Rider! Jeder Entwickler, die sich im Projekt regelmäßig engagiert und aktiv ist, kann eine Lizenz für JetBrains Rider erhalten.

JetBrains Rider

JetBrains TeamCity

JetBrains sponsert unser Fairy Tale Defender mit TeamCity Cloud, vielen Credits und einem eigenen macOS-Build Agent. Hier findest Du unseren TeamCity Cloud Server, Du kannst Dich einfach mit dem Gast-Account, der dort verlinkt ist, anmelden.

JetBrains TeamCity

English

Hi!

You've just found the Boundfox Studios' community project. This project is a little community experiment to create a small and finished game that can be released on Steam. Since we're a German community all resources, except the code, will be in German. For all written content you can easily use an online translation tool.

Please don't hesitate to contribute, file bugs, make suggestions, etc. in English. You can also join our Discord server where we also have English channels.

Have fun!

fairy-tale-defender's People

Contributors

allcontributors[bot] avatar blackjack237 avatar diy-blub avatar fastfox2 avatar godgamer948 avatar julia-dev1 avatar m4lph avatar manuelrauber avatar realtobby avatar salja avatar sirtobyb avatar superpirate-ai avatar thkattanek avatar tipilif avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

fairy-tale-defender's Issues

dotnet-format einrichten

Innerhalb der aktuellen GitHub Actions wird ein weiterer Step in den Jobs benötigt, um dotnet-format laufen zu lassen, zum Überprüfen der Formatierung des Codes.

Erstellung Level-Scene-Template

Beschreibung

Erstellung eines Scene-Templates für Level

  • EditorColdStartup-Prefab hinzufügen
  • Instanz von LevelSO anlegen und mit EditorColdStartup verknüpfen
  • CameraRig_Level-Prefab hinzufügen, siehe #
  • Canvas-Prefab hinzufügen

Nutzung vom neuen UI Toolkit?

Beschreibung

Seit 2021.3 unterstützt das neue UI Toolkit auch das Input System.

Daher stellt sich die Frage, sollte man für das Overlay UI das neue System nutzen?

C4C86F25-5D3B-474E-8665-32D075468C92

Popout UI für BackgroundMusicPlayer

Idee/Feature-Beschreibung

Viele Games haben ein kleines Popup das erscheint, sobald ein neuer Titel gespielt wird:

Beispiel-Quick.MP4.mp4

Da wir hoffentlich den einen oder anderen Soundtrack aus der Community erhalten, wäre es nett, wenn wir auch so ein kleines Popup implementieren, um auf den Komponist aufmerksam zu machen.

  • Neues Canvas in PersistentState anlegen
  • Popup UI mit Lied und Autor anzeigen
  • DOTween für die Animation benutzen

Aktuell blockiert, da es noch kein UI-Design gibt.

GitHub Status Checks erneut prüfen

Beschreibung

Aktuell ist das Problem, dass der Status Check Development Builds nicht erkannt wird, auch wenn er korrekt durchläuft.

Hab daher auf die einzelnen Builds umgestellt, allerdings werden diese beim Skipping nun nicht mehr korrekt erkannt, da diese aus dem Matrix Build rauskommen.

Muss daher nochmal prüfen, wie man das sinnvoll einstellen kann.

UseCases

  • Code-Change
    • Linter läuft
    • Development Build Matrix läuft
  • Non-Code-Change
    • Kein Linter läuft
    • Keine Development Build Matrix läuft

Und in beiden Fällen sollten die Status-Checks korrekt angezeigt werden.

PR Checks müssen angepasst werden

Aktuell laufen die Build-PR-Checks auch, wenn man nichts am Unity-Projekt ändert. Das führt dazu, dass die PRs nicht integriert werden können.

Mitmachen // Aufgaben übernehmen

Kurzfassung

Alle Aufgaben, die nicht das Label "Triage" haben, können von der Community bearbeitet werden. Dazu muss in einem Kommentar der Text .meine-aufgabe vorkommen, sodass das System Dir automatisch die Aufgabe zuweist (sofern sie noch nicht von jemand anderem übernommen wurde).

Wenn Dir die Issue-Liste zu unübersichtlich erscheint, schau hier ins Projekt-Board. Dort kannst Du alle Issues in der Spalte "ToDo" bearbieten.

Langfassung

Falls Du hier gänzlich neu bist und mitmachen möchtest, lese Dir bitte hier einmal alles durch.

Wichtig

Halte vor einer Implementierung bitte immer kurz Rücksprache und beschreibe (im Issue oder auf Discord), wie Du für die Implementierung vorgehen wirst, sodass wir frühzeitig feststellen können, ob der gewünschte Weg eingeschlagen wird.

Steam

Beschreibung

Sammeltask für Manu, was gemacht werden muss, um das Community-Projekt auf Steam zu bekommen.

  • Steamworks Account (aktuell blockiert, da erst die GbR ins Einzelunternehmen umgewandelt werden muss)
  • #250
  • Game bei Steam anlegen
  • Pro Platform ein Steam-Depot anlegen
  • #249
  • #248

Concept-Art

Beschreibung

Blockiert durch: Genre-, Thema- und Stil-Wahl noch nicht abgeschlossen; Game-Design-Dokument existiert noch nicht; Aufgabe benötigt mehr Informationen

Entsprechend des Genres, Themas, Stils und den Features im Game-Design-Dokument, benötigen wir erste Concept Art, die entsprechende Elemente abbildet.

[Bug]: Herausfinden, warum bei einem PR die Workflows keine License File haben

Fehlerbeschreibung

Durch den ersten PR #41, der außerhalb dieses Repos erstellt wurde, fiel auf, dass die Workflows nicht laufen, da sie scheinbar keine Lizenz-Datei haben. Es scheint, als würden die Secrets nicht genutzt werden (können)?

Wie kann man den Fehler reproduzieren?

PR von außerhalb des Repos erstellen

Erwartetes Verhalten

Workflows funktionieren wie gedacht.

Betriebssystem

Anderes (bitte in der Fehlerbeschreibung angeben)

Spiel-Version

No response

Sonstiges

No response

Apple Notarization

Im Build-Process brauchen wir für Apple noch die Möglichkeit der Notarization, sodass es auf Macs problemlos ausgeführt werden kann.

[Idee/Vorschlag]: Anzeige der Build-Version im MainMenu

Idee/Feature-Beschreibung

Im MainMenu soll eine Text-Anzeige sein, die die aktuelle Build-Version anzeigt.

Die Anzeige soll unten rechts platziert sein mit 25 px Abstand zum Rand.

Die Build-Nummer ist in der Datei _Game/Build/manifest.json gespeichert.
Es existiert bereits eine Klasse BuildManifestReader zum Auslesen der JSON-Datei, die genutzt werden kann.

Zusätzlich soll es möglich sein auf diesen Text zu klicken um ihn in die Zwischenablage zu kopieren.

Erstellung einer Scene für Credits

Beschreibung

Erstellung einer klassischen Credits-Scene:

  • Scrollender Text, genauer Text siehe unten
  • Button, um zum Menü zurück zu kehren
  • Auflistung aller Contributors (siehe Klasse ContributorsReader um diese zu laden)
  • Links sollen klickbar sein

Die Credits werden nicht übersetzt.

Text/Reihenfolge

  1. Boundfox Studios
  2. Community-Projekt
  3. Link zum YouTube-Kanal: https://youtube.com/c/boundfox
  4. Link zu GitHub: https://github.com/boundfoxstudios/community-project
  5. Auflistung der Contributors: Name des Contributors ist klickbar mit einem Link zu seinem Profil

Implementierung AudioCue-System

Beschreibung

Das AudioCue-System dient zum Abspielen von Sound-Effekten, bspw. wenn ein Gegner getroffen wird, stirbt oder ähnliches.

Solche Effekte sollten über ein zentrales System abgespielt werden und nicht direkt beim betroffenen GameObjekt. Bleiben wir beim Beispiel des Tod's eines Gegners. Wenn ein Gegner stirbt, wird er in der Regel entweder via Destroy aus der Scene entfernt oder zumindest deaktiviert. D.h. auch jegliches Sound, der durch dieses GameObject abgespielt wird, wird deaktiviert. Dadurch wird der Sound unterbrochen. D.h. man müsste entweder warten mit der Deaktivierung des GameObjects oder eben den Sound über ein AudioCue-System abspielen.

Implementierungsdetails

Dazu müssen folgende Dinge implementiert/angelegt werden:

  • AudioCueSO
  • SoundEmitterPrefab
  • AudioCueEventChannelSO
  • AudioCuePlayer

AudioCueSO

  • Ablegen unter Scripts/Runtime/Audio/ScriptableObjects
  • Hat ein Feld für einen AudioClip

SoundEmitterPrefab

  • GameObject mit einer AudioSource
  • AudioSource nutzt den MainAudioMixer und dort den Kanal "Effects"
  • PlayOnAwake ausschalten
  • Prefab ablegen unter Prefabs/Audio
  • Benötigt eine öffentliche API zum Setzen des AudioClips der AudioSource
  • Benötigt ein reines C#-Event, das ausgelöst wird, sobald der AudioClip abgespielt wurde

AudioCueEventChannelSO

  • Ablegen unter Scripts/Runtime/Events/ScriptableObjects
  • Implementiert die Basis EventChannelSO<T>, wobei T ein AudioCueSO ist (siehe z.B. BoolEventChannelSO
  • Eine Instanz des SO ablegen unter ScriptableObjects/Events

AudioCuePlayer

  • Script ablegen unter Scripts/Runtime/Audio/AudioCuePlayer
  • GameObject in PersistentScene erzeugen und AudioCuePlayer anhängen
  • GameObject als Static markieren
  • Script benötigt
    • Ein Feld für AudioCueEventChannelSO
    • Ein Feld für SoundEmitterPrefab
    • Beim OnEnable an das Event anhängen (ein Beispiel findest Du im SceneLoader)
    • Beim OnDisable vom Event abhängen
    • Sobald das Event ausgelöst wird, muss:
      • Eine Instanz vom SoundEmitterPrefab erzeugt werden
      • Der AudioClip aus dem Event dem SoundEmitter übergeben werden
      • Den AudioClip abspielen
      • Sobald der AudioClip fertig ist, soll die Instanz des SoundEmitters wieder zerstört werden

Wie kann ich das testen?

Da wir aktuell noch nichts haben, was einen Sound abspielen kann, kannst Du das ganze nur testen, wenn Du Dir ein weiteres Script machst, dir eine Instanz vom AudioCueSO anlegst und dann diese Instanz über das Event zum AudioCuePlayer schickst. Kostenfreie Soundeffekte zum Testen findest Du z.B. auf Zapsplat oder FreeSound. Bitte achte aber darauf, dass Du Deine Test-Skripte und Test-Assets nicht in den PR übernimmst.

[Bug]: macOS Game Binaries Artefact beinhaltet TAR und .app

Fehlerbeschreibung

Aktuell beinhaltet das Artefact für macOS Game Binaries sowohl das TAR-Archiv (das ist korrekt) als auch die .app-Datei (das ist nicht korrekt):

image

Wie kann man den Fehler reproduzieren?

Jeder aktuelle Build auf develop produziert ihn.

Erwartetes Verhalten

Im Download ist nur das TAR-Archive, da nur dort die Berechtigungen korrekt sind.

Betriebssystem

Anderes (bitte in der Fehlerbeschreibung angeben)

Spiel-Version

No response

Sonstiges

No response

Austausch dotnet-format mit Rider Command Line Tools

Beschreibung

Aktuell nutzen wir dotnet-format zum Prüfen, ob der Code korrekt formatiert ist.
Leider ist dotnet-format nur ein sehr einfaches Tool und kann bei weitem nicht alle Regeln, die man für eine Unity-Codebase bräuchte.

Seitens Rider gibt's ein Command Line Tool (was auch für Entwickler funktioniert, die kein Rider nutzen), um Code zu formatieren und auf Probleme zu prüfen. Rider versteht an sich auch eine Unity-Codebase.

Allerdings hat das Command Line Tool noch einige Probleme, bevor wir es einsetzen können:

Wird also noch etwas dauern, bis wir es für das Community-Projekt einsetzen können.

Erstellung Menü-Scene-Template

Erstellung eines Menü-Scene-Templates.

  • EditorColdStartup-Prefab hinzufügen
  • Instanz von MenuSceneSO anlegen und mit EditorColdStartup verknüpfen
  • CameraRig_Menu-Prefab, siehe #46
  • Canvas-Prefab hinzufügen

Implementierung BackgroundMusicPlayer

Idee/Feature-Beschreibung

Implementierung eines BackgroundMusicPlayer (BMP).

Playlist

  • ScriptableObject zur Verwaltung von mehreren PlaylistItems
  • Anfänglich werden wir sicher nur eine Playlist haben, aber vielleicht später mal mehr, thematische, etc.

PlaylistItem

  • ScriptalbleObject mit folgenden Infos:
    • AudioClip
    • Interpret
    • Songname
    • Optional: URL zum Interpret

Die Infos aus dem PlaylistItem könnte man später für die Generierung der Credits in der Credits-Szene (#50) benutzen.

BMP

  • MonoBehaviour, lebt in der PersistentScene
  • Soll direkt im Awake anfangen, Musik aus einer Playlist abzuspielen
  • Spielt zufällig einen Song aus der Playlist, aber niemals 2x das gleiche nacheinander
  • Gibt Audio über den MainAudioMixer auf dem Kanal "Music" aus (#60)

[Idee/Vorschlag]: Coding Conventions erweitern

Idee/Feature-Beschreibung

Konstanten werden laut Unity UOP Coding conventions im ScreamCase genutzt, wir haben derzeit PascalCase.

Wir sind auch bei der Nutzung von privaten Feldern in Verbindung mit [SerializeField] Attribut inkonsistent. Vllt den Fall auch noch in den Coding Conventions aufführen.

Backend-Implementierung von generischen Spieloptionen

Idee/Feature-Beschreibung

Mit dieser Aufgabe sollen weitestgehend generische Spieloptionen implementiert werden, aktuell erstmal ohne UI, da das generelle UI-Design (siehe #64) noch fehlt.

Benötigt zur Implementierung #67.

Dennoch können wir bereits im Hintergrund, aka Backend, einige typische Optionen implementieren:

  • Auflösung
  • Einstellung der Grafikqualität. Hier starten wir erstmal mit den drei Standard-Optionen von URP:
    • Performance
    • Balanced
    • High Fidelity
  • Lautstärkeregelung (siehe #60):
    • Master
    • Musik
    • Effekte
    • UI

Implementierungsdetails

ScriptableObject

Für die Optionen soll ein ScriptableObject angelegt werden, welches wir dann innerhalb vom Spiel nutzen. Wird das Spiel beendet, müssen die aktuellen Optionen, die im SO stecken, serialisiert und auf die Festplatte geschrieben werden. Wird das Spiel gestartet, müssen diese Daten wieder eingelesen und im SO abgelegt werden. Das Laden geschieht einmalig in der Initialization-Scene (und damit im InitializationLoader) und einmal im EditorColdStartup, in beiden Fällen so früh wie möglich, sodass nachfolgende Systeme bereits Zugriff auf die gespeicherten Daten haben.

Allerdings soll nicht das komplette SO serialisiert werden, sondern nur ein innenliegender Datencontainer:

public class BeispielSO : ScriptableObject
{
  private DataContainer _dataContainer;

  public AudioSettings Audio => _dataContainer.Audio;

  public async UniTask LoadAsync()
  {
    // Laden
  }

  public async UniTask SaveAsync()
  {
    // Speichern
  }

  [Serializable]
  public class AudioSettings
  {
    [Range(0, 1f)]
    public float MasterVolume = 1f;
  }

  [Serializable]
  private class DataContainer 
  {
    public AudioSettings Audio;
  }
}

// Zugriff dann später z.B. via:
public class Beispiel2: MonoBehaviour
{
  [SerializeField]
  private BeispielSO Beispiel;

  private void Awake()
  {
    MainAudio.SetParameter("MasterVolume", Beispiel.Audio.MasterVolume);
  }
}

GameSettingsManager

In der PersistentManagers-Scene soll ein MonoBehaviour implementiert werden, dass die Einstellungen, die im SO getroffen wurden, auf das Spiel anwendet.

Als Information (wird erst mit dem UI relevant) soll dieser auf ein Event reagieren, wann immer sich die Spieleinstellungen geändert haben und diese entsprechend anwenden.

UI-Design

Beschreibung

Für das generelle Look & Feel des Spiels benötigen wir ein UI-Design.
In dieser Aufgabe geht es um das reine Design und nicht um die Implementierung in Unity.

  • UI soll zum Genre, Thema und Stil passen
  • Design auf 1920x1080 auslegen, Skalierung machen wir in Unity
  • Beachten, dass manche Elemente, wie Buttons, Listenelemente etc. unterschiedliche Status haben:
    • Normal
    • Spieler fährt mit der Maus drüber (Hover-Effekt)
    • Spieler klickt das Element an
    • Element ist deaktiviert (z.B. wenn man nicht genug Geld hat, um ein Upgrade zu kaufen)
  • Im Design können gerne kleine Animationen vorgesehen werden (z.B. Button skaliert leicht beim Hover, oder bei einem Registerkartenelement wird die Registerkarte beim Hover leicht rausgezogen)
  • Klares, durchgängiges Farbdesign wünschenswert

Implementierung InputReaderSO

Beschreibung

Mit dieser Aufgabe soll ein InputReaderSO entwickelt werden, der bereits ein paar Steuerung versteht und diese als Event bereitstellt. Die Grundlage für den InputReaderSO bildet dieses Tutorial.

Zum aktuellen Zeitpunkt können folgende Dinge bereits implementiert werden:

  • Kamera-Bewegung mit WSAD
  • Kamera-Bewegung mit Maus am Bildschirmrand

Diese Aktionen sollen in der ActionMap "Camera" abgelegt werden.
Beide Aktionen lösen ein Event CameraMove<Vector2> aus.

Den aus der Bewegung resultierenden Vector2, der an CameraMove übergeben wird, soll via ClampMagnitude auf eine maximale Länge von 1 beschränkt werden, sodass die diagonale Bewegung nicht schneller ist, als eine nicht-diagonale Bewegung.

Zusätzlich sollen zwei Methoden bereitstehen, um alle spielrelevanten ActionMaps zu (de)aktivieren.

Der InputReaderSO muss getestet werden, dazu bitte hier lesen, wie es funktioniert.

flowchart LR
  WSAD -->|Invoke| CameraMove
  Maus[Maus am Bildschirmrand] -->|Invoke| CameraMove
  CameraMove <-->|Subscribe| CameraController

Die Implementierung vom CameraController erfolgt in einem eigenen Issue:

Entwicklung des Game Design Documents

Beschreibung

Blockiert durch: Genre, Thema- und Stil-Wahl noch nicht abgeschlossen

Im Game-Design-Dokument (GDD) werden wir festhalten, wie das Community-Projekt designed wird. Es dient als Vision des zu erstellenden Spiels.

Unter anderem werden wir hier festhalten (manche Punkte sind eventuell hinfällig, je nach Genre):

  • Charaktere (Spieler, Gegner)
  • Gebäude
  • Level-Design
  • Umgebungs-Design
  • Gameplay/Gameloop
  • Art/Design/Stil
  • Sound/Musik
  • Generelles Konzept (beschreibt die Hauptidee des Spiels)
    • Kurze Einführung
    • Beschreibung
    • Key Features
    • Genre
    • Plattformverfügbarkeit
    • evtl. Concept Art

Interessante Links zum Durchlesen bzgl. des Game Design Documents:

Interessante Links von GDDs bekannter Spiele:

Implementierung JsonFileManager

Beschreibung

Im Laufe des Projekts werden wir Dateien auf die Festplatte schreiben und lesen müssen.
Dazu implementieren wir im ersten Schritt einen Json-basierten FileManager, sodass wir es leichter haben zu prüfen, was auf die Festplatte geschrieben wird. Später tauschen wir diesen eventuell gegen einen BinaryWriter aus, sodass die Daten auf der Festplatte nicht mehr so einfach zu ändern sind.

Daher soll der JsonFileManager folgendes Interface implementieren:

public interface IFileManager
{
  UniTask<bool> ExistsAsync(string key);
  UniTask WriteAsync(string key, object serializable);
  UniTask<T> ReadAsync<T>(string key);
}

Als Basispfad nutzen wir Application.persistentDataPath.

Weiter soll mit dieser Aufgabe auch ein neues Menü-Item angelegt werden, dass via EditorUtility.RevealInFinder den Pfad öffnet, sodass man schnell im Explorer/Finder sehen kann, ob und welche Dateien wir abspeichern.

Erstellung des MainAudioMixers

Idee/Feature-Beschreibung

Für die Soundausgabe benötigt das Projekt einen AudioMixer.

Dieser soll folgende Kanäle beinhalten:

  • Music
  • UI
  • Effects

Alle drei sollen ihr Volume als Parameter freigeben:

  • MusicVolume
  • UIVolume
  • EffectsVolume

Name des Mixers:

  • MainAudioMixer

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.