ممنوع الالتفاف للخلف
الدرس 3 من 14 في دورة لعبة Unity: الثعبان ثلاثي الأبعاد على Coddy.
إذا انعطف الثعبان وعاد مباشرةً إلى الخلف، اصطدم بعنقه، لذا يتم تجاهل الانعطاف في الاتجاه المعاكس. الاتجاه المعاكس هو سالب الاتجاه: عندما يتحرك الثعبان إلى اليمين، تكون -direction هي Vector3.left.
لا تكفي المقارنة مع direction عندما يؤدي الضغط إلى تغييرها فورًا: يتحرك اللاعب إلى اليمين، ثم يضغط على الأعلى، ثم اليسار، خلال نبضة واحدة. يُسمح بالاتجاه إلى الأعلى، ثم يُفحَص اليسار مقارنةً بالأعلى ويُسمح به أيضًا، فتعود الخطوة التالية إلى العنق.
لذا احتفظ باتجاهين: direction، وهو الاتجاه الذي تحرك فيه الرأس أخيرًا، وnextDirection، وهو الانعطاف المنتظر للخطوة التالية. يغيّر المفتاح nextDirection بعد مقارنته بـ direction، وتجعل الخطوة الانعطاف المنتظر فعليًا.
التحدي
سهلامنع الثعبان من الاستدارة مباشرةً عائدًا نحو عنقه.
- أضف
private Vector3 nextDirection = Vector3.right;وvoid Turn(Vector3 newDirection): عيّن nextDirection ما لم يكنnewDirection == -direction. - في
Update()، استدعِ كل مفتاحTurnمع اتجاهه بدلًا من تعيين direction. - في بداية
Step()، عيّنdirection = nextDirection;
اضغط «العب» واضغط على اليسار أثناء التحرك إلى اليمين: يواصل الثعبان التحرك إلى اليمين. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
using UnityEngine.InputSystem;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // الثواني بين خطوتين
private float timer;
private Vector3 direction = Vector3.right;
void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard != null)
{
if (keyboard.upArrowKey.wasPressedThisFrame || keyboard.wKey.wasPressedThisFrame) direction = Vector3.forward;
if (keyboard.downArrowKey.wasPressedThisFrame || keyboard.sKey.wasPressedThisFrame) direction = Vector3.back;
if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame) direction = Vector3.left;
if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame) direction = Vector3.right;
}
timer += Time.deltaTime;
if (timer >= tick)
{
timer -= tick;
Step();
}
}
void Step()
{
transform.position += direction;
}
}
جميع دروس لعبة Unity: الثعبان ثلاثي الأبعاد
تدرّب بنفسك: Playground لـ Unity