Ghostly Heist

Die neue Action, jetzt mit 30% mehr Action! Geht vom 14.04.23 bis zum 23.04.23
joeydee
Establishment
Beiträge: 1035
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Ghostly Heist

Beitrag 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.
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag 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.
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag 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.

Benutzeravatar
gombolo
Establishment
Beiträge: 125
Registriert: 26.01.2011, 20:33

Re: Ghostly Heist

Beitrag von gombolo »

cool :)
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag von grinseengel »

Hier ein kleiner Einblick in die dritte Mission:

Endgegner
Beiträge: 18
Registriert: 19.12.2020, 18:43

Re: Ghostly Heist

Beitrag 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!
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag 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
Benutzeravatar
gombolo
Establishment
Beiträge: 125
Registriert: 26.01.2011, 20:33

Re: Ghostly Heist

Beitrag 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...
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag 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);
    }
}
Benutzeravatar
Schrompf
Moderator
Beiträge: 4814
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Ghostly Heist

Beitrag 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?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
gombolo
Establishment
Beiträge: 125
Registriert: 26.01.2011, 20:33

Re: Ghostly Heist

Beitrag 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.
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag 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();
}
}
joeydee
Establishment
Beiträge: 1035
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: Ghostly Heist

Beitrag von joeydee »

Ah, im Prinzip machst du eine Anzahl Raycasts, und spannst dann einen Dreiecksfächer damit auf.
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag 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.

Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: Ghostly Heist

Beitrag 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!
Benutzeravatar
Thoran
Establishment
Beiträge: 224
Registriert: 15.05.2009, 12:51
Wohnort: Stuttgart
Kontaktdaten:

Re: Ghostly Heist

Beitrag von Thoran »

Sorry, fals die Frage bereits gestellt und beantwortet wurde, aber mit was machst du das Spiel? Mit Unity, Unreal oder etwas eigenem?
Wer Rechtschreibfehler findet, darf diese gerne behalten.
Mein Entwicklertagebuch
Aktuelle Projekte: Universum: Domination (ehemalig AlphaOmega),Universum: Sternenjäger, PixelWars: Highscore-based Top-Down-Spaceshooter
Spieleengine Unreal 5
Benutzeravatar
gombolo
Establishment
Beiträge: 125
Registriert: 26.01.2011, 20:33

Re: Ghostly Heist

Beitrag von gombolo »

ich vermute...nein ich bin mir sicher Unity... :) was man am gezeigten Quellcode erkennen kann.
Mein aktuelles Projekt -> FirstStrike PLAY THE DEMO

BOSSFIGHT -> schau dir das Video an

MAL SEHEN -> Rakete

WAS ICH SONST SO MACHEN -> Grafik und Design
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag 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.
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag von grinseengel »

Ich habe das Gameplay etwas erweitert. In der dritten Location gibt es Wachhunde und eine Drohne die das Gelände überfliegt.

Bild
Benutzeravatar
grinseengel
Establishment
Beiträge: 776
Registriert: 29.03.2011, 13:47
Echter Name: Andreas

Re: Ghostly Heist

Beitrag von grinseengel »

Ein kleines Video von der vierten und letzten Location, dem Hafen.

Benutzeravatar
marcgfx
Establishment
Beiträge: 2050
Registriert: 18.10.2010, 23:26

Re: Ghostly Heist

Beitrag 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.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2336
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Ghostly Heist

Beitrag 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...
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten