Unity'de Gizlilik Mekaniğinin Eklenmesi

Gizlilik mekanikleri, oyuncuların düşmanlar tarafından tespit edilmekten kaçınmasını sağlayan oyun sistemleridir. Genellikle *Assassin's Creed* veya *Hitman* gibi gizlilik tabanlı oyunlarda kullanılan bu mekanikler, görüş konileri, ses algılama, saklanma noktaları ve oyuncu görünürlük seviyeleri gibi özellikler içerir. Gizlilik mekaniklerinin eklenmesi, stratejik düşünmeyi teşvik ederek ve dikkatli planlamayı ödüllendirerek oyun deneyimini daha ilgi çekici hale getirebilir.

Bu eğitimde, Unity'te temel gizlilik mekanikleri oluşturacağız. Oyuncu, görüş konileri olan düşmanlar tarafından tespit edilmekten kaçınacaktır. Oyuncu koniye girerse, tespit edilecektir.

Adım 1: Sahneyi Kurma

Basit bir Unity sahnesi oluşturarak başlayın:

  1. Yeni bir Unity projesi oluşturun.
  2. Zemin görevi görecek bir Plane ekleyin.
  3. Oyuncu'u temsil edecek bir 3B model (örneğin, bir Kapsül) ekleyin.
  4. Düşman'u temsil eden başka bir 3B model (örneğin bir Küp) ekleyin.
  5. Oyuncuyu ve Düşmanı Uçakta farklı yerlere yerleştirin.

Adım 2: Düşman Görüş Konisini Oluşturma

Düşmanın görüşünü koni biçimli bir tetik alanı kullanarak simüle edeceğiz:

  1. Hiyerarşi'de sağ tıklayın ve Oluştur > 3B Nesne > Silindir seçeneğini seçin.
  2. Ölçeğini ayarlayarak silindirin boyutunu koni gibi değiştirin (örneğin, X = 1, Y = 0,5, Z = 1).
  3. Düz tabanı öne bakacak şekilde döndürün (örneğin, Döndürme X = 90).
  4. Bunu Enemy GameObject'in bir çocuğu olarak ekleyin.
  5. Koninin Çarpıştırıcısı değerini Tetikleyici olarak ayarlayın.
  6. Ölçeği ve pozisyonu düşmanın görüş alanına uyacak şekilde ayarlayın.

Adım 3: Düşman Algılama Komut Dosyasını Yazma

Şimdi, Oyuncuyu görüş konisi içerisinde tespit etmek için bir komut dosyası oluşturalım:

  1. EnemyVision adında bir C# betiği oluşturun.
  2. Komut dosyasını Düşman Oyun Nesnesine ekleyin.
  3. Aşağıdaki kodu kullanın:
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!");
        }
    }
}

Bu betik, Oyuncunun görüş konisine girip girmediğini veya çıkıp çıkmadığını kontrol eder. Oyuncu Oyun Nesnesinin Oyuncu etiketine sahip olduğundan emin olun.

Adım 4: Oyuncu Görünürlüğünün Eklenmesi

Sonra, tespiti daha dinamik hale getirmek için bir görünürlük mekaniği uygulayalım. Oyuncu çömelirken veya saklanırken tespit edilmesi daha zor olacak:

  1. PlayerVisibility adında yeni bir betik oluşturun.
  2. Bunu Player GameObject'e ekleyin.
  3. Aşağıdaki kodu kullanın:
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
        }
    }
}

Bu betik, Oyuncunun görünürlük seviyesini eylemlerine göre ayarlar. Düşmanlar daha sonra bu değeri Oyuncunun ne kadar kolay tespit edileceğine karar vermek için kullanabilirler.

Adım 5: Düşman Algılamanın Geliştirilmesi

Şimdi görünürlüğü algılama ile birleştirelim. EnemyVision betiğini aşağıdaki gibi değiştirelim:

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!");
        }
    }
}

Bu betik, Oyuncunun görünürlük düzeyini kullanarak tespit edilip edilmediğini belirler.

Adım 6: Gizlilik Mekaniğini Test Etme

Kurulumunuzu test etmek için:

  1. Unity Editör'de Oynat düğmesine basın.
  2. Tespiti tetiklemek için Oyuncuyu Düşmanın görüş alanına getirin.
  3. Görünürlüğü azaltmak ve algılamayı nasıl etkilediğini test etmek için çömelme düğmesine (örneğin, "C") basın.

İsteğe bağlı geliştirmeler

Gizlilik mekaniğinizi geliştirmek için bazı fikirler:

  • Ses Algılama: Düşmanın, Oyuncunun çıkardığı sese (örneğin koşması) göre onu algıladığı bir mekanik eklendi.
  • Saklanma Noktaları: Oyuncunun fark edilemeyeceği saklanma noktaları yaratın.
  • Düşmanları Devriye Gezdirme: Düşmanları Unity'nin NavMesh sistemini kullanarak belirli bir yol boyunca devriye gezmeleri için programlayın.
  • Uyarı Durumları: Düşmanlar için uyarı seviyeleri ekleyin (örneğin; şüpheli, arayan, saldırgan).

Çözüm

Unity'te görüş konileri ve görünürlük seviyeleri gibi temel gizlilik mekaniklerini uyguladık. Bu sistemler daha karmaşık gizlilik oyunlarının temeli olarak hizmet edebilir. Oyununuz için tamamen sürükleyici bir gizlilik deneyimi yaratmak için ek özellikler deneyin.