הוספת מכניקת התגנבות באחדות

מכניקת התגנבות היא מערכות משחק המאפשרות לשחקנים להימנע מזיהוי על ידי אויבים. בשימוש נפוץ במשחקים מבוססי התגנבות כמו *Assassin's Creed* או *Hitman*, המכניקה הזו כוללת תכונות כמו קונוס ראייה, זיהוי קול, נקודות מסתור ורמות נראות של השחקנים. הוספת מכניקת התגנבות יכולה להפוך את המשחק למושך יותר על ידי עידוד חשיבה אסטרטגית ותגמול תכנון קפדני.

במדריך זה, ניצור מכניקת התגנבות בסיסית ב-Unity. השחקן ימנע מזיהוי על ידי אויבים שיש להם קונוסי ראייה. אם השחקן ייכנס לקונוס, הם יתגלו.

שלב 1: הגדרת הסצנה

התחל ביצירת סצנה פשוטה של ​​Unity:

  1. צור פרויקט Unity חדש.
  2. הוסף מטוס כדי לשמש כקרקע.
  3. הוסף מודל תלת מימד (למשל, קפסולה) כדי לייצג את Player.
  4. הוסף מודל תלת מימדי נוסף (למשל, קובייה) כדי לייצג Enemy.
  5. מקם את השחקן והאויב במקומות שונים במטוס.

שלב 2: יצירת קונוס חזון האויב

נדמה את חזון האויב באמצעות אזור טריגר בצורת חרוט:

  1. לחץ לחיצה ימנית בהיררכיה ובחר Create > 3D Object > Cylinder.
  2. שנה את גודל הגליל כך שייראה כמו חרוט על ידי התאמת קנה המידה שלו (למשל, X = 1, Y = 0.5, Z = 1).
  3. סובב אותו כך שהבסיס השטוח פונה קדימה (למשל, סיבוב X = 90).
  4. צרף אותו בתור ילד של Enemy GameObject.
  5. הגדר את Collider של הקונוס להיות טריגר.
  6. התאם את קנה המידה והמיקום כך שיתאימו לשדה הראייה של האויב.

שלב 3: כתיבת סקריפט זיהוי האויב

כעת, בואו ניצור סקריפט לזיהוי הנגן בתוך קונוס הראייה:

  1. צור סקריפט C# בשם EnemyVision.
  2. צרף את הסקריפט ל-Enemy GameObject.
  3. השתמש בקוד הבא:
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!");
        }
    }
}

סקריפט זה בודק אם הנגן נכנס או יוצא מחרוט הראייה. ודא של Player GameObject יש את התג Player.

שלב 4: הוספת נראות נגן

לאחר מכן, הבה ניישם מכונאי נראות כדי להפוך את הזיהוי לדינמי יותר. יהיה קשה יותר לזהות את השחקן כאשר הוא מתכופף או מסתתר:

  1. צור סקריפט חדש בשם PlayerVisibility.
  2. צרף אותו ל-Player GameObject.
  3. השתמש בקוד הבא:
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
        }
    }
}

סקריפט זה מתאים את רמת הנראות של הנגן בהתבסס על פעולותיו. אויבים יכולים מאוחר יותר להשתמש בערך זה כדי להחליט באיזו קלות ניתן לזהות את השחקן.

שלב 5: שיפור זיהוי האויב

כעת, בואו נשלב נראות עם זיהוי. שנה את הסקריפט EnemyVision באופן הבא:

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

סקריפט זה משתמש ברמת הנראות של הנגן כדי לקבוע אם הם מזוהים.

שלב 6: בדיקת מכניקת התגנבות

כדי לבדוק את ההגדרה שלך:

  1. לחץ על הלחצן Play בעורך Unity.
  2. הזז את השחקן לתוך חרוט הראייה של האויב כדי להפעיל זיהוי.
  3. לחץ על כפתור הכפיפה (למשל, "C") כדי להפחית את הראות ולבדוק כיצד זה משפיע על הזיהוי.

שיפורים אופציונליים

הנה כמה רעיונות להרחבת מכניקת ההתגנבות שלך:

  • זיהוי קול: הוסף מכונאי שבו האויב מזהה את הנגן על סמך הרעש שהוא משמיע (למשל, ריצה).
  • נקודות מסתור: צור נקודות מסתור שבהן הנגן הופך לבלתי ניתן לזיהוי.
  • סיור אויבים: תכנת אויבים לפטרול לאורך נתיב מוגדר באמצעות מערכת NavMesh של Unity.
  • מדינות התראה: הוסף רמות התראה עבור אויבים (למשל, חשודים, מחפשים, תוקפניים).

מַסְקָנָה

יישמנו מכניקת התגנבות בסיסית ב-Unity, כולל קונוסי ראייה ורמות נראות. מערכות אלו יכולות לשמש בסיס למשחק התגנבות מורכב יותר. נסה עם תכונות נוספות כדי ליצור חווית התגנבות סוחפת לחלוטין למשחק שלך.