Stealth-mechanica toevoegen in Unity
Stealth-mechanismen zijn gameplay-systemen waarmee spelers detectie door vijanden kunnen vermijden. Deze mechanismen worden vaak gebruikt in stealth-games zoals *Assassin's Creed* of *Hitman* en bevatten functies zoals zichtkegels, geluidsdetectie, verstopplekken en zichtbaarheidsniveaus van spelers. Het toevoegen van stealth-mechanismen kan de gameplay aantrekkelijker maken door strategisch denken aan te moedigen en zorgvuldige planning te belonen.
In deze tutorial maken we basis stealth-mechanismen in Unity. De speler vermijdt detectie door vijanden met zichtkegels. Als de speler de kegel betreedt, worden ze gedetecteerd.
Stap 1: De scène opzetten
Begin met het maken van een eenvoudige Unity-scène:
- Maak een nieuw Unity-project.
- Voeg een Vlak toe om als grond te dienen.
- Voeg een 3D-model (bijvoorbeeld een capsule) toe om de speler weer te geven.
- Voeg een ander 3D-model toe (bijvoorbeeld een kubus) om een vijand voor te stellen.
- Plaats de speler en de vijand op verschillende locaties in het vliegtuig.
Stap 2: De vijandelijke zichtkegel creëren
We simuleren het zicht van de vijand met behulp van een kegelvormig trekkergebied:
- Klik met de rechtermuisknop in de hiërarchie en selecteer Maken > 3D-object > Cilinder.
- Pas de schaal van de cilinder aan zodat deze op een kegel lijkt (bijv. X = 1, Y = 0,5, Z = 1).
- Draai het zo dat de platte basis naar voren wijst (bijv. Rotatie X = 90).
- Voeg het toe als een onderliggend object van het Enemy GameObject.
- Stel de Collider van de kegel in als Trigger.
- Pas de schaal en positie aan het gezichtsveld van de vijand aan.
Stap 3: Het script voor vijanddetectie schrijven
Laten we nu een script maken om de speler binnen de zichtkegel te detecteren:
- Maak een C#-script met de naam EnemyVision.
- Koppel het script aan het Enemy GameObject.
- Gebruik de volgende code:
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!");
}
}
}
Dit script controleert of de speler de zichtkegel betreedt of verlaat. Zorg ervoor dat het Player GameObject de tag Player heeft.
Stap 4: Spelerszichtbaarheid toevoegen
Laten we vervolgens een zichtbaarheidsmechanisme implementeren om detectie dynamischer te maken. De speler zal moeilijker te detecteren zijn wanneer hij hurkt of zich verstopt:
- Maak een nieuw script genaamd PlayerVisibility.
- Koppel het aan het Player GameObject.
- Gebruik de volgende code:
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
}
}
}
Dit script past het zichtbaarheidsniveau van de speler aan op basis van zijn acties. Vijanden kunnen deze waarde later gebruiken om te bepalen hoe gemakkelijk de speler wordt gedetecteerd.
Stap 5: Verbetering van vijanddetectie
Laten we nu zichtbaarheid combineren met detectie. Wijzig het EnemyVision-script als volgt:
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!");
}
}
}
Dit script gebruikt het zichtbaarheidsniveau van de speler om te bepalen of deze wordt gedetecteerd.
Stap 6: De stealth-mechanica testen
Om uw opstelling te testen:
- Klik op de Play-knop in de Unity-editor.
- Beweeg de speler naar de zichtkegel van de vijand om detectie te activeren.
- Druk op de hurkknop (bijv. "C") om de zichtbaarheid te verminderen en te testen hoe dit de detectie beïnvloedt.
Optionele verbeteringen
Hier zijn enkele ideeën om je stealth-mechanica uit te breiden:
- Geluidsdetectie: Voeg een mechanisme toe waarbij de vijand de speler detecteert op basis van het geluid dat hij maakt (bijvoorbeeld rennen).
- Schuilplaatsen: Creëer schuilplaatsen waar de speler niet meer te detecteren is.
- Patrouilleren van vijanden: Programmeer vijanden om langs een vast pad te patrouilleren met behulp van Unity's NavMesh-systeem.
- Waarschuwingsniveaus: Voeg waarschuwingsniveaus toe voor vijanden (bijv. verdacht, zoekend, agressief).
Conclusie
We hebben basis stealth-mechanismen geïmplementeerd in Unity, inclusief zichtkegels en zichtbaarheidsniveaus. Deze systemen kunnen dienen als basis voor complexere stealth-gameplay. Experimenteer met extra functies om een volledig meeslepende stealth-ervaring voor je game te creëren.