מדדי חיים
שיעור 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, אבל עדיין אפשר לקרוא למתודות שלו. כל אויב הוא עותק נפרד של קדם-ההכנה, עם פס משלו.
אתגר
קשההצג מד בריאות מעל כל אויב לאחר שהוא נפגע.
- ב־
HealthBar, הוסף[SerializeField] private Transform fill;ואתpublic void Show(float fraction): הפעל את המד והגדר אתfill.localScale = new Vector3(fraction, 1f, 1f);. - ב־
Enemy, הוסף[SerializeField] private HealthBar healthBar;; לאחר ש־TakeDamageמפחיתה את כמות הבריאות, קרא ל־healthBar.Show((float)health / data.maxHealth);.
לחץ על „שחק”: המדדים יופיעו ויתקצרו כשהמגדלים יפגעו באויבים. לאחר מכן לחץ על „בדיקה”.
נסו בעצמכם
using UnityEngine;
// יופיע בהמשך: המד מעל האויב שמציג כמה חיים נותרו לו.
public class HealthBar : MonoBehaviour
{
}
כל השיעורים ביחידה משחק Unity: הגנת מגדלים
תרגלו בעצמכם: Unity אונליין