Menu
CoddyTech

גלים כנתונים

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

הגלים של שלב הם רשימה: שלושה חיילים פשוטים, אחריהם שני בריונים, ואז בוס. אם כותבים אותם בקוד של משגר, כל שלב דורש קוד משלו. אם כותבים אותם כנתונים, הרשימה נכנסת לנכס, נכס אחד לכל שלב, וסקריפט משגר אחד קורא את הנכס שניתן לו. כל רשומה היא מחלקה מסוג [System.Serializable], ולכן ה־Inspector של הנכס מציג את הרשימה:

using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class Wave
{
    public GameObject enemy;
    public int count = 1;
    public float spacing = 1f;
}

[CreateAssetMenu(menuName = "Game/Wave Set")]
public class WaveSet : ScriptableObject
{
    public List<Wave> waves;
    public float restBetweenWaves = 3f;
}

הכול נמצא בקובץ אחד, WaveSet.cs: ה־ScriptableObject צריך קובץ בשם משלו, והמחלקה הרגילה Wave יכולה להיות לצידו. בחרו נכס WaveSet וה־Inspector יציג את Waves עם Size ואת השורות Element 0, Element 1, שבכל אחת מהן Enemy, Count ו־Spacing; הכפתור + מוסיף גל. המשגר עובר על הרשימה בקורוטינה:

public class WaveSpawner : MonoBehaviour
{
    public WaveSet waveSet;

    void Start()
    {
        StartCoroutine(SendWaves());
    }

    IEnumerator SendWaves()
    {
        foreach (Wave wave in waveSet.waves)
        {
            for (int i = 0; i < wave.count; i++)
            {
                Instantiate(wave.enemy, transform.position, Quaternion.identity);
                yield return new WaitForSeconds(wave.spacing);
            }
            yield return new WaitForSeconds(waveSet.restBetweenWaves);
        }
        Debug.Log("Last wave sent");
    }
}

כש־Level1 מכיל 3 חיילים פשוטים בהפרש של 0.5 שניות ואז 2 בריונים, החיילים הפשוטים מופיעים בשניות 0, 0.5 ו־1, לאחר ההפרש שאחרי החייל הפשוט האחרון וההמתנה של 3 שניות, הבריון הראשון מופיע אחרי 4.5 שניות. המשגר של Level 2 מקבל נכס Level2 עם גלים קשים יותר, והסקריפט נשאר זהה.

challenge icon

אתגר

בינוני

הפוך את הקצב של Dropper לנכס של שיר.

  1. ב־DropPattern.cs, כתוב מחלקה [System.Serializable] בשם Drop עם int lane ו־float delay ציבוריים.
  2. מתחתיה, כתוב DropPattern : ScriptableObject עם [CreateAssetMenu] ועם GameObject blockPrefab, float laneWidth, List<Drop> drops ציבוריים.
  3. בתוך Dropper, השתמש ב־public DropPattern pattern;: עבור כל נפילה, המתן במשך drop.delay, ואז הפלת את הבלוק שהוזז לאורך ציר x במרחק drop.lane * pattern.laneWidth.

לחץ על "שחק": ארבעה בלוקים נופלים. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

using System.Collections.Generic;
using UnityEngine;

// כאן נמצאים Drop (בלוק אחד: הנתיב שלו וזמן ההמתנה שלפניו) ו-DropPattern (הנכס)

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

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