הקירות
שיעור 4 מתוך 14 בקורס משחק Unity: נחש בתלת־ממד של Coddy.
תאי הלוח משתרעים מ־-7 עד 7 בציר x ובציר z, לכן תא נמצא על הלוח כל עוד גם ערך ה־x וגם ערך ה־z שלו נמצאים בין -7 ל־7. כשהלוח ממורכז ב־0, בדיקה אחת מכסה את שני הצדדים: Mathf.Abs(x) > 7 הוא true מעבר לכל אחד מהקצוות.
בדוק את התא שאליו הראש עומד להיכנס, לפני שהוא זז אליו. כך נחש שנוגע בקיר נשאר בתא האחרון שעל הלוח במקום להגיע אל תוך הגבול. צריח בלוח שחמט שממוספר מ־0 עד 7 נבדק באותו אופן:
Vector3 target = transform.position + move;
if (target.x < 0 || target.x > 7 || target.z < 0 || target.z > 7)
{
return; // מחוץ ללוח: הצריח נשאר במקומו
}
transform.position = target;נגיעה בקיר מסיימת את המשחק, והנחש עוצר לתמיד. משתנה bool ש־Update() בודקת תחילה עושה זאת: פקודת return בתחילת הפונקציה מדלגת הן על המקשים והן על הטיימר.
אתגר
קל- הוסף
public int edge = 7;(תאי הלוח נעים בין-edgeל־edge) וגםpublic bool alive = true;. - ב־
Step(), אחרי הגדרתdirection, חשב אתnext, התא שאליו הראש עומד להיכנס. אם הוא מחוץ ללוח, קרא ל־Die()והחזר בלי לזוז; אחרת, הזז את הראש אלnext. - כתוב
void Die(), שמגדירה אתaliveכ־false. - התחל את
Update()בהחזרה אם הנחש אינו חי, כך שנחש מת לא יפנה ולא יתקדם.
לחץ על Play, נווט אל תוך קיר, ואז לחץ על Check.
נסו בעצמכם
using UnityEngine;
using UnityEngine.InputSystem;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // שניות בין שני צעדים
private float timer;
private Vector3 direction = Vector3.right; // הכיוון שבו הראש נע בצעד האחרון שלו
private Vector3 nextDirection = Vector3.right; // הפנייה שממתינה לצעד הבא
void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard != null)
{
if (keyboard.upArrowKey.wasPressedThisFrame || keyboard.wKey.wasPressedThisFrame) Turn(Vector3.forward);
if (keyboard.downArrowKey.wasPressedThisFrame || keyboard.sKey.wasPressedThisFrame) Turn(Vector3.back);
if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame) Turn(Vector3.left);
if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame) Turn(Vector3.right);
}
timer += Time.deltaTime;
if (timer >= tick)
{
timer -= tick;
Step();
}
}
void Turn(Vector3 newDirection)
{
if (newDirection != -direction)
{
nextDirection = newDirection;
}
}
void Step()
{
direction = nextDirection;
transform.position += direction;
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.