Menu
CoddyTech

הצגה והסתרה

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

SetActive(false) מכבה אובייקט GameObject שלם: הוא לא מוצג, הוא כבר לא מתנגש, הסקריפטים שעליו מפסיקים לקבל Update(), וגם הילדים שלו מושבתים יחד איתו. SetActive(true) מחזיר את הכול לפעולה, ו־activeSelf מציין אם הוא פעיל. הסקריפט הזה, שמוצמד לכפתור, מסתיר את הדלת שבשדה door שלו בלחיצת עכבר:

public GameObject door;

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        door.SetActive(false);
    }
}

סקריפט שמסתיר את האובייקט של עצמו באמצעות gameObject.SetActive(false) לא יכול להחזיר אותו לפעולה, כי Update() שלו כבר לא רץ. לכן המתג נמצא על אובייקט אחר, שמחזיק הפניה לאובייקט שהוא מציג ומסתיר.

enabled משבית רכיב אחד ומשאיר את שאר האובייקט ללא שינוי. GetComponent<Renderer>().enabled = false הופך אובייקט לבלתי נראה, אבל הקוליידר שלו עדיין חוסם דברים: קיר בלתי נראה. סקריפט עם enabled = false כבר לא מקבל קריאות ל־Update(), אבל האובייקט נשאר בסצנה, עדיין מוצג ועדיין מתנגש, ושאר הרכיבים שלו ממשיכים לפעול.

challenge icon

אתגר

בינוני

השתמשו במקש הרווח כדי להסתיר את הגשר ולהחזיר אותו.

  1. בתוך Update(), כאשר מתקיים Input.GetKeyDown(KeyCode.Space), קראו ל-bridge.SetActive(...) כדי להחליף את מצב הגשר כולו, כולל הקוליידר.
  2. העבירו את ההפך ממצבו: bridge.SetActive(!bridge.activeSelf);.

לחצו על "שחק" ולחצו על מקש הרווח כמה פעמים: הגשר נעלם וחוזר. לאחר מכן לחצו על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class BridgeSwitch : MonoBehaviour
{
    public GameObject bridge;

    void Update()
    {
        // לחיצה על Space מסתירה את הגשר, והלחיצה הבאה מציגה אותו שוב
    }
}

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

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