Menu
CoddyTech

מדדי חיים

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

פס מעל כל אויב מציג כמה בריאות נותרה לו. בקדם-הכנה של האויב הוא מורכב משתי קוביות דקות: רקע כהה ומילוי ירוק לפניו. רוחב המילוי הוא הבריאות שנותרה חלקי הבריאות המלאה, מספר בין 0 ל-1, והקטנת קנה המידה של ציר ה-x של המילוי לפי מספר זה מקצרת אותו. עם זאת, קובייה משנה את קנה המידה שלה סביב המרכז שלה, ולכן המילוי היה מתכווץ לכיוון האמצע משני הקצוות. המילוי נמצא תחת אובייקט pivot ריק בקצה השמאלי של הפס, והסקריפט משנה במקום זאת את קנה המידה של הציר: כל מה שמתחתיו מתכווץ לכיוון הקצה הזה, והפס מתרוקן מימין.

יש לחשב את השבר כמספרים מסוג float. health / data.maxHealth מחלק שני מספרים שלמים, ו-C# משמיט את החלק השברי של חלוקה בין מספרים שלמים: 6 / 9 הוא 0, ולכן הפס יציג ריק אחרי הפגיעה הראשונה. המרה של צד אחד תחילה, (float)health / data.maxHealth, נותנת 0.67. מכל מים שהמפלס בו עולה כלפי מעלה מהציר שבתחתית:

float level = (float)water / capacity;
waterPivot.localScale = new Vector3(1f, level, 1f);

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

challenge icon

אתגר

קשה

הצג מד בריאות מעל כל אויב לאחר שהוא נפגע.

  1. ב־HealthBar, הוסף [SerializeField] private Transform fill; ואת public void Show(float fraction): הפעל את המד והגדר את fill.localScale = new Vector3(fraction, 1f, 1f);.
  2. ב־Enemy, הוסף [SerializeField] private HealthBar healthBar;; לאחר ש־TakeDamage מפחיתה את כמות הבריאות, קרא ל־healthBar.Show((float)health / data.maxHealth);.

לחץ על „שחק”: המדדים יופיעו ויתקצרו כשהמגדלים יפגעו באויבים. לאחר מכן לחץ על „בדיקה”.

נסו בעצמכם

using UnityEngine;

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

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

תרגלו בעצמכם: Unity אונליין