Seite 2 von 2

Re: Ghostly Heist

Verfasst: 22.01.2024, 08:39
von joeydee
Vielleicht täuscht das im Video, aber es scheint hier kann man nur auf den Wegen gehen, und als Sichthindernis fungiert allein das Gebäude in der Mitte? Für einen "Heist" im Park würde ich erwarten, dass zwar die Wächter die Parkregeln beachten müssen, aber ich mich z.B. auch hinter Büschen und Bänken verstecken darf. Das würde mehr "echte" Hindernisse im Level erfordern, z.B. größere Büsche, zum Teil blickdichte Mauersegmente, Passantengruppen etc.

Re: Ghostly Heist

Verfasst: 22.01.2024, 11:44
von grinseengel
Danke für die Rückmeldungen.

Ich glaube ich habe den Videoausschnitt etwas ungünstig gewählt.

Die Kamera wirkt in dem Video tatsächlich etwas ruppig. Wenn man mit 60FPS spielt, merkt man das nicht mehr. Die Kamera kann gedreht und gezoomt werden. Die Click&Move Steuerung ist eigentlich recht hilfreich. Das zeige ich in einem neuen Video. Durch das Zoomen und Drehen erhält man einen ganz anderen Eindruck vom Level und kann dann auch seine Wege besser planen.

Im Moment gibt es tatsächlich noch nicht viele Verstecke. Das werde ich ändern.

Re: Ghostly Heist

Verfasst: 22.01.2024, 13:53
von grinseengel
Ich habe ein neues Video hochgeladen. Es sind ein paar mehr Versteckmöglichkeiten vorhanden und ein Zähler über die bereits gefundenen Münzen.


Re: Ghostly Heist

Verfasst: 22.01.2024, 19:17
von gombolo
cool :)

Re: Ghostly Heist

Verfasst: 23.01.2024, 14:07
von grinseengel
Hier ein kleiner Einblick in die dritte Mission:


Re: Ghostly Heist

Verfasst: 24.01.2024, 01:44
von Endgegner
Und in welchem Zelt ist denn das außerirdische Raumschiff versteckt, das der Spieler finden muss? ;)

Bin gespannt auf die neuen Levels. Im Gegensatz zum ersten Level sind diese ja sehr offen gestaltet, was nochmal ganz andere Herausforderungen für das Leveldesign und die Spieler bringen kann. Oft funktioniert das Herumschleichen als Spielprinzip in Innenbereichen am besten, wie ich finde, aber ich lasse mich gerne überraschen.

Mir gefällt jedenfalls, dass du die Standorte wirklich sehr abwechslungsreich gestaltet hast: Büro, Park, Hafen, Militärgelände ... Und alles in einem konsistenten Stil!

Re: Ghostly Heist

Verfasst: 24.01.2024, 11:43
von grinseengel
Mir gefällt jedenfalls, dass du die Standorte wirklich sehr abwechslungsreich gestaltet hast: Büro, Park, Hafen, Militärgelände ... Und alles in einem konsistenten Stil!
Vielen Dank. Ja das kannst du in der fertigen Version dann testen. Ich finde das geht auch ganz gut in den offenen Locations. Die vier Level sind im Großen und Ganzen fertig erstellt. Jetzt muss ich noch ein paar abwechslungsreiche Details einbringen. Gegenstände auf dem Boden die dann bei Berührung Geräusche machen und die Wachen aufhorchen lassen. Schranken die sich öffnen und schließen. Weitere Überwachungskameras die schwenken und überraschend auftretende Überwachungsfahrzeuge die durch den Level fahren.

Ich habe die Levelauswahl jetzt um eine automatische Speicherfunktion ergänzt. Wenn eine Mission erfolgreich abgeschlossen wurde, dann erscheint dahinter ein Haken.

Bild

Re: Ghostly Heist

Verfasst: 24.01.2024, 18:38
von gombolo
Ich war mal eine ganze Weile nicht sehr aktiv, aber du enttäuscht mich nicht :D immer noch extrem produktiv...wie immer.

magst du was zur Technik sagen? z.B. die Sichtkegel...wie diese funktionieren. Ich meine die Darstellung...

Re: Ghostly Heist

Verfasst: 28.01.2024, 17:21
von grinseengel
Was das Script für die Sichtkegel und Gegnererkennung angeht habe ich mir Hilfe geholt und als Basis mit diesem Script gearbeitet.

Code: Alles auswählen

