מדריך 2D מתקפת תגרה לאחדות

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

דרישות מוקדמות

1. הגדרת הפרויקט והסצנה

  • צור פרויקט דו-ממדי Unity חדש (אם עדיין לא נעשה).
  • ייבא או צור ספרייט דמויות. שים אותו בסצנה.

2. הגדרת אנימציית מתקפת תגרה

  • בחלון הפרויקט, לחץ לחיצה ימנית וצור "Animator Controller". תן לזה "CharacterAnimator".
  • הקצה אנימטור זה לדמות על ידי בחירת הדמות וגרירת האנימטור לרכיב "Animator".
  • פתח את חלון ההנפשה. עם הדמות שנבחרה, צור אנימציה חדשה בשם "MeleeAttack".
  • לשם הפשטות, בואו נניח שההתקפה הזו היא אגרוף מהיר. הנפש את הספרייט כדי לדמות פעולה זו.

3. יצירת ה- Attack Hitbox

  • הוסף GameObject ריק בתור ילד לדמות. זה ישמש כ-hitbox להתקפה.
  • צרף a "Box Collider 2D" ל-GameObject הריק. התאם את הגודל והמיקום שלו כך שיתאימו למקום שבו הדמות תפגע במהלך האגרוף.
  • השבת את ה-hitbox על ידי ביטול הסימון בתיבה "Active" שלה. זה מבטיח שהוא מופעל רק במהלך אנימציית ההתקפה.

4. כתיבת לוגיקה של ההתקפה

  • צור סקריפט חדש, שם לו "MeleeAttack" ואז הדבק בתוכו את הקוד למטה:

'MeleeAttack.cs'

using UnityEngine;

public class MeleeAttack : MonoBehaviour
{
    private Animator animator;
    private BoxCollider2D hitbox;

    private void Start()
    {
        animator = GetComponent<Animator>();
        hitbox = transform.Find("HitboxGameObjectName").GetComponent<BoxCollider2D>();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) // Attack on Space key press.
        {
            animator.SetTrigger("MeleeAttack");
            Invoke("ActivateHitbox", 0.2f); // Activate hitbox after 0.2 seconds.
            Invoke("DeactivateHitbox", 0.4f); // Deactivate hitbox after 0.4 seconds.
        }
    }

    void ActivateHitbox()
    {
        hitbox.gameObject.SetActive(true);
    }

    void DeactivateHitbox()
    {
        hitbox.gameObject.SetActive(false);
    }
}

5. טיפול בהתנגשויות

  • שנה את התגים של אובייקטי משחק האויב ל-"Enemy".
  • צור סקריפט חדש, שם לו "Hitbox" ואז הדבק בתוכו את הקוד למטה:

'Hitbox.cs'

using UnityEngine;

public class Hitbox : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Enemy"))
        {
            // Damage or destroy the enemy.
            Destroy(collision.gameObject);
        }
    }
}
  • צרף את הסקריפט "Hitbox" לאובייקט hitbox.

שאלות להתייחסות:

  1. איך ה-hitbox יודע מתי להפעיל במהלך האנימציה?: ה-hitbox מופעל על ידי הפונקציה 'Invoke' בסקריפט 'MeleeAttack.cs'. ניתן להתאים את התזמון בהתאם לפריים בו אמורה לנחות המתקפה.
  2. מה קורה אם ה-hitbox מתנגש במספר אויבים בו-זמנית?: שימוש בסקריפט 'Hitbox' המסופק, כל אויב עם התג "Enemy" שמתנגש ב-hitbox יושמד. התאם את הסקריפט כדי לנהל נזק או אפקטים אחרים.
  3. האם ניתן לשנות את כפתור ההתקפה ממקש הרווח?: כן, בסקריפט 'MeleeAttack.cs', השורה if ('Input.GetKeyDown(KeyCode.Space)') בודקת את לחיצת מקש הרווח. החלף את 'KeyCode.Space' בערך 'KeyCode' אחר כדי לשנות את כפתור ההתקפה.

סיכום

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