GithubHelp home page GithubHelp logo

foxytocin / fisharefriends Goto Github PK

View Code? Open in Web Editor NEW
1.0 3.0 0.0 1.04 GB

The game Fish Are Friends (sometimes food) is a fish adventure game for young and old. It impresses with its realistic swarm simulation in combination with the unique underwater world.

C# 37.84% ShaderLab 17.18% HLSL 2.14% ASP.NET 42.83%
unity csharp shader-graph game-development game boids-simulation blender procedural-generation

fisharefriends's Introduction

Master Angewandte Informatik

Computer Games / Wintersemester 19/20 Fish Are Friends Foto-Quelle: Getty Images/Last Resort

18.12.2019: Erster Mood-Test

Fish Are Friends

  • Mood-Test
    • erster Test für den Unterwasserlook
    • Schwebepartikel um Wasser und Raum anzudeuten
    • GodRays um Wasseroberfläche / Lichtbrechung zu imitieren
    • Shader-Graph Caustics am Meeresgrund um Lichtbrechung zu imitieren

19.12.2019: Flocking-Tests / Futtersuche-Tests

Fish Are Friends

  • Flocking-Tests

    • allgemeines Schwarmverhalten mit Kollisionsvermeidung
  • Futtersuche-Tests

    • KI findet automatisch das nahe gelegenste Futter

21.12.2019: Flocking-Simulation & Shader Graphs / Unterwasserwelt

Fish Are Friends

Flocking-Simulation

  • allgemeines Schwarmverhalten
  • Kollisionsvermeidung
  • Fluchtverhalten beim Anwesenheit eines Feindes
  • Schwarm-Gruppierung die treu dem Spieler-Fisch folgt
  • Farbwechsel der zum eigenen Schwarm gehörenden Fische
    • Übernahme der Farben aus dem Editor
    • Manipulation des Shader-Graphs zur Laufzeit

Shader-Graphs / Optik der Unterwasserwelt

  • Shader-Graph
    • Fisch-"Texturierung" (Procedural)
    • Shader-basierte Schwimm-Animation
    • Dither-Effekt um Vertex-Clipping zu vermeiden
    • Shader-Graph mit Sub-Graphs um Wiederverwendbarkeit zu erhöhen
  • Procedural generierte Unterwasserwelt (Basic)
  • flüssiger Kamerawechsel: hinter dem Spieler / Top-View

22.12.2019: Grass-Planting, Food-Chasing & EcoSystemManager

Fish Are Friends

