Menu
CoddyTech

ירי

שיעור 9 מתוך 18 בקורס משחק Unity: הגנת מגדלים של Coddy.

מגדל יורה לעבר המטרה שלו fireRate פעמים בשנייה. במקום להשתמש בטיימר שסופר לאחור, המגדל שומר את הזמן של הירייה הבאה שלו: כשהזמן ב־Time.time מגיע אליו, המגדל יורה ומקדם אותו ב־1f / fireRate שניות. ממטרה שמתיזה מים פעמיים בשנייה:

if (Time.time >= nextSpray)
{
    Spray();
    nextSpray = Time.time + 1f / spraysPerSecond;
}

כל ירייה היא Projectile שעף אל המטרה שלו באמצעות MoveTowards, עוקב אחריה כשהיא הולכת ופוגע בה כשהוא מגיע. הוא לא צריך לדעת שהוא פגע ב־Enemy: הוא מבקש מהמטרה את IDamageable, הממשק של כל דבר שיכול לספוג נזק, כפי שמוסבר בפרק הממשקים, כך שאפשר לירות בכל דבר שמממש אותו.

מטרה יכולה למות בזמן שירייה נמצאת באוויר, בעקבות ירייה של מגדל אחר. לאחר מכן, target של הירייה שווה ל־null, כפי שקורה לכל אובייקט Unity שהושמד, ולירייה כבר אין לאן לעוף, ולכן היא משמידה את עצמה.

challenge icon

אתגר

בינוני
  1. IDamageable מצהיר על void TakeDamage(int amount). יש לממש אותו ב-Enemy: הכמות מופחתת מהבריאות שלו, וברגע שהיא 0 או פחות, האויב מושמד.
  2. ב-Projectile, הוסיפו משתנה speed מסוג float עם מאפיין serialized (ה-Prefab מגדיר אותו ל-12), ואת public void Launch(Transform target, int damage), ששומר את שניהם. ב-Update, עופו לכיוון המטרה במהירות speed; עם ההגעה, קראו ל-TakeDamage(damage) במימוש של IDamageable שלה והשמידו את הקליע. אם המטרה נעלמה, השמידו את הקליע.
  3. ב-Tower, הוסיפו int ציבורי בשם damage, float ציבורי בשם fireRate (יריות לשנייה) ו-projectilePrefab עם מאפיין serialized (מסוג Projectile). כל עוד יש למגדל מטרה, ירו לכל היותר fireRate פעמים בשנייה: צרו מופע של הקליע מעט לפני הראש, במיקום head.position + head.forward * 0.6f, ושגרו אותו אל המטרה עם הנזק של המגדל.

ה-Prefab של ArrowTower מגדיר נזק של 2 ו-fireRate של 1.5, והקליע שלו הוא ArrowShot. לחצו על Play, בנו מגדלים ועצרו את הגל הראשון, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;

// בהמשך: ירייה שעפה ממגדל אל המטרה שלה.
public class Projectile : MonoBehaviour
{
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה משחק Unity: הגנת מגדלים