הקיר
שיעור 5 מתוך 16 בקורס משחק Unity: שובר לבנים של Coddy.
הלבנים מסודרות ברשת: שורות מלמעלה למטה, עמודות משמאל לימין, כל אחת מהן עותק של קדם־אובייקט של לבנה שנוצר בשתי לולאות מקוננות. המיקום של לבנה נקבע לפי מספרי השורה והעמודה שלה כפול המרווח בין מרכזי הלבנים, שהוא גודל הלבנה בתוספת רווח קטן.
כדי למרכז רשת סביב x = 0, חשבו היכן נמצאת העמודה הראשונה. בין n עמודות יש n פחות 1 רווחים, ולכן כאשר המרווח הוא s, המרחק בין המרכזים החיצוניים הוא (n - 1) * s, והראשון נמצא במרחק של חצי מזה שמאלה. חמישה עמודי גדר, במרווחים של 2 יחידות:
int posts = 5;
float spacing = 2f;
float left = -(posts - 1) * spacing / 2f;
for (int i = 0; i < posts; i++)
{
Instantiate(postPrefab, new Vector3(left + i * spacing, 0f, 3f), Quaternion.identity);
}הם ניצבים במיקומים -4, -2, 0, 2 ו־4: העמוד הראשון נמצא ב־-4, ולא ב־-5, כי ארבעה רווחים מפרידים בין חמישה עמודים. הארגומנט הרביעי של Instantiate, Transform של הורה, מציב כל עותק תחת אובייקט אחד כדי שה-Hierarchy יישאר מסודר. כאשר סוג השדה של הקדם־אובייקט הוא סקריפט, כגון Brick, Instantiate מחזירה את הסקריפט של העותק החדש, מוכן לשימוש.
אתגר
בינוניבנו את הקיר ב־GameManager:
- הוסיפו
public Brick brickPrefabו־public Transform wall(הסצנה מקשרת בין ה־prefab של Brick לבין האובייקט Wall), וגםpublic int rows = 5,public int columns = 9,public float spacingX = 1.75f,public float spacingY = 0.75fו־public float topY = 6f. - כתבו
void BuildWall(): לבנה בכל שורה ועמודה, שתהיה צאצא שלwall. שורה 0 נמצאת ב־y =topY, וכל שורה נמוכה ממנה ב־spacingY. המרחק בין העמודות הואspacingX, והן ממורכזות סביב x = 0. הלבנים נמצאות ב־z = 0. - קראו ל־
BuildWall()מתוךStart().
לחצו על Play והקפיצו את הכדור מהקיר (הלבנים עדיין לא נשברות), ואז לחצו על Check.
נסו בעצמכם
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
void Awake()
{
Instance = this;
}
// בהמשך: קיר הלבנים, הניקוד, החיים והשלבים.
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.