الجدران
الدرس 4 من 14 في دورة لعبة Unity: الثعبان ثلاثي الأبعاد على Coddy.
تمتد خلايا اللوحة من -7 إلى 7 على المحور x وعلى المحور z. وبما أن اللوحة متمركزة عند 0، فإن اختبارًا واحدًا يشمل الجانبين: تكون Mathf.Abs(x) > 7 صحيحة بعد تجاوز أي من الحافتين.
اختبر الخلية التي يوشك الرأس على دخولها قبل أن يتحرك إليها، حتى تبقى الأفعى التي تصطدم بجدار في الخلية الأخيرة بدلًا من أن تنتهي داخل الحدود. على لوحة أصغر حافتها عند 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()ثم أعد؛ وإلا فتحرّك إلى الموضع التالي. 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: الثعبان ثلاثي الأبعاد
تدرّب بنفسك: Playground لـ Unity