Menu
CoddyTech

הגנת מגדלים — גרסה קלה

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

זוחלים צועדים לאורך הדרך לעבר הבסיס שלך, ומגדל יחיד מגן עליו. המגדל יורה ברגים לעבר הזוחל הקרוב אליו ביותר כל עוד הוא בטווח, וכל זוחל שהוא מפיל מעניק זהב. מקש הרווח מוציא את הזהב על השדרוג הבא של המגדל: כל רמה מגיעה רחוק יותר, יורה מהר יותר או פוגעת חזק יותר. זוחל שמגיע לבסיס מצליח לעבור. הרמות הן נתוני משחק שמעצבים מכווננים בנכס, בלי לגעת בקוד, והמגדל יורה הרבה ברגים, לכן הוא משתמש בהם שוב ממאגר במקום ליצור ולהשמיד אחד עבור כל ירייה.

כתוב שני סקריפטים: TowerData, סוג הנכס, ו-Tower. Creep, Bolt ו-CreepSpawner מוכנים.

challenge icon

אתגר

קשה

החלון 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;
}
quiz iconבחנו את עצמכם

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

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