Menu
CoddyTech

פריטים לאיסוף

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 17 מתוך 71.

פריט שניתן לאסוף הוא אזור הפעלה עם סקריפט משלו. כשמשהו נכנס אליו, הפריט בודק אם זה השחקן, מעביר לו את ההשפעה שלו ומשמיד את עצמו. הסקריפט של השחקן שומר את התוצאה ומספק עבורה מתודה ציבורית. ערכת הבריאות הזו מרפאת כל דבר שיש לו סקריפט Health:

// HealthPack.cs
public int amount = 25;

void OnTriggerEnter(Collider other)
{
    if (other.TryGetComponent(out Health health) && health.hp < 100)
    {
        health.Heal(amount);
        Destroy(gameObject);
    }
}
// Health.cs, על השחקן
public int hp = 50;

public void Heal(int amount)
{
    hp = Mathf.Min(hp + amount, 100);
    Debug.Log("HP: " + hp);
}

other.TryGetComponent(out Health health) הוא false עבור ארגז שמחליק לתוך הערכה, כך שרק אובייקט עם סקריפט Health יכול לאסוף אותה, ושחקן עם בריאות מלאה משאיר את הערכה למועד מאוחר יותר. הערכה מוצאת את השחקן דרך other, כך שאין צורך בהפניה מה-Inspector עבור אף ערכה, ושלב יכול להכיל חמישים מהן. Heal היא public כי סקריפט אחר קורא לה, ומגבלת 100 נמצאת ב-Health, המקום היחיד שמנהל את hp. Destroy(gameObject) מסיר את הערכה; Destroy(other.gameObject) היה מסיר את השחקן.

challenge icon

אתגר

קל

גרום לארגזי התחמושת למלא מחדש את ה־Blaster (ammo 4, maxAmmo 10).

  1. ב־Blaster.cs, הוסף public int AddAmmo(int amount): int taken = Mathf.Min(amount, maxAmmo - ammo);, הוסף אותו ל־ammo, תעד "Ammo: " + ammo והחזר את taken.
  2. ב־AmmoCrate.cs, כאשר other.TryGetComponent(out Blaster blaster), קרא ל־blaster.AddAmmo(amount); ול־Destroy(gameObject);.

לחץ על "שחק" והתקדם ימינה: הקונסולה מציגה Ammo: 7, ואז Ammo: 10. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class AmmoCrate : MonoBehaviour
{
    public int amount = 3;

    void OnTriggerEnter(Collider other)
    {
        // ה-Blaster של השחקן לוקח את התחמושת, והארגז נעלם
    }
}

כל השיעורים ביחידה פיזיקה ומשחקיות

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