גלים
שיעור 4 מתוך 18 בקורס משחק Unity: הגנת מגדלים של Coddy.
האויבים מגיעים בגלים: קבוצה של סוג אחד, במרווחים לאורך המסלול, ואז הפסקה לפני הקבוצה הבאה. גל הוא כמה מספרים, ולכן הוא מחלקה של [System.Serializable], וה־spawner מחזיק List<Wave> שה־Inspector מציג כשורות למילוי. בלי [System.Serializable] Unity לא יכול לשמור Wave, ה־Inspector לא מציג את הרשימה, והיא נשארת ריקה.
התזמון מתבצע באמצעות coroutine: לולאה שיוצרת אויבים ואז מבצעת yield ל־new WaitForSeconds(...) כדי להמתין בלי לעצור את שאר המשחק. מופע זיקוקים פועל באמצעות מטחי הירי שלו באותו אופן, עם הפסקה אחרי כל מטח:
IEnumerator Show()
{
foreach (Salvo salvo in salvos)
{
for (int i = 0; i < salvo.rockets; i++)
{
Instantiate(rocketPrefab, launcher.position, Quaternion.identity);
yield return new WaitForSeconds(salvo.gap);
}
yield return new WaitForSeconds(pause);
}
}האויבים הם עכשיו prefabs. השדות של prefab יכולים להצביע רק על נכסים ועל אובייקטים שבתוך ה־prefab, לכן המערך waypoints של אויב חדש ריק. ה־spawner הוא הבעלים של המסלול ומעביר אותו לכל אויב מיד אחרי Instantiate. Instantiate מחזירה את הטיפוס שהיא מקבלת, כך שכאשר השדה של ה־prefab הוא מטיפוס Enemy, היא מחזירה את ה־Enemy החדש, מוכן להגדרה.
אתגר
קלה־Grunt וה־Runner הם עכשיו קדם־הגדרות, והצטרפו אליהם Tank ו־Boss עם EnemyData משלהם. אובייקט ה־Spawner נמצא ב־WP0. שלח את האויבים בגלים:
- ב־
Wave.cs, הפוך את Wave למחלקה שניתנת לסריאליזציה, עם השדות הציבורייםenemy(אויב: קדם־ההגדרה),count(מספר שלם) ו־spacing(מספר עשרוני, מספר השניות בין שני אויבים). - ב־
WaveSpawner, הוסף שלושה שדות פרטיים מסודרים:waves(רשימה מסוגList<Wave>),waypoints(מערך Transform) ו־timeBetweenWaves(מספר עשרוני). - מתוך
Start, הפעל קורוטינה שעוברת על הגלים לפי הסדר. עבור כל גל: המתן במשךtimeBetweenWaves, הצג ביומן את מספר הגל החל מ־1, בתורWave 1, ואז צור אתcountהאויבים שלו בנקודת הציון הראשונה, הקצה לכל אחד מהם אתwaypoints, והמתן במשךspacingאחרי כל אויב. - אחרי הגל האחרון, הצג ביומן
All waves sent.
המפקח ממלא את שמונת הגלים של המשחק ואת ההפסקה בת 8 השניות. לחץ על Play וצפה בגלים הראשונים מגיעים, ואז לחץ על Check.
נסו בעצמכם
using UnityEngine;
// יגיע בהמשך: שולח את האויבים לאורך המסלול בגלים.
public class WaveSpawner : MonoBehaviour
{
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.