איך לירות ירייה באחדות

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

הגדרת הסצנה

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

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

יצירת סקריפט Shot

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

בצע את השלבים הבאים כדי ליצור את הסקריפט:

  1. בעורך Unity, לחץ לחיצה ימנית בחלון הפרויקט ובחר Create > C# Script. תן שם לתסריט Shot.cs.
  2. לחץ פעמיים על הקובץ Shot.cs כדי לפתוח אותו בעורך הקוד שלך.
  3. החלף את קוד ברירת המחדל בסקריפט הבא:
using UnityEngine;

public class Shot : MonoBehaviour
{
    public GameObject projectilePrefab;  // The prefab of the projectile to shoot
    public Transform firePoint;          // The point where the projectile will be fired from
    public float projectileSpeed = 20f;  // Speed of the projectile

    void Update()
    {
        // Check if the player presses the fire button (default is left mouse button or spacebar)
        if (Input.GetButtonDown("Fire1"))
        {
            FireShot();
        }
    }

    void FireShot()
    {
        // Instantiate the projectile at the fire point's position and rotation
        GameObject projectile = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);

        // Get the Rigidbody component of the projectile to apply physics
        Rigidbody rb = projectile.GetComponent();

        if (rb != null)
        {
            // Apply force to the projectile to make it move forward
            rb.velocity = firePoint.forward * projectileSpeed;
        }
    }
}

סקריפט זה מבצע את המשימות הבאות:

  • מגדיר projectilePrefab ציבורי כדי להחזיק את אובייקט הקליע.
  • משתמש ב-firePoint כדי לציין מהיכן מקור הירייה.
  • משתמש ב-projectileSpeed כדי לשלוט במהירות הקליע.
  • בודק קלט של שחקן באמצעות Input.GetButtonDown("Fire1"), המאזין לפעולת "Fire1" (בדרך כלל ממופה ללחצן העכבר השמאלי או למקש הרווח).
  • מראה קליע ב-firePoint ומחיל עליו מהירות קדימה.

הקצאת הסקריפט ב Unity

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

  1. בחר את "Player" GameObject בסצנה.
  2. גרור את הסקריפט Shot.cs אל ה-"Player" כדי לצרף אותו.
  3. בחלון המפקח תראה את השדות של הסקריפט. הקצה את ה-prefab של הקליע (למשל, הכדור הקטן שיצרת) לחריץ ProjectilePrefab.
  4. צור GameObject ריק מתחת לאובייקט הנגן וקרא לו "FirePoint". מקם אותו מול השחקן או היכן שתרצה שהקליע ישרץ ממנו.
  5. גרור את האובייקט "FirePoint" לשדה FirePoint בסקריפט.

בדיקת הזריקה

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

שאלות נפוצות

איך אני משמיד את הקליע לאחר ירי?

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

Destroy(projectile, 5f); // Destroys the projectile after 5 seconds

כיצד אוכל להוסיף אפקטים קוליים או אנימציות לצילום?

אתה יכול להוסיף אפקטים קוליים באמצעות רכיב AudioSource. כל שעליך לעשות הוא להוסיף אותו לנגן ולהשמיע צליל בשיטת FireShot:

AudioSource audioSource = GetComponent();
audioSource.Play();

עבור אנימציות, אתה יכול להפעיל אנימציה באמצעות רכיב Animator או על ידי הפעלה/השבתה של מצבי GameObject מסוימים בשיטת FireShot.

איך אני גורם לקליע לקיים אינטראקציה עם עצמים אחרים?

כדי לגרום לקליע לקיים אינטראקציה עם עצמים אחרים, ודא שלקליע יש רכיב Rigidbody ו-Collider. לאחר מכן תוכל לכתוב סקריפט לטיפול בזיהוי התנגשות באמצעות OnCollisionEnter או OnTriggerEnter:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Enemy"))
    {
        Destroy(collision.gameObject); // Destroy enemy on collision
        Destroy(gameObject);           // Destroy the projectile
    }
}

מַסְקָנָה

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