public class sichtkegel : MonoBehaviour
{
    public float fieldOfView = 90f;
    public float viewDistance = 10f;
    public LayerMask targetMask;

    private void Update()
    {
        // Berechne den Richtungsvektor basierend auf der Rotation des NPCs
        Vector3 direction = transform.forward;

        // Scanne nach Gegnern innerhalb des Sichtkegels und der Distanz
        Collider[] targetsInViewRadius = Physics.OverlapSphere(transform.position, viewDistance, targetMask);

        foreach (Collider target in targetsInViewRadius)
        {
            // Prüfe, ob das Ziel innerhalb des Sichtkegels ist
            Vector3 targetDirection = (target.transform.position - transform.position).normalized;
            if (Vector3.Angle(direction, targetDirection) < fieldOfView / 2)
            {
                Debug.Log("Gegner gefunden: " + target.name);
            }
        }
    }

    private void OnDrawGizmosSelected()
    {
        // Zeichne den Sichtkegel in der Szene
        Gizmos.color = Color.red;
        Gizmos.DrawRay(transform.position, Quaternion.Euler(0, fieldOfView / 2, 0) * transform.forward * viewDistance);
        Gizmos.DrawRay(transform.position, Quaternion.Euler(0, -fieldOfView / 2, 0) * transform.forward * viewDistance);
        Gizmos.DrawRay(transform.position, transform.forward * viewDistance);

        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, viewDistance);
    }
}

Re: Ghostly Heist

Verfasst: 28.01.2024, 19:34
von Schrompf
Das seh ich hier nicht. Die Funktion Update() prüft, ob der Mittelpunkt des Gegenübers im Sichtkegel ist, und loggt nur bei Anwesenheit, aber merkt sich das nirgendwo oder macht daraus nix. Und vielleicht steckt ja in der Gizmos-Klasse die große Magie, aber dort seh ich auch nur plumpe Draw()-Befehle von Rays und ner WireSphere... macht die Wiresphere vielleicht intern ein dichtes Raycast-Netz auf?

Re: Ghostly Heist

Verfasst: 28.01.2024, 19:47
von gombolo
Ich denke das ist nicht der finale Code :) weil die Gizmos oft zum debuggen genutzt werden. Auf diesem Code aufbauend hat er die Methode programmiert. Oder täusche ich mich?

Mich hätte nur interessiert wie der Sichtkegel auf den Grund gezeichnet wird...ich dacht so an einen eigene Shader dafür oder so. Dann könnte man auch noch paar Effekte wie z.B. Unschärfe oder so hinzufügen.

Re: Ghostly Heist

Verfasst: 28.01.2024, 23:55
von grinseengel
Ok, hier ist ein Script mit rotem VisionCone und Ignore Raycast bei z.B. Wänden.

Bild
public class VisionCone : MonoBehaviour
{
public float coneAngle = 60f;
public float coneDistance = 10f;
private MeshFilter meshFilter;
private MeshRenderer meshRenderer;
private Mesh coneMesh;

void Start()
{
meshFilter = gameObject.AddComponent<MeshFilter>();
meshRenderer = gameObject.AddComponent<MeshRenderer>();
meshRenderer.material.color = Color.red;
coneMesh = new Mesh();
coneMesh.name = "Vision Cone Mesh";
meshFilter.mesh = coneMesh;
}

void Update()
{
int rayCount = 20;
float angleStep = coneAngle / rayCount;
float currentAngle = transform.eulerAngles.y - coneAngle * 0.5f;

Vector3[] vertices = new Vector3[rayCount + 1];
int[] triangles = new int[rayCount * 3];

// Start vertex at the center of the vision cone
vertices[0] = Vector3.zero;

for (int i = 0; i < rayCount; i++)
{
RaycastHit hit;
Vector3 direction = Quaternion.Euler(0, currentAngle + angleStep * i, 0) * transform.forward;

if (Physics.Raycast(transform.position, direction, out hit, coneDistance))
{
vertices[i + 1] = transform.InverseTransformPoint(hit.point);
}
else
{
vertices[i + 1] = transform.InverseTransformPoint(transform.position + direction * coneDistance);
}

// Create triangle indices for this segment of the cone
if (i < rayCount - 1)
{
triangles[i * 3] = 0;
triangles[i * 3 + 1] = i + 1;
triangles[i * 3 + 2] = i + 2;
}
}

coneMesh.Clear();
coneMesh.vertices = vertices;
coneMesh.triangles = triangles;
coneMesh.RecalculateNormals();
}
}

