boundfoxstudios / fairy-tale-defender Goto Github PK
View Code? Open in Web Editor NEWBoundfox Studios Community-Projekt - Entwicklung eines Tower Defense Spiels
Home Page: https://docs.fairytaledefender.de/
License: MIT License
Boundfox Studios Community-Projekt - Entwicklung eines Tower Defense Spiels
Home Page: https://docs.fairytaledefender.de/
License: MIT License
... da Horror sehr einschränkt und der Rest Quatsch ist
Wenn dieses Issue auf GitHub veröffentlicht wird, sollte in einem Channel in Discord eine Nachricht gesendet werden.
Update des Projekts auf Unity 2022 LTS sobald dieses verfügbar ist.
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.
Klappts?
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.
com.unity.learn.iet-framework com.unity.learn.iet-framework.authoring
Jeder Contributor sollte via .aufgabe-zurückgeben
eine Aufgabe wieder zurückgeben können.
Erstellung eines Scene-Templates für Level
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.
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)?
PR von außerhalb des Repos erstellen
Workflows funktionieren wie gedacht.
Anderes (bitte in der Fehlerbeschreibung angeben)
No response
No response
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.
Siehe: https://manuel-rauber.com/2022/05/23/instantiate-your-own-prefabs-via-gameobject-menu/
Nur ein Test, nicht beachten :>
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.
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:
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:
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.
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.
Durch #79 wird ein Label "Wartet auf Contributor" gesetzt.
Wenn dieses Label x-Tage bei einem Issue ist, ohne das sich was getan hat, soll der aktuelle Contributor automatisch unassigned werden und das Label "Wartet auf Contributor" wird entfernt, sodass jemand anders diese Aufgabe übernehmen kann.
Standard Sprach-Einstellungen hinzufügen für Unity Localisation
Das Repo benötigt noch ein PR Template
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.
Dazu müssen folgende Dinge implementiert/angelegt werden:
Scripts/Runtime/Audio/ScriptableObjects
Prefabs/Audio
Scripts/Runtime/Events/ScriptableObjects
EventChannelSO<T>
, wobei T
ein AudioCueSO
ist (siehe z.B. BoolEventChannelSO
ScriptableObjects/Events
Scripts/Runtime/Audio/AudioCuePlayer
AudioCueEventChannelSO
SoundEmitterPrefab
SceneLoader
)SoundEmitterPrefab
erzeugt werdenDa 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.
Implementierung eines BackgroundMusicPlayer (BMP).
Die Infos aus dem PlaylistItem könnte man später für die Generierung der Credits in der Credits-Szene (#50) benutzen.
Erstellung eines Menü-Scene-Templates.
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):
Jeder aktuelle Build auf develop
produziert ihn.
Im Download ist nur das TAR-Archive, da nur dort die Berechtigungen korrekt sind.
Anderes (bitte in der Fehlerbeschreibung angeben)
No response
No response
Viele Games haben ein kleines Popup das erscheint, sobald ein neuer Titel gespielt wird:
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.
Aktuell blockiert, da es noch kein UI-Design gibt.
Im Build-Process brauchen wir für Apple noch die Möglichkeit der Notarization, sodass es auf Macs problemlos ausgeführt werden kann.
Issues, bei denen sich seit x-Tagen nicht mehr getan hat, sollten vom Bot kommentiert werden
Es soll das Label "Wartet auf Contributor" gesetzt werden
Erstellung einer klassischen Credits-Scene:
ContributorsReader
um diese zu laden)Die Credits werden nicht übersetzt.
Erstellung eines Prefabs mit einem CameraRig für Menü-Scenen.
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.
Und in beiden Fällen sollten die Status-Checks korrekt angezeigt werden.
Bitte sei im Projektboard!
Für die Soundausgabe benötigt das Projekt einen AudioMixer.
Dieser soll folgende Kanäle beinhalten:
Alle drei sollen ihr Volume als Parameter freigeben:
Name des Mixers:
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.
Erstellung eines Prefabs mit einem CameraRig, dass wir in den einzelnen Leveln benutzen können.
Das Repo benötigt noch ein Issue Template.
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:
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);
}
}
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.
Das sollte jetzt automatisch im Projekt erscheinen
Beschreibe den Fehler
Tests werden noch nicht korrekt in den GH-Actions ausgeführt.
Wie kann man den Fehler reproduzieren?
Siehe hier: https://github.com/BoundfoxStudios/community-project/actions/runs/3082640824/jobs/4982590437#step:4:280
Mehr Info zum Test Runner: https://game.ci/docs/github/test-runner
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):
Interessante Links zum Durchlesen bzgl. des Game Design Documents:
Interessante Links von GDDs bekannter Spiele:
2021.3.9f1 steht nicht mehr direkt im Unity-Hub drin, daher kurz ein Hinweis in die Dokumentation, wie man diese installiert.
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.
Falls Du hier gänzlich neu bist und mitmachen möchtest, lese Dir bitte hier einmal alles durch.
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.
Siehe hier für mehr Informationen: https://manuel-rauber.com/2022/03/14/unity-tip-level-selection-editor-window/
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.