Menu
CoddyTech

מדדי חיים

שיעור 16 מתוך 18 בקורס משחק 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, הוסיפו Transform מסודר fill (ה־Inspector מגדיר את FillPivot של המד) ואת public void Show(float fraction), שמפעילה את ה־GameObject של המד ומשנה את קנה המידה של fill לאורך ציר x לפי fraction.
  2. ב־Enemy, הוסיפו שדה מסודר healthBar (מסוג HealthBar). בכל פעם ש־TakeDamage מפחיתה את הבריאות, הציגו את הבריאות שנותרה כשבר מתוך maxHealth.

לכל prefab של אויב יש מד משלו: לא פעיל, עם הסקריפט HealthBar, וה־fill מתחת לציר שבקצהו השמאלי. לחצו על Play וצפו במדדים בזמן שהצריחים יורים, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;

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

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

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