קרב בוס
חלק מהיחידה ארכיטקטורת משחקים ב-Unity במסלול ה-Unity של Coddy. שיעור 50 מתוך 50.
גולם אבן שומר על השער המוביל אל מחוץ לזירה. הוא צועד לעברך, וכשאתה מתקרב הוא מרים את אגרופיו לשנייה וחובט בקרקע, מה שפוגע בך אם אתה עדיין בקרבתו. אחרי חבטה הוא נח, ורק אז החרב שלך יכולה לפגוע בו: עור האבן שלו הודף כל פגיעה בזמן שהוא הולך או מתכונן לחבוט. הצבע שלו מציין מה הוא עושה: אפור כשהוא הולך, אדום כשהוא מתכונן לחבוט, וציאן כשהוא נח. הורד את בריאותו ל־0 והשער ייפתח. המד בראש המסך מתעדכן אחרי כל פגיעה.
כתוב את המוח של הגולם כמכונת מצבים, עם מחלקה לכל מצב: Boss, וכן ChaseState, WindupState ו־RestState בקובץ BossStates.cs. השחקן, מד הבריאות, השער, IState, StateMachine ו־IDamageable כבר מוכנים.
אתגר
קשההחלון Inspector נותן ל־Boss את player, speed (2), slamRange (2.5), windupTime (1), restTime (2), slamDamage (2) ו־maxHealth (6), ומחבר את UnityEvent של onDefeated אל Open של השער. PlayerDistance() ו־Tint(color) מוכנות.
Bossמממשת אתIDamageable. ב־Awakeהיא מגדירה את הבריאות שלה ל־maxHealthויוצרתStateMachineואת שלושת המצבים שלה, שנשמרים בשדות ציבורייםmachine,chase,windupו־rest(כל מצב מקבל את הבוס בבנאי שלו). ב־Startהיא מעדכנת אתHealthChangedעם הבריאות שלה ועםmaxHealth, ומתחילה במצבchase; בכל פריים היא מקדמת את המכונה.ChaseState: צובעת את הגולם ב־Color.gray, ומצעידה אותו לעבר השחקן לאורך הקרקע במהירותspeed. ברגע שהשחקן נמצא בטווחslamRange, היא עוברת למצב ההכנה.WindupState: צובעת אותו ב־Color.redועומדת ללא תנועה במשךwindupTimeשניות. לאחר מכן היא כותבת ביומןSlam!, גורמת לשחקן נזק בגובהslamDamageדרךIDamageableשלו אם השחקן עדיין בטווחslamRange, ועוברת למצב המנוחה.RestState: צובעת אותו ב־Color.cyanוממתינהrestTimeשניות, ואז חוזרת למצב המרדף. כל הכנה וכל מנוחה נמשכות את מלוא הזמן שלהן.TakeDamageמשפיעה רק כשהגולם נמצא במצב המנוחה שלו ועדיין עומד: היא מפחיתה את הכמות מהבריאות ומעדכנת אתHealthChanged. כשהבריאות מגיעה ל־0, היא כותבת ביומןThe golem falls, מפעילה אתonDefeatedומשביתה את עצמה.
לחצו על Play, התחמקו מההטחות והכו כשהוא נח, ואז לחצו על Check.
נסו בעצמכם
using System;
using UnityEngine;
using UnityEngine.Events;
public class Boss : MonoBehaviour
{
public Transform player;
public float speed = 2f;
public float slamRange = 2.5f;
public float windupTime = 1f;
public float restTime = 2f;
public int slamDamage = 2;
public int maxHealth = 6;
public event Action<int, int> HealthChanged;
public UnityEvent onDefeated;
// מה המרחק של השחקן על פני הקרקע.
public float PlayerDistance()
{
Vector3 d = player.position - transform.position;
d.y = 0f;
return d.magnitude;
}
// אפור בזמן שהוא הולך, אדום בזמן שהוא מתכונן למתקפה, ציאן בזמן שהוא נח.
public void Tint(Color color)
{
GetComponent<Renderer>().material.color = color;
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה ארכיטקטורת משחקים ב-Unity
1רכיבים, לא היררכיות
רכיבים קטניםסקריפט בסיס לאויברכיבים מופשטיםרכיבים שעובדים יחדסיכום: צריח מודולרי