Re: Ghostly Heist

Verfasst: 29.01.2024, 09:55
von joeydee
Ah, im Prinzip machst du eine Anzahl Raycasts, und spannst dann einen Dreiecksfächer damit auf.

Re: Ghostly Heist

Verfasst: 29.01.2024, 15:43
von grinseengel
Ich habe das Gameplay noch etwas erweitert. Einmal gibt es Hindernisse die Geräusche machen. Hier sind es Glasflaschen und dann wird der Spieler, wenn er entdeckt wird für 4 Sekunden verfolgt.


Re: Ghostly Heist

Verfasst: 30.01.2024, 07:21
von marcgfx
Dem Kamerapunkt stimme ich zu. Ich würde vorschlagen die Kamera soll sich schneller auf den Zielpunkt (oder eine fixe Distanz vor den Spieler) hin bewegen als die Figur (in Unity einfach einen Regler dafür einbauen für das Finetuning), somit bekommt man auch eine grössere Sichtweite in Laufrichtung. Sieht wie immer gut aus!

Re: Ghostly Heist

Verfasst: 30.01.2024, 13:23
von Thoran
Sorry, fals die Frage bereits gestellt und beantwortet wurde, aber mit was machst du das Spiel? Mit Unity, Unreal oder etwas eigenem?

Re: Ghostly Heist

Verfasst: 30.01.2024, 18:11
von gombolo
ich vermute...nein ich bin mir sicher Unity... :) was man am gezeigten Quellcode erkennen kann.

Re: Ghostly Heist

Verfasst: 31.01.2024, 15:30
von grinseengel
Das Projekt wird mit Unity umgesetzt.

@marcgfx:
Ich würde vorschlagen die Kamera soll sich schneller auf den Zielpunkt (oder eine fixe Distanz vor den Spieler) hin bewegen als die Figur (in Unity einfach einen Regler dafür einbauen für das Finetuning), somit bekommt man auch eine grössere Sichtweite in Laufrichtung. Sieht wie immer gut aus!
Danke. Allerdings verstehe ich jetzt nicht so ganz wie du das mit der Kamera meinst.

Re: Ghostly Heist

Verfasst: 01.02.2024, 22:52
von grinseengel
Ich habe das Gameplay etwas erweitert. In der dritten Location gibt es Wachhunde und eine Drohne die das Gelände überfliegt.

Bild

Re: Ghostly Heist

Verfasst: 02.02.2024, 15:41
von grinseengel
Ein kleines Video von der vierten und letzten Location, dem Hafen.


Re: Ghostly Heist

Verfasst: 04.02.2024, 16:46
von marcgfx
grinseengel hat geschrieben: 31.01.2024, 15:30 @marcgfx:
Ich würde vorschlagen die Kamera soll sich schneller auf den Zielpunkt (oder eine fixe Distanz vor den Spieler) hin bewegen als die Figur (in Unity einfach einen Regler dafür einbauen für das Finetuning), somit bekommt man auch eine grössere Sichtweite in Laufrichtung. Sieht wie immer gut aus!
Danke. Allerdings verstehe ich jetzt nicht so ganz wie du das mit der Kamera meinst.
Deine Kamera ist immer auf der Spielfigur zentriert. Spielfigur ist Position A, Ziel ist Position B. Deine Kamera könnte jetzt eine Position zwischen A und B anvisieren. Somit sieht der Spieler weiter voraus in Laufrichtung. Die Kameraposition kannst du mit Lerp anpassen, dann ist es nicht so ruckartig. Vielleicht kann das sonst wer besser erklären. Bei Devader fokusiert die Kamera auf eine Position zwischen Spielfigur und Cursor.

Re: Ghostly Heist

Verfasst: 05.02.2024, 07:49
von Jonathan
Ein Exponentieller Filter ist auch super und so billig und so schnell, dass du kein Recht hast, ihn nicht einfach mal schnell auszuprobieren ;)

Für Lineare Interpolation brauchst du einen Start- und einen Endpunkt und einen Zeitparameter. Vermutlich willst du aber gar keine lineare Interpolation zwischen zwei Punkten sondern etwas glatteres, so ein Ease-in / Ease-out. Aber was machst du, wenn sich der Zielpunkt zwischendrin ändert? Weil sich das Kameraziel ja ständig ändert? Wie mappst du den Zeitparameter um, so dass alles flüssig bleibt?

