Lägger till Stealth Mechanics i Unity
Stealth-mekanik är spelsystem som tillåter spelare att undvika upptäckt av fiender. Vanligtvis används i stealth-baserade spel som *Assassin's Creed* eller *Hitman*, dessa mekaniker inkluderar funktioner som synkoner, ljuddetektering, gömställen och spelarens synlighetsnivåer. Att lägga till smygmekanik kan göra spelandet mer engagerande genom att uppmuntra strategiskt tänkande och belöna noggrann planering.
I den här handledningen skapar vi grundläggande stealth-mekanik i Unity. Spelaren kommer att undvika upptäckt av fiender som har synkoner. Om spelaren går in i konen, kommer de att upptäckas.
Steg 1: Konfigurera scenen
Börja med att skapa en enkel Unity scen:
- Skapa ett nytt Unity-projekt.
- Lägg till ett Plane för att fungera som marken.
- Lägg till en 3D-modell (t.ex. en kapsel) för att representera Player.
- Lägg till ytterligare en 3D-modell (t.ex. en kub) för att representera en Enemy.
- Placera spelaren och fienden på olika platser på planet.
Steg 2: Skapa enemy Vision Cone
Vi kommer att simulera fiendens vision med hjälp av ett konformat triggerområde:
- Högerklicka i hierarkin och välj Skapa > 3D-objekt > Cylinder.
- Ändra storlek på cylindern så att den ser ut som en kon genom att justera dess skala (t.ex. X = 1, Y = 0,5, Z = 1).
- Rotera den så att den platta basen är vänd framåt (t.ex. Rotation X = 90).
- Fäst den som ett barn till Enemy GameObject.
- Ställ in konens Collider till en Trigger.
- Justera skalan och positionen för att matcha fiendens synfält.
Steg 3: Skriva fiendens upptäcktsskript
Låt oss nu skapa ett skript för att upptäcka spelaren i visionkonen:
- Skapa ett C#-skript som heter EnemyVision.
- Bifoga skriptet till Enemy GameObject.
- Använd följande kod:
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!");
}
}
}
Detta skript kontrollerar om spelaren går in i eller lämnar synkonen. Se till att Player GameObject har taggen Player.
Steg 4: Lägga till spelarsynlighet
Låt oss sedan implementera en synlighetsmekaniker för att göra upptäckten mer dynamisk. Spelaren blir svårare att upptäcka när han hukar eller gömmer sig:
- Skapa ett nytt skript som heter PlayerVisibility.
- Fäst den till Player GameObject.
- Använd följande kod:
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
}
}
}
Det här skriptet justerar spelarens synlighetsnivå baserat på deras handlingar. Fiender kan senare använda detta värde för att bestämma hur lätt spelaren upptäcks.
Steg 5: Förbättra fiendens upptäckt
Låt oss nu kombinera synlighet med upptäckt. Ändra EnemyVision-skriptet enligt följande:
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!");
}
}
}
Det här skriptet använder spelarens synlighetsnivå för att avgöra om de upptäcks.
Steg 6: Testa smygmekaniken
Så här testar du din inställning:
- Tryck på knappen Play i Unity Editor.
- Flytta spelaren in i fiendens visionkon för att utlösa upptäckt.
- Tryck på hukknappen (t.ex. "C") för att minska sikten och testa hur det påverkar upptäckten.
Valfria förbättringar
Här är några idéer för att utöka din smygmekanik:
- Ljudavkänning: Lägg till en mekaniker där fienden upptäcker spelaren baserat på ljudet de gör (t.ex. löpning).
- Gömställen: Skapa gömställen där spelaren inte kan upptäckas.
- Patrullerande fiender: Programmera fiender att patrullera längs en bestämd väg med Unitys NavMesh-system.
- Varningsstater: Lägg till varningsnivåer för fiender (t.ex. misstänkta, sökande, aggressiva).
Slutsats
Vi har implementerat grundläggande smygmekanik i Unity, inklusive siktkoner och siktnivåer. Dessa system kan fungera som grunden för mer komplext smygspel. Experimentera med ytterligare funktioner för att skapa en helt uppslukande smygupplevelse för ditt spel.