מדדי חיים
שיעור 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, אבל עדיין אפשר לקרוא למתודות שלו. כל אויב הוא עותק נפרד של קדם-ההכנה, עם פס משלו.
אתגר
קשה- ב־
HealthBar, הוסיפו Transform מסודרfill(ה־Inspector מגדיר את FillPivot של המד) ואתpublic void Show(float fraction), שמפעילה את ה־GameObject של המד ומשנה את קנה המידה שלfillלאורך ציר x לפיfraction. - ב־
Enemy, הוסיפו שדה מסודרhealthBar(מסוג HealthBar). בכל פעם ש־TakeDamage מפחיתה את הבריאות, הציגו את הבריאות שנותרה כשבר מתוךmaxHealth.
לכל prefab של אויב יש מד משלו: לא פעיל, עם הסקריפט HealthBar, וה־fill מתחת לציר שבקצהו השמאלי. לחצו על Play וצפו במדדים בזמן שהצריחים יורים, ואז לחצו על Check.
נסו בעצמכם
using UnityEngine;
// בהמשך: הפס מעל אויב שמציג כמה בריאות נותרה לו.
public class HealthBar : MonoBehaviour
{
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.