Menu
CoddyTech

רשימות ב-Inspector

חלק מהיחידה ארכיטקטורת משחקים ב-Unity במסלול ה-Unity של Coddy. שיעור 16 מתוך 50.

[System.Serializable] של רשומות הוא טבלה שממלאים ב-Inspector. השומר הזה עובר במסלול של תחנות וממתין בכל אחת מהן למשך הזמן שמצוין ברשומה שלה:

[System.Serializable]
public class Stop
{
    public Transform point;
    public float wait = 1f;
}

public class Patrol : MonoBehaviour
{
    public float speed = 3f;
    public List<Stop> stops;
    private int current;
    private float waited;

    void Update()
    {
        Stop stop = stops[current];
        transform.position = Vector3.MoveTowards(transform.position, stop.point.position, speed * Time.deltaTime);
        if (transform.position != stop.point.position) return;
        waited += Time.deltaTime;
        if (waited >= stop.wait)
        {
            waited = 0f;
            current = (current + 1) % stops.Count;
        }
    }
}

ב-Inspector מופיעים Stops עם מספר הרשומות שלו וחלונית נפתחת לכל רשומה: Element 0, Element 1 וכן הלאה, ולכל אחת יש Point ו-Wait. כפתור + מוסיף רשומה, כפתור המינוס מסיר את הרשומה שנבחרה, והידית שמשמאל לשורה מאפשרת לגרור אותה למקום חדש במסלול. הקוד קורא את הרשימה כרגיל: stops.Count רשומות, stops[current].point, ו-(current + 1) % stops.Count חוזר לתחנה הראשונה אחרי האחרונה. מעצב רמות יכול להגדיר לשומר אחד שלוש תחנות ולאחר עשר, בלי לגעת בסקריפט.

מערך, public Stop[] stops;, מוצג באותו אופן. כפתור + של Unity מעתיק את הרשומה האחרונה, כך שתחנה חדשה מתחילה עם אותה נקודה ואותו זמן המתנה כמו זו שמעליה. Unity לא מציגה או שומרת רשימות של רשימות, כגון List<List<Stop>>, או Dictionary. במקום זאת, עוטפים את הרשימה הפנימית במחלקה מסוג [Serializable], למשל Route עם List<Stop> משלה, ושומרים רשימה של המחלקות האלה.

challenge icon

אתגר

קל

מירה וטום תקועים ליד גשר שבור. כתבו את תיבת הדו־שיח בקובץ Dialogue.cs, על ה-HUD. הסצנה מקשרת את box, את speakerText ואת lineText, והשיחה מוכנה ברשימה בשם lines.

  • הכריזו על מחלקה בשם Line עם שתי מחרוזות ציבוריות, speaker ו-text, שה-Inspector יכול להציג, והוסיפו ל-Dialogue רשימה ציבורית בשם lines מסוג List<Line>.
  • בהתחלה התיבה מציגה את השורה הראשונה: את הדובר שלה ב-speakerText ואת הטקסט שלה ב-lineText.
  • כל לחיצה על מקש הרווח מציגה את השורה הבאה. בשיחה יכול להיות כל מספר של שורות, לכן הסתמכו על מספר הפריטים ברשימה.
  • לחיצה על מקש הרווח בשורה האחרונה מסתירה את התיבה ורושמת ביומן Dialogue over. לאחר מכן, לחיצה על מקש הרווח לא עושה דבר.

לחצו על Play, קראו את השיחה בעזרת מקש הרווח, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;
using TMPro;

public class Dialogue : MonoBehaviour
{
    public GameObject box;
    public TMP_Text speakerText;
    public TMP_Text lineText;

    void Start()
    {
        // הצג את השורה הראשונה
    }

    void Update()
    {
        // Space: השורה הבאה, או סוף השיחה
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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