Menu
CoddyTech

השמדה

חלק מהיחידה יסודות הסקריפטים ב-Unity במסלול ה-Unity של Coddy. שיעור 67 מתוך 85.

Destroy(obj) מסירה GameObject מהסצנה, כולל הילדים שלו. ארגומנט שני מוסיף השהיה: Destroy(obj, 2f) מסירה אותו בעוד 2 שניות, והסקריפט שקרא לה ממשיך מיד. התותח הזה יורה בלחיצה על Space, וכל קליע שהוא יוצר נעלם כעבור 2 שניות:

public GameObject bulletPrefab;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
        Destroy(bullet, 2f);
    }
}

העבירו את העותק, לא את ה-prefab: הקריאה Destroy(bulletPrefab) נדחית עם ההודעה Destroying assets is not permitted to avoid data loss. העבירו GameObject כשאתם מתכוונים לאובייקט. בתוך סקריפט, gameObject הוא האובייקט שעליו נמצא הסקריפט, לכן Destroy(gameObject) מסירה את האובייקט הזה, ואילו Destroy(this) מסירה רק את הסקריפט ומשאירה את האובייקט במקומו.

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

challenge icon

אתגר

בינוני

הסר את המטבעות הישנים, ותן למקש הרווח להסיר את המתקן.

  1. שמור את המטבע החדש, GameObject coin = Instantiate(...);, ואז קרא ל־Destroy(coin, 3f);.
  2. בעת Input.GetKeyDown(KeyCode.Space), קרא ל־Destroy(gameObject);. Destroy(this) יסיר רק את הסקריפט.

לחץ על "שחק": כל מטבע נעלם אחרי 3 שניות, ומקש הרווח עוצר את יצירת המטבעות החדשים. ואז לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class CoinChute : MonoBehaviour
{
    public GameObject coinPrefab;
    public float interval = 1f;
    float timer;

    void Update()
    {
        timer += Time.deltaTime;
        if (timer >= interval)
        {
            Instantiate(coinPrefab, transform.position, Quaternion.identity);
            timer -= interval;
        }

        // מקש הרווח: השמדת המגלשה
    }
}

כל השיעורים ביחידה יסודות הסקריפטים ב-Unity

תרגלו בעצמכם: Unity אונליין