הגרלת השלל
חלק מהיחידה ארכיטקטורת משחקים ב-Unity במסלול ה-Unity של Coddy. שיעור 22 מתוך 64.
בפרק הזה הצגנו במחווט את המחלקות הסריאליזביליות, הרשימות וה־enum, והטבלה של התיבה משתמשת בשלושתם. עכשיו התיבה מגרילה מתוכה.
אתגר
קלהקישו על מקש הרווח כדי לפתוח את התיבה ולהפיל פריט אחד לפי משקלו.
- כתבו
public LootEntry Pick(int roll): עברו עלtable; החזירו את הרשומה כשהערך שלrollקטן מהמשקל שלה, אחרת החסירו את המשקל. אחרי הלולאה,return null;. - בלחיצה על מקש הרווח, בחרו פריט באמצעות
Random.Range(0, TotalWeight()), צרו מופע שלprefabבמרחק 1.5 יחידות מעל התיבה והציגו ביומן אתentry.rarity + ": " + entry.itemName.
לחצו על ״שחק״ ועל מקש הרווח: לרוב תקבלו Common: Apple או Bread. לאחר מכן לחצו על ״בדיקה״.
נסו בעצמכם
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public enum Rarity { Common, Rare, Epic, Legendary }
[System.Serializable]
public class LootEntry
{
public string itemName;
public GameObject prefab;
public Rarity rarity;
}
public class LootChest : MonoBehaviour
{
public List<LootEntry> table;
public int WeightOf(Rarity rarity)
{
switch (rarity)
{
case Rarity.Common: return 10;
case Rarity.Rare: return 4;
case Rarity.Epic: return 2;
case Rarity.Legendary: return 1;
}
return 0;
}
public int TotalWeight()
{
int total = 0;
foreach (LootEntry entry in table) total += WeightOf(entry.rarity);
return total;
}
// כאן יש לממש את Pick(int roll) ואת פתיחת התיבה באמצעות Space
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה ארכיטקטורת משחקים ב-Unity
1רכיבים, לא היררכיות
רכיבים קטניםסקריפט בסיסי לאויברכיבים מופשטיםרכיבים שפועלים יחדחזרה: צריח מודולריחזרה: תותח כפול4נתונים שעברו סריאליזציה
מחלקות שניתנות לסריאליזציהרשימות ב־Inspectorטיפוסי Enum ב־Inspectorחזרה: טבלת שללהגרלת השלל2ממשקים ב-Unity
IDamageableממשקים ו-TryGetComponentGetComponentsסיכום: מקש אינטראקציהסיכום: הקרוב ביותר בטווחתרגלו בעצמכם: Unity אונליין