הגנת מגדלים — גרסה קלה
חלק מהיחידה ארכיטקטורת משחקים ב-Unity במסלול ה-Unity של Coddy. שיעור 48 מתוך 50.
זוחלים צועדים לאורך הדרך לעבר הבסיס שלך, ומגדל יחיד מגן עליו. המגדל יורה ברגים לעבר הזוחל הקרוב אליו ביותר כל עוד הוא בטווח, וכל זוחל שהוא מפיל מעניק זהב. מקש הרווח מוציא את הזהב על השדרוג הבא של המגדל: כל רמה מגיעה רחוק יותר, יורה מהר יותר או פוגעת חזק יותר. זוחל שמגיע לבסיס מצליח לעבור. הרמות הן נתוני משחק שמעצבים מכווננים בנכס, בלי לגעת בקוד, והמגדל יורה הרבה ברגים, לכן הוא משתמש בהם שוב ממאגר במקום ליצור ולהשמיד אחד עבור כל ירייה.
כתוב שני סקריפטים: TowerData, סוג הנכס, ו-Tower. Creep, Bolt ו-CreepSpawner מוכנים.
אתגר
קשההחלון Inspector מספק ל־Tower את data (נכס Arrow), את boltPrefab ואת infoText. קרא את מקש הרווח באמצעות Keyboard.current של Input System.
- בקובץ
TowerData.cs: מחלקהTowerLevelשהחלון Inspector יכול להציג, ובהpublic float range,public float fireEvery,public int damageו־public int cost(המחיר של ההגעה לרמה הזו), וכןTowerData, שהוא ScriptableObject עם אפשרות בתפריט Create ועםpublic List<TowerLevel> levels. נכס Arrow מכיל שלוש רמות: טווח 4, ירי בכל 1 שנייה, נזק 1, עלות 0; טווח 5, ירי בכל 0.6 שנייה, נזק 1, עלות 6; טווח 6, ירי בכל 0.4 שנייה, נזק 2, עלות 12. - המגדל מתחיל ברמה הראשונה עם 0 זהב, ו־
infoTextמציג את שניהם, כך:Level 1, 0 gold, בכל פעם שהם משתנים. - כאשר חלפו
fireEveryהשניות של הרמה מאז הירייה האחרונה, ויש יצור בטווח (ה־Collider של יצור נמצא במרחק של עדrangeמהמגדל, כפי שמוצא אותוPhysics.OverlapSphere), המגדל יורה על היצור הקרוב אליו ביותר. הוא לוקח קליע מתוךObjectPool<Bolt>, מציב אותו במיקום המגדל וקורא ל־bolt.Launch(creep, damage, pool.Release): הקליע קורא לארגומנט האחרון הזה כשהוא מסיים, וכך מוחזר למאגר. קליע מושבת בזמן שהוא ממתין במאגר ומופעל כשהוא נלקח ממנו. - כל יצור שמת משלם את ה־
bountyשלו בזהב: יש להאזין לאירוע הסטטיCreep.Killed. - מקש הרווח קונה את הרמה הבאה, אם יש כזו ואם כמות הזהב מספיקה לכיסוי ה־
costשלה: העלות מופחתת מכמות הזהב, והמגדל עולה רמה ומתעד זאת ביומן, כך:Tower level 2. אחרת, לחיצה על מקש הרווח לא עושה דבר.
לחץ על Play, החזק את הדרך ושדרג, ואז לחץ על Check.
נסו בעצמכם
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;
public class Tower : MonoBehaviour
{
[SerializeField] private TowerData data;
[SerializeField] private Bolt boltPrefab;
[SerializeField] private TMP_Text infoText;
private int level;
private int gold;
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה ארכיטקטורת משחקים ב-Unity
1רכיבים, לא היררכיות
רכיבים קטניםסקריפט בסיס לאויברכיבים מופשטיםרכיבים שעובדים יחדסיכום: צריח מודולרי