Menu
CoddyTech

הגדרות משותפות

חלק מהיחידה ארכיטקטורת משחקים ב-Unity במסלול ה-Unity של Coddy. שיעור 21 מתוך 50.

הגדרת קושי משנה את כל האויבים בבת אחת, ולכן מתאים להשתמש בנכס אחד שכולם מפנים אליו. כל אויב קורא את המהירות של הנכס בכל פריים, וכפתור Hard בתפריט כותב לאותו נכס:

[CreateAssetMenu(menuName = "Game/Difficulty")]
public class Difficulty : ScriptableObject
{
    public float enemySpeed = 2f;
}
public class Enemy : MonoBehaviour
{
    public Difficulty difficulty;
    public Transform player;

    void Update()
    {
        float step = difficulty.enemySpeed * Time.deltaTime;
        transform.position = Vector3.MoveTowards(transform.position, player.position, step);
    }
}
// DifficultyMenu.cs, מחובר ל-onClick של הכפתור Hard
public Difficulty difficulty;

public void SetHard()
{
    difficulty.enemySpeed = 4f;
}

השדות של האויבים והשדה של התפריט מחזיקים את אותו נכס, כך שלאחר SetHard() העדכון הבא של כל אויב יקרא את הערך 4, כולל אויבים שייווצרו מאוחר יותר מפריפאב שהנכס נמצא בשדה שלו. זה עובד מפני שכל אויב קורא את difficulty.enemySpeed כשהוא זז. אויב שהעתיק את הערך לשדה משלו ב־Start ממשיך לנוע במהירות 2.

המקום שבו שינוי שנעשה במהלך המשחק נשמר תלוי במקום שבו המשחק רץ. גרסה שנבנתה טוענת את הנכסים שלה כפי שהיו בזמן הבנייה בכל פעם שהיא מופעלת, כך שבחירת Hard של השחקן נעלמת במשחק הבא: כדי לשמור בחירה, שמור אותה בעזרת PlayerPrefs וכתוב אותה בחזרה לנכס כשהמשחק מתחיל. בעורך, הנכס בפרויקט שלך הוא זה שהמשחק משנה, והשינוי נשאר גם אחרי שלוחצים על Stop, בניגוד לאובייקטים בסצנה, שחוזרים לערכי ה־Inspector שלהם. ההפעלה הבאה של Play מתחילה במצב Hard, והנכס נשאר עם הערך 4 עד שתשנה אותו בחזרה.

challenge icon

אתגר

בינוני

שלוש סירות מפרש חוצות את המפרץ, נדחפות על ידי הרוח, ומקשי החצים למעלה ולמטה מגבירים ומחלישים את הרוח בין 0 ל־5. אבל לכל סירה יש שדה windStrength משלה, ו־WindVane משנה רק את strength שלה, ולכן החצים לא משנים דבר על פני המים. השתמשו במקום זאת בנכס משותף. הקובץ WindSettings.cs מוכן, ונכס Breeze של הפרויקט (strength 2) נמצא בשדה wind של כל סירה ושל WindVane.

  • Sailboat: החליפו את windStrength בשדה ציבורי wind מסוג WindSettings, והשיטו את הסירה לפי wind.strength.
  • WindVane: החליפו את strength בשדה ציבורי wind, וגרמו לחצים לשנות את wind.strength, כך שכל סירה תרגיש את השינוי. הטקסט מציג אותו, למשל Wind: 3.
  • בכל פעם שמשחק נבנה הוא טוען מחדש את נכס Breeze, ולכן הרוח של השחקן תאבד. שמרו את wind.strength תחת מפתח PlayerPrefs בשם Wind בכל פעם שהוא משתנה, וב־Start החזירו לנכס ערך שמור. שחקן חדש ישמור על הערך 2 של הנכס.

לחצו על Play, שנו את הרוח, ואז לחצו על Stop ועל Play שוב, ואז על Check.

נסו בעצמכם

using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

public class WindVane : MonoBehaviour
{
    public TMP_Text windText;
    public float strength = 2f;

    void Start()
    {
        Show();
    }

    void Update()
    {
        if (Keyboard.current.upArrowKey.wasPressedThisFrame)
        {
            strength = Mathf.Min(strength + 1f, 5f);
            Show();
        }
        if (Keyboard.current.downArrowKey.wasPressedThisFrame)
        {
            strength = Mathf.Max(strength - 1f, 0f);
            Show();
        }
    }

    void Show()
    {
        windText.text = "Wind: " + strength;
    }
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה ארכיטקטורת משחקים ב-Unity