Menu
CoddyTech

גרום נזק לכל דבר

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

challenge icon

אתגר

בינוני

עכשיו הקרב מתנהל בשני הכיוונים. השאר את כל מה שבנית בשיעורים הקודמים. האויבים כבר לא מתויגים: ההנפה מוצאת את מה שהיא יכולה לפגוע בו באמצעות ממשק, והאויבים פוגעים בגיבור באמצעות אותו ממשק.

  • IDamageable מצהיר על מתודה אחת, void TakeDamage(int amount);.
  • Enemy מממש אותו. הוא מקבל את health, את damage ואת attackEvery, שמוגדרים ב-Inspector (ל-grunt הערכים הם 2, 1 ו-1; ל-dasher הערכים הם 1, 2 ו-1). TakeDamage מפחית את amount מ-health ומשמיד את האויב כשהערך מגיע ל-0 או פחות. בתוך Start, שמור גם את IDamageable של הגיבור. בכל פריים, כשהגיבור נמצא במרחק של עד 1.2 יחידות, קרא למתודה שלו TakeDamage(damage), לכל היותר פעם אחת בכל attackEvery שניות.
  • Hero מממש אותו, עם swingDamage (1), maxHealth (5) ו-safeTime (1) שמוגדרים ב-Inspector, ועם health שמתחיל בערך של maxHealth בתוך Awake. פגיעה מפחיתה את amount, רושמת את הבריאות כך: Hero HP: 4, ושומרת על הגיבור מפגיעות נוספות למשך safeTime שניות. כשהבריאות מגיעה ל-0, רשום The hero falls וכבה את סקריפט Hero (enabled = false). גיבור שנפל מתעלם מפגיעות.
  • ההנפה כבר לא בודקת תגים ולא משמידה דבר: היא קוראת ל-TakeDamage(swingDamage) על כל מה שנמצא בטווח ולפנים ושיש לו IDamageable.

לחץ על Play והילחם, ואז לחץ על Check.

נסו בעצמכם

// בשיעור מאוחר יותר נמלא את זה: כל דבר שיכול להיפגע.
public interface IDamageable
{
}

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