גלים כנתונים
חלק מהיחידה ארכיטקטורת משחקים ב-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 עם גלים קשים יותר, והסקריפט נשאר זהה.
אתגר
בינוניהפוך את הקצב של Dropper לנכס של שיר.
- ב־
DropPattern.cs, כתוב מחלקה[System.Serializable]בשםDropעםint laneו־float delayציבוריים. - מתחתיה, כתוב
DropPattern : ScriptableObjectעם[CreateAssetMenu]ועםGameObject blockPrefab,float laneWidth,List<Drop> dropsציבוריים. - בתוך
Dropper, השתמש ב־public DropPattern pattern;: עבור כל נפילה, המתן במשךdrop.delay, ואז הפלת את הבלוק שהוזז לאורך ציר x במרחקdrop.lane * pattern.laneWidth.
לחץ על "שחק": ארבעה בלוקים נופלים. לאחר מכן לחץ על "בדיקה".
נסו בעצמכם
using System.Collections.Generic;
using UnityEngine;
// כאן נמצאים Drop (בלוק אחד: הנתיב שלו וזמן ההמתנה שלפניו) ו-DropPattern (הנכס)
כל השיעורים ביחידה ארכיטקטורת משחקים ב-Unity
1רכיבים, לא היררכיות
רכיבים קטניםסקריפט בסיסי לאויברכיבים מופשטיםרכיבים שפועלים יחדחזרה: צריח מודולריחזרה: תותח כפול4נתונים שעברו סריאליזציה
מחלקות שניתנות לסריאליזציהרשימות ב־Inspectorטיפוסי Enum ב־Inspectorחזרה: טבלת שללהגרלת השלל2ממשקים ב-Unity
IDamageableממשקים ו-TryGetComponentGetComponentsסיכום: מקש אינטראקציהסיכום: הקרוב ביותר בטווח5ScriptableObjects
נכסי נתוניםנתוני נשקהגדרות משותפותהצילו את הרוחגלים כנתוניםסיכום: מסד נתונים של פריטיםסיכום: קנייה בחנותתרגלו בעצמכם: Unity אונליין