Food-Chasing

  • Fische verfügen nun über ein Hungerbedürfnis
  • Hunger zu stillen ist wichtiger als der Gruppenzusammenhalt
    • ist die Nahrung nah genug, wird die Gruppe kurzzeitig verlassen
    • ist die Nahrung zu weit weg, ist der kleine Fisch dennoch hin und her:
      • Gruppe oder Essen: Ohne Entscheidung stirbt der kleine Freund :(
  • Nahrung wird nach Bedarf generiert
  • Größe der Nahrungsquelle repräsentiert die angebotene Nahrungsmenge
  • Nahrungsanfragen werden komplett oder zum Teil gedeckt (ja nach Vorrat)
  • Fische die nicht "satt" werden, suchen automatisch die nächste Quelle

Fish Are Friends

Grass-Planting

  • Grundlage für die weitere Generierung der Unterwasserwelt
  • bestimmen der Platzgebiete per Perlin-Noise-Generierung von Zonen / Bereichen
  • animiertes Grass per Shader-Graph (wogt sich sanft in der Strömung)

EcoSystemManager

  • zeigt Statistiken über das Unterwasser-Biotop
    • Anzahl der Fische
    • auch die Anzahl der bereits Verstorbenen :(
    • deren Nahrungsbedarf (wenn es nicht schon zu spät ist)
    • noch vorhandene Nahrung
  • dient dem Balancing der Überlebenschancen
  • kann automatisch Futter generieren wenn das Gleichgewicht gefährdet ist
  • bei der Entwicklung dieser Erweiterung, sind 3.453.871 Alpha-Tester gestorben
    • sie mögen in Frieden ruhen - blubb, blubb

28.12.2019: Voll prozeduraler Map-Generator, Predator (Hai), Player-Controller

Fish Are Friends

Full Procedural Map-Generator

  • voll prozedurale Generierung der Unterwasserwelt
    • Meeresgrund mit
      • Steine, Grass, Alrgen, Steinblöcke
    • Wasseroberfläche
    • undurchsichtige Begrenzungen
  • Platzierung aller Elemente unter Berücksichtigung von Save-Areas
  • Mesh-Auflösung kann individuell konfiguriert werden
  • Verteilung, Gruppierung und Häufung aller Elemente kontrollierbar
  • abhängige Platzierung und Skalierung der nötigen Partikelsysteme
  • Collider-Berechnung für Fisch-Navigation

Fish Are Friends

Predator (Hai)

  • Fressfein für unsere kleinen Fischfreunde
  • navigiert eigenständig
  • beginnt die Jagt unter einem bestimmen Schwellwert (es fließt Blut)
    • Hai bekommt mehr Geschwindigkeit
    • Hai folgt einem Fisch bis dieser erlegt ist
    • (sometimes food) wird unweigerlich wahr
    • Rest-Lebensenergie der Fische geht auf den Hai über
  • Jagt endet erst über einem bestimmten Schwellwert (so lange herrscht Panik)
    • Hai drosselt das Tempo und schwimmt gemütlich umher
  • Fische flüchten aktiv vor dem übermächtigen Feind

Dead-Animation

  • verstorbene Fische treiben mit dem Bauch nach Oben zur Wasseroberfläche
  • werden innerhalb von Gras-Elementen neu gespawnt

Player-Controller

  • neues System verhindert Kollision mit Elementen (Boden, Wände, Steine usw.)
    • Player wird automatisch an diesen Elementen vorbei gelenkt
    • Ray-Cast-System der Fische übernommen
  • Schwimm-Animation passt sich an tatsächliche Geschwindigkeit an

Optimierungen

  • allgemein Coroutinen für asynchrone Animationen
    • z.B. der Futterquellen
  • Coroutinen für Futterbedarf um korrektes Timing sicherzustellen
  • vier LOD (level of detail) Stufen für das Fishmodell
    • automatischer switch je nach Entfernung zur Kamera
    • spart bis zu 250.000 Tris
    • Boden- und Wasser-Detailstunfen: bis zu 95% weniger Mesh

31.12.2019: Peformance-Optimierungen durch Cells

Fish Are Friends

Full Procedural Map-Generator

  • Optimierung durch Unterteilung der Welt in 'Cells'
    • dymaische Anpassung an Levelgröße möglich
  • nur Fische innerhalb der gleichen Cell 'sehen sich'
    • reduzierung der Berechnungen von Interaktionen
  • Zuordnung innerhalb der Cellen wird nur alle 5 Sekunden neu berechnet
    • nur möglich in intervallen zwischen dem Multithreading
    • Lastreduzierung durch

06.02.2020: Interface & Rocks

Interface

Fish Are Friends

  • Dynamisches UI mit Spielstatisiken
  • Schwarmgrößen aller Spieler (Player und KI)
    • eigener Schwarm zusätzlich als konkreter Zahlenwert
  • Nahrungsbedarf
    • animiert
    • blinkt wenn Nahrung lebensbedrohlich knapp wird

Rocks

Fish Are Friends

  • neue Felsen in der gesamten Unterwasserwelt

fisharefriends's People

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

fisharefriends's Issues

Kamera-Zoom

Zoom abhängig von der Größe des Fisch-Schwarms

Leader "findet" Futter und verteilt es an seinen Schwarm.

  • Ich hatte gerade noch die Idee, dass wenn der Leader in Futter schwimmt, er das futter an die Boids verteilen kann. Sonst hat man immer das Problem, dass die Boids nicht ins Futter schwimmen, weil sie um den Leader kreisen.

  • Ja genau das wollte ich auch vorschlagen. Auch weil die ja nur alle 3 Sekunden nach futter gucken.

  • Wie gehen wir mit Boids um die nur 70% hungrig sind? Also die würden selber kein Futter suchen, aber wenn der Leader durch das futter schwimmt, füllen wir dann alle auf 100% auf?

  • Ja. Dann bekommen die 100%

  • bzw. erst die "hunrigen" und dann den Rest der Nahrungsquelle auf die anderen?

  • Also Leader kennt den Gesamtbedarf: wenn der höher ist als die Nahrungsquelle schnappt er sich diese komplett, dann bekommen alle hunrigen Boids (die roten) und danach die anderen

AI-Player bleiben beim Angriff "ineinander" stecken

  • befinden sich zwei AI-Player im Kampf, zeigt der Angegriffene kein Fluchtverhalten. Statt dessen schwimmen sie ineinander / miteinander umher.
  • Vermuteter Bug: Angriffsverhalten wechselt zwischen beiden abwechselnd hin und her

Vorschlag

  • es wird ein timeout gebraucht, damit der angegriffene nicht direkt zurückschlagen kann

Jagdverhalten des Predator anpassen

aktuell:

  • Hai macht Jagt auf Boids (die ihn sehen)
  • Hai greift keine Schwärme gezielt an

angestrebt:

  • Hai macht Jagt auf Schwärme (Spieler und AI-Spieler)
  • Spieler wird "gezwungen" die Nähe zum Hai zu vermeiden (damit sein Schwarm nicht gefressen wird)

Startmenü

Spieler befindet sich am Anfang des Spiels außerhalb des Aquariums.

KI-Player

  • Autonomes Schwimmen mit Kollisionsvermeidung
  • Jagt auf andere Spieler um Fische vom Schwarm zu rauben
  • Futtersuche wenn der Schwarm Nahrung braucht
  • Tod eines Fisches wenn Hunger des Schwarms nicht gestillt wird.

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.