Menu
CoddyTech

רשימות ב־Inspector

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

רשימה של ערכי [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

אתגר

קל

הציגו את השיחה של Mira ו-Tom, שורה אחת בכל פעם.

  1. הגדירו מחלקה [System.Serializable] בשם Line עם מחרוזות ציבוריות speaker ו-text, והוסיפו public List<Line> lines;.
  2. בהתחלה, הציגו את lines[0]: את הדובר שלה בתוך speakerText, ואת הטקסט שלה בתוך lineText.
  3. מקש הרווח מציג את השורה הבאה, עד lines.Count. אחרי השורה האחרונה, הסתירו את box והציגו ביומן Dialogue over; לאחר מכן, לחיצה על מקש הרווח לא תעשה דבר.

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

נסו בעצמכם

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

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

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

    void Update()
    {
        // Space: השורה הבאה, או סוף השיחה
    }
}

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

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