Legger til Stealth Mechanics i Unity

Stealth-mekanikk er spillsystemer som lar spillere unngå oppdagelse av fiender. Vanligvis brukt i stealth-baserte spill som *Assassin's Creed* eller *Hitman*, inkluderer disse mekanikkene funksjoner som synskjegler, lyddeteksjon, gjemmesteder og spillersynlighetsnivåer. Å legge til stealth-mekanikk kan gjøre spillingen mer engasjerende ved å oppmuntre til strategisk tenkning og belønne nøye planlegging.

I denne opplæringen lager vi grunnleggende stealth-mekanikk i Unity. Spilleren vil unngå oppdagelse av fiender som har synskjegler. Hvis spilleren går inn i kjeglen, vil de bli oppdaget.

Trinn 1: Sette opp scenen

Start med å lage en enkel Unity-scene:

  1. Opprett et nytt Unity-prosjekt.
  2. Legg til et Plane for å tjene som bakken.
  3. Legg til en 3D-modell (f.eks. en kapsel) for å representere Player.
  4. Legg til en annen 3D-modell (f.eks. en kube) for å representere en Enemy.
  5. Plasser spilleren og fienden på forskjellige steder på flyet.

Trinn 2: Lage fiendens visjonskjegle

Vi vil simulere fiendens syn ved å bruke et kjegleformet utløserområde:

  1. Høyreklikk i hierarkiet og velg Opprett > 3D-objekt > Sylinder.
  2. Endre størrelsen på sylinderen slik at den ser ut som en kjegle ved å justere skalaen (f.eks. X = 1, Y = 0,5, Z = 1).
  3. Roter den slik at den flate basen vender fremover (f.eks. Rotasjon X = 90).
  4. Fest den som et barn av Enemy GameObject.
  5. Sett kjeglens Collider til å være en Trigger.
  6. Juster skalaen og posisjonen for å matche fiendens synsfelt.

Trinn 3: Skrive fiendens deteksjonsskript

La oss nå lage et skript for å oppdage spilleren i synskjeglen:

  1. Lag et C#-skript kalt EnemyVision.
  2. Fest skriptet til Enemy GameObject.
  3. Bruk følgende kode:
using UnityEngine;

public class EnemyVision : MonoBehaviour
{
    public bool playerDetected = false;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = true;
            Debug.Log("Player Detected!");
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = false;
            Debug.Log("Player Lost!");
        }
    }
}

Dette skriptet sjekker om spilleren går inn eller ut av synskjeglen. Sørg for at Player GameObject har taggen Player.

Trinn 4: Legge til spillersynlighet

La oss deretter implementere en synlighetsmekaniker for å gjøre deteksjon mer dynamisk. Spilleren vil være vanskeligere å oppdage når han huker seg eller gjemmer seg:

  1. Lag et nytt skript kalt PlayerVisibility.
  2. Fest den til Player GameObject.
  3. Bruk følgende kode:
using UnityEngine;

public class PlayerVisibility : MonoBehaviour
{
    public float visibility = 1.0f; // Full visibility

    void Update()
    {
        // Reduce visibility when crouching (e.g., pressing "C")
        if (Input.GetKey(KeyCode.C))
        {
            visibility = 0.5f;
            Debug.Log("Crouching: Reduced visibility!");
        }
        else
        {
            visibility = 1.0f; // Default visibility
        }
    }
}

Dette skriptet justerer spillerens synlighetsnivå basert på handlingene deres. Fiender kan senere bruke denne verdien til å bestemme hvor lett spilleren oppdages.

Trinn 5: Forbedre fiendedeteksjon

La oss nå kombinere synlighet med deteksjon. Endre EnemyVision-skriptet som følger:

using UnityEngine;

public class EnemyVision : MonoBehaviour
{
    public bool playerDetected = false;

    void OnTriggerStay(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            PlayerVisibility playerVisibility = other.GetComponent<PlayerVisibility>();

            if (playerVisibility != null && playerVisibility.visibility > 0.75f)
            {
                playerDetected = true;
                Debug.Log("Player Detected with high visibility!");
            }
            else
            {
                Debug.Log("Player not visible enough to detect.");
            }
        }
    }

    void OnTriggerExit(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            playerDetected = false;
            Debug.Log("Player Lost!");
        }
    }
}

Dette skriptet bruker spillerens synlighetsnivå for å avgjøre om de blir oppdaget.

Trinn 6: Testing av stealth-mekanikken

For å teste oppsettet:

  1. Trykk på Play-knappen i Unity Editor.
  2. Flytt spilleren inn i fiendens synskjegle for å utløse deteksjon.
  3. Trykk på hukeknappen (f.eks. "C") for å redusere synlighet og teste hvordan det påvirker deteksjonen.

Valgfrie forbedringer

Her er noen ideer for å utvide stealth-mekanikken din:

  • Lyddeteksjon: Legg til en mekaniker der fienden oppdager spilleren basert på støyen de lager (f.eks. løping).
  • Skjulepunkter: Lag gjemmesteder der spilleren ikke kan oppdages.
  • Patruljere fiender: Programmer fiender til å patruljere langs en bestemt sti ved å bruke Unitys NavMesh-system.
  • Varselstater: Legg til varslingsnivåer for fiender (f.eks. mistenkelige, søkende, aggressive).

Konklusjon

Vi har implementert grunnleggende stealth-mekanikk i Unity, inkludert synskjegler og siktnivåer. Disse systemene kan tjene som grunnlaget for mer kompleks stealth-spilling. Eksperimenter med tilleggsfunksjoner for å skape en fullstendig oppslukende stealth-opplevelse for spillet ditt.