Ein Exponentieller Filter geht ungefähr so:

Code: Alles auswählen

m_camera_position += (m_player.position - m_camera_position) * 4.f * delta_t;
Hier soll die Kamera immer auf die Spielerposition zeigen. Ansonsten ersetzt du letztere halt durch dein Kamera-Target. Je weiter die Ist-Position von der Soll-Position entfernt ist, desto schneller bewegt sich die Kamera auf das Ziel zu. Dort angekommen, bleibt sie automatisch stehen. Weil die Geschwindigkeit von der Entfernung abhängig ist, gibt es automatisch ein Ease-In. Du hast immer noch ruckartige Bewegungen zu Beginn der Kamerafahrt, aber das empfand ich bei meinem Spiel nie als sonderlich störend.
Die *4 ist einfach die Geschwindigkeit der Bewegung und delta_t ist entsprechend die Frametime. Insgesamt hast du also einen einzelnen Parameter den du steuern kannst und genau 0 Fallunterscheidungen. Es ist egal, ob du schon am Ziel bist, oder dich gerade auf das Ziel zu bewegst, oder ob du mittendrin das Ziel änderst. Du ersetzt eine einzelne Variable (Kamera-Position durch Ist-Position und Soll-Position) und hast eine einzige Zeile mehr Code und schon ist alles viel glatter. Und man kann das selbe natürlich auch überall sonst anwenden.

Also, was ich damit sagen will: Das oben ist nicht unbedingt der beste Filter um alles wunderbar weich zu machen. Aber wenn man den benötigten Aufwand und das Ergebnis mit "ist mir einfach alles egal, hier wird nix gefiltert und alles ist ruckelig" vergleicht, dann ist das schon ein ziemlich guter erster Ansatzpunkt...

Re: Ghostly Heist

Verfasst: 04.03.2024, 10:13
von grinseengel
Hallo,

es hat ja dann doch länger gedauert als ich mir vorgenommen hatte. Zwischendurch wusste ich nicht ob ich das Projekt überhaupt zum Ende bringe.
Letztendlich wäre es schade um die Zeit gewesen. Wie dem auch sein, hier die "fertige" Version zum Download.

Ich habe den Link erstmal raugenommen. Habe einen großen Bug drin.

Re: Ghostly Heist

Verfasst: 04.03.2024, 23:04
von grinseengel
So, jetzt sollte der Bug beseitigt sein.

Hier die, hoffe ich, bugfreie Version soweit ich sie getestet habe: https://grinseengel.itch.io/ghostly-heist

Re: Ghostly Heist

Verfasst: 18.03.2024, 01:21
von Endgegner
Jetzt habe ich mal die neuen Level gespielt und ein paar Anmerkungen dazu gesammelt.

Insgesamt vier schön gestaltete, abwechslungsreiche Level! Mit zwei davon hatte ich Schwierigkeiten (siehe unten).

Allgemein
  • In der Missionsauswahl ist ein (ungestylter) Löschen-Button, der da vermutlich nicht hingehört.
  • Ein Hinweis, der erscheint, sobald alle Missionsziele im Level erreicht sind, wäre nicht schlecht. Manchmal wusste ich nicht mehr, nach wie vielen Gegenständen genau ich suchen muss.
Die Goldmünzen
  • In diesem Level haben mir die "soften" Sichtfelder der Wachen gefallen, denn bei den normalen Sichtfeldern kann es manchmal hart sein, wenn man sie bloß mit der Fußspitze berührt und sofort verloren hat.
Die Störsender
  • In der Missionsbeschreibung ist von drei Störsendern die Rede, im Level sind aber sechs verteilt. Ist das ein Fehler in der Beschreibung oder muss man drei der insgesamt sechs Sender finden?
  • Einer der Sender befindet sich mitten im Sichtkegel einer stillstehenden Wache. Es scheint unmöglich zu sein, ihn einzusammeln ohne entdeckt zu werden.
Hafen
  • In diesem Level erkenne ich nur schlecht, wo ich als Spieler entlanggehen kann und wo nicht. Beispiel: Direkt am Anfang des Levels ist links und rechts jeweils ein Tor. Durch das linke kann man hindurch gehen, durch das rechte hingegen nicht. Optisch sehen beide allerdings gleich aus. Im Hafen gibt es viele weitere unsichtbare Barrieren, die es schwierig machen, sich im Level zurechtzufinden oder einzuschätzen, ob/wie man den Wachen ausweichen kann.
  • Die Sichtkegel der Wachen "blitzen" öfters durch die Mauern am Straßenrand hindurch. Wenn man sich dahinter versteckt, wird man trotzdem gesehen und hat verloren.
  • In der Missionsbeschreibung steht, man sollte das Radar nutzen, um die Flaschen zu finden. Welches Radar ist hier gemeint?
  • Ein Gebäude am Anfang des Levels hat mich an ein Bild von M. C. Escher erinnert. ;) (beachtlich viele Treppen)

