רשימות ב־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> משלה, ושומרים רשימה של מחלקות כאלה.
אתגר
קלהציגו את השיחה של Mira ו-Tom, שורה אחת בכל פעם.
- הגדירו מחלקה
[System.Serializable]בשםLineעם מחרוזות ציבוריותspeakerו-text, והוסיפוpublic List<Line> lines;. - בהתחלה, הציגו את
lines[0]: את הדובר שלה בתוךspeakerText, ואת הטקסט שלה בתוךlineText. - מקש הרווח מציג את השורה הבאה, עד
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
1רכיבים, לא היררכיות
רכיבים קטניםסקריפט בסיסי לאויברכיבים מופשטיםרכיבים שפועלים יחדחזרה: צריח מודולריחזרה: תותח כפול4נתונים שעברו סריאליזציה
מחלקות שניתנות לסריאליזציהרשימות ב־Inspectorטיפוסי Enum ב־Inspectorחזרה: טבלת שללהגרלת השלל2ממשקים ב-Unity
IDamageableממשקים ו-TryGetComponentGetComponentsסיכום: מקש אינטראקציהסיכום: הקרוב ביותר בטווחתרגלו בעצמכם: Unity אונליין