שלושה נתיבים
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 27 מתוך 56.
בפרק הזה נבנה משחק ריצה אינסופית. הרץ דוהר לאורך כביש בעל שלושה נתיבים ועובר בין הנתיבים כדי להתחמק ממכשולים שמתקדמים לעברו. בשיעורים הבאים הכביש יאיץ, המרחק יוצג על המסך, התנגשות תסיים את הריצה ויופיע כפתור להפעלה מחדש, והריצה הטובה ביותר תישמר. הרץ לעולם אינו מתקדם קדימה: הוא נשאר ב־z = 0 והמכשולים נעים לעברו, כך שהכביש לעולם אינו נגמר. במשחק יש ארבעה סקריפטים, Runner, Spawner, Obstacle ו־GameManager, ושלושת האחרונים ריקים לעת עתה.
לא שולטים ברץ שנע בנתיבים כמו במכונית: הוא תמיד נמצא באחד מכמה מיקומים מוגדרים. שמרו את המיקום כמספר שלם, שנו את המספר בלחיצה על מקש, וחשבו ממנו את המיקום. הפלטפורמה של מנקה החלונות הזה משרתת חמש קומות בבניין, במרחק של 3 יחידות זו מזו:
[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
floor = Mathf.Clamp(floor, 0, 4);
Vector3 p = transform.position;
p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
transform.position = p;
}GetKeyDown גורם לכך שלחיצה אחת תעלה קומה אחת, בעוד ש־GetKey היה מוסיף קומה בכל פריים שבו המקש מוחזק. Mathf.Clamp משאיר את המספר בטווח הקומות בבניין, כך שלחיצה למעלה בקומה העליונה לא עושה כלום, והלחיצה הבאה למטה עוברת ישירות לקומה 3. Mathf.MoveTowards מחליק את הפלטפורמה לעבר הקומה שלה במהירות של moveSpeed יחידות בשנייה ועוצר בדיוק עליה, במקום לקפוץ אליה בפריים אחד. המיקום הוא עותק שמשנים ואז משייכים בחזרה, כי אי אפשר להגדיר את transform.position.y בפני עצמו.
אתגר
בינוניהתחל את משחק הריצה האינסופי עם הרץ. החלון Inspector נותן ל־Runner ערך laneWidth של 2.5 וערך laneSpeed של 15, ו־lane הוא -1 עבור הנתיב השמאלי, 0 עבור האמצעי ו־1 עבור הימני. בתוך Update() של Runner:
- כל לחיצה על החץ שמאלה או ימינה משנה את
laneבאחד בכיוון המתאים. גם החזקת המקש משנה אותו באחד. laneלעולם לא יורד מתחת ל־-1 או עולה מעל 1.- הרץ מחליק לאורך ציר x אל
lane * laneWidthבמהירות שלlaneSpeedיחידות לשנייה, ושומר על ערכי y ו־z שלו.
השאר את שלושת הסקריפטים האחרים כפי שהם לעת עתה. לחץ על Play, לחץ על המשחק ועבור בין הנתיבים, ואז לחץ על Check.
נסו בעצמכם
using UnityEngine;
public class Runner : MonoBehaviour
{
public float laneWidth = 2.5f;
public float laneSpeed = 15f;
private int lane = 0; // -1 הוא הנתיב השמאלי, 0 האמצעי, 1 הימני
void Update()
{
// החלף נתיבים בעזרת החצים, ואז החלק לעבר ערך ה-x של הנתיב
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה בונים משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות2כפתורים ומסכים
כפתורים ו-onClickביטויי למבדהחיבור ב-Inspectorהפעלה וכיבוי של פאנליםפסי בריאותסיכום: חנות שדרוגים6פרויקט: רץ ללא סוף
שלושה נתיביםמכשולים לפניך