שלושה נתיבים
חלק מהיחידה בניית משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 27 מתוך 60.
בפרק הזה נבנה משחק ריצה אינסופית. הרץ דוהר בכביש בעל שלושה נתיבים ומחליף נתיבים כדי להתחמק מהמכשולים שמגיעים לעברו. בשיעורים הבאים הכביש יאיץ, המרחק יוצג על המסך, התרסקות תסיים את הריצה ותופיע כפתור לריצה נוספת, והריצה הטובה ביותר תישמר. הרץ לעולם אינו מתקדם: הוא נשאר ב-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 בפני עצמו.
אתגר
בינוניגרמו לחץ להזיז את הרץ בין שלושה נתיבים.
- ב־
Update()שלRunner, הפחיתו אתlane--כאשר מתקייםInput.GetKeyDown(KeyCode.LeftArrow), והגדילו אתlane++כאשר נלחץ החץ הימני. - השאירו אותו על הכביש:
lane = Mathf.Clamp(lane, -1, 1);. - העתיקו את
transform.positionאלp, הזיזו אתp.xלכיווןlane * laneWidthבאמצעותMathf.MoveTowardsבקצבlaneSpeed * Time.deltaTime, והשיבו אתpלמקומו.
לחצו על "שחק", לחצו על המשחק ועברו בין הנתיבים: הרץ יחליק מצד לצד. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
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פרויקט: רץ אינסופי
שלושה נתיביםמכשולים מלפניםתרגלו בעצמכם: Unity אונליין