הקירות
שיעור 4 מתוך 14 בקורס משחק Unity: נחש תלת־ממדי של Coddy.
תאי הלוח נעים בין -7 ל־7 בציר x ובציר z. מכיוון שהלוח ממורכז סביב 0, בדיקה אחת מכסה את שני הצדדים: Mathf.Abs(x) > 7 הוא true מעבר לכל אחד מהקצוות.
בדוק את התא שהראש עומד להיכנס אליו לפני שהוא נע אליו, כך שנחש שפוגע בקיר יישאר בתא האחרון ולא יסיים את התנועה בתוך הגבול. בלוח קטן יותר שהקצה שלו הוא 4:
Vector3 next = transform.position + direction;
if (Mathf.Abs(next.x) > 4) { Die(); return; }
transform.position = next;פגיעה בקיר עוצרת את הנחש לתמיד. משתנה bool ש־Update() בודקת תחילה עושה זאת: פקודת return בתחילת הפונקציה מדלגת גם על המקשים וגם על הטיימר.
אתגר
קלהתנגשות בקיר מסיימת את המשחק.
- הוסיפו
public int edge = 7;ו־public bool alive = true; - ב־
Step(), אחרי הגדרת הכיוון,Vector3 next = transform.position + direction;. אם נמצאים מחוץ ללוח (Mathf.Abs(next.x) > edge, או z): הפעילו אתDie()והחזירו; אחרת, עברו אל next. void Die() { alive = false; }; התחילו אתUpdate()ב־if (!alive) return;
לחצו על "שחק" ונווטו אל תוך קיר: הנחש נעצר בתא האחרון. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
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;
}
}
כל השיעורים ביחידה משחק Unity: נחש תלת־ממדי
תרגלו בעצמכם: Unity אונליין