Re: Ghostly Heist

Verfasst: 18.03.2024, 15:31
von grinseengel
Vielen Dank für dein umfangreiches Feedback zum Spiel. Warum das Radar nicht zu sehen ist, kann ich mir jetzt nicht erklären.Evtl. hab ich das Canvas fest skaliert. Siehst du bei dir das Radar unten rechts?

Bild

Die anderen Sachen bekomme ich schnell hin.

Ich frage mich jetzt, wie ich den Level 4 für den Spieler übersichtlicher gestalten kann. Dich hat ja die unichtbare Barriere sehr gestört. Ich muss ja eine Begrenzung einbauen (z. Bsp. Kaimauer). Sollte ich dann eher Wände oder Holzzäuse setzen an den besagten Stellen? Dann wäre es für den Spieler klar, das es dort nicht lang kann.

Ich mache mal eine neue Version fertig und würde dich bitten das insbesondere mit dem Radar dann nochmal zu testen.

Re: Ghostly Heist

Verfasst: 29.03.2024, 18:47
von Endgegner
grinseengel hat geschrieben: 18.03.2024, 15:31 Vielen Dank für dein umfangreiches Feedback zum Spiel. Warum das Radar nicht zu sehen ist, kann ich mir jetzt nicht erklären.Evtl. hab ich das Canvas fest skaliert. Siehst du bei dir das Radar unten rechts?
Nein, das Radar ist bei mir nicht zu sehen. Der "Zum Menü"-Button oben rechts hingegen schon.
Ich habe übrigens auf 1440 x 900 gespielt, also 16:10, falls dir das hilft.
grinseengel hat geschrieben: 18.03.2024, 15:31 Ich frage mich jetzt, wie ich den Level 4 für den Spieler übersichtlicher gestalten kann. Dich hat ja die unichtbare Barriere sehr gestört. Ich muss ja eine Begrenzung einbauen (z. Bsp. Kaimauer). Sollte ich dann eher Wände oder Holzzäuse setzen an den besagten Stellen? Dann wäre es für den Spieler klar, das es dort nicht lang kann.
Ich würde versuchen, die Begrenzungen möglichst "natürlich" wirken zu lassen. Auf der Straße könnte ich mir z.B. Schranken, Baustellen oder Fahrzeuge vorstellen; auf dem Hafengelände vielleicht Bauzäune, Mauern, Fässer oder Container. Oder man setzt einfach ein ganzes Gebäude dort hin. :)

Re: Ghostly Heist

Verfasst: 01.04.2024, 11:26
von grinseengel
Danke für die Ideen.
Nein, das Radar ist bei mir nicht zu sehen. Der "Zum Menü"-Button oben rechts hingegen schon.
Ich habe übrigens auf 1440 x 900 gespielt, also 16:10, falls dir das hilft.
Hmm...kann sein das ich diese Auflösung Unity nicht mitgegeben habe. Ich teste mal und melde mich.

Re: Ghostly Heist

Verfasst: 01.04.2024, 11:45
von scheichs
Frohe Ostern!

Das mit den UI Elementen bei unterschiedlichen Bildschirmformaten hatten wir ja schon öfters als Thema. Im "Game" Window kannst Du verschiedene Auflösungen/Aspect Ratios schnell durchschalten. Du kannst dort auch neue anlegen. Empfehlenswert sind zu 16:9 noch 4:3 und 21:9.

Re: Ghostly Heist

Verfasst: 02.04.2024, 08:48
von grinseengel
Das mit den UI Elementen bei unterschiedlichen Bildschirmformaten hatten wir ja schon öfters als Thema. Im "Game" Window kannst Du verschiedene Auflösungen/Aspect Ratios schnell durchschalten. Du kannst dort auch neue anlegen. Empfehlenswert sind zu 16:9 noch 4:3 und 21:9.
Ja, wir hatten das Thema schon öfters. Im Prinzip weis ich ja wie es geht, ich denke nur nicht dran.