البرنامج التعليمي للاعب القفز على الحائط ثلاثي الأبعاد وثنائي الأبعاد للوحدة

القفز على الحائط، وهو ميكانيكي شائع في ألعاب المنصات وألعاب الحركة، يسمح للاعبين بالقفز من على الجدران، مما يضيف التعقيد والتنوع إلى التنقل. يهدف هذا البرنامج التعليمي إلى دمج القفز على الحائط في وحدة تحكم FPS المتوفرة. في النهاية، ستكون شخصية اللاعب قادرة على تنفيذ القفزات على الحائط في كل من الإعدادات ثنائية وثلاثية الأبعاد.

تنفيذ Wall Jump للأبعاد الثلاثية باستخدام البرنامج النصي 'SC_FPSController'

بدءًا من الكود الأساسي المحدد من البرنامج التعليمي Unity FPS Controller، سنقدم آلية القفز على الحائط.

الخطوة 1: إعداد اكتشاف الجدار

  • أضف طبقة جديدة في Unity باسم "Wall" للكائنات التي يمكن القفز منها على الحائط.
  • قم بتحديث فئة 'SC_FPSController'، والتي يمكنك الحصول عليها من البرنامج التعليمي Unity FPS Controller، باستخدام المتغيرات التالية:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

الخطوة 2: الكشف عن الجدار

  • قم بدمج المنطق التالي داخل طريقة 'Update()' لاكتشاف الجدار:
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.right, out hit, 1f, wallLayer) || Physics.Raycast(transform.position, -transform.right, out hit, 1f, wallLayer))
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

سيكتشف هذا البث الشعاعي الموجود في الكود أعلاه الجدران الموجودة على يسار ويمين اللاعب.

الخطوة 3: تنفيذ Wall Jump للأبعاد الثلاثية

  • ضمن الأسلوب 'Update()'، بعد منطق القفز الأرضي، أدخل:
else if (Input.GetButton("Jump") && canMove && isTouchingWall)
{
    moveDirection.y = wallJumpForce;

    // This adds a bit of horizontal force opposite the wall for a more dynamic jump
    if (Physics.Raycast(transform.position, transform.right, 1f, wallLayer))
    {
        moveDirection += -transform.right * wallJumpForce / 2.5f; // Adjust the divisor for stronger/weaker push.
    }
    else if (Physics.Raycast(transform.position, -transform.right, 1f, wallLayer))
    {
        moveDirection += transform.right * wallJumpForce / 2.5f;
    }
}

يتحقق هذا المنطق الموجود في الكود أعلاه مما إذا كان اللاعب يضغط على زر القفز، ويمكنه التحرك، ولمس الحائط. إذا كان الأمر كذلك، فإنه يضفي قوة رأسية وقوة أفقية طفيفة بعيدًا عن الجدار.

تنفيذ Wall Jump لـ 2D باستخدام البرنامج النصي 'CharacterController2D'

بدءًا من الكود الأساسي المحدد من 2D Character Controller للبرنامج التعليمي Unity، سنقدم ميكانيكية wall Jump.

الخطوة 1: إعداد اكتشاف الجدار

  • أضف طبقة جديدة في Unity باسم "Wall" للكائنات التي يمكن القفز منها على الحائط.
  • قم بتحديث فئة 'CharacterController2D'، والتي يمكنك الحصول عليها من برنامجنا 2D Character Controller للبرنامج التعليمي Unity، باستخدام المتغيرات التالية:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

الخطوة 2: اكتشاف الجدار ثنائي الأبعاد

  • قم بدمج المنطق التالي داخل طريقة 'Update()' لاكتشاف الجدار:
RaycastHit2D wallHitLeft = Physics2D.Raycast(transform.position, Vector2.left, 1f, wallLayer);
RaycastHit2D wallHitRight = Physics2D.Raycast(transform.position, Vector2.right, 1f, wallLayer);

if (wallHitLeft.collider != null || wallHitRight.collider != null)
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

الخطوة 3: تنفيذ Wall Jump لـ 2D

  • ضمن الأسلوب 'Update()'، بعد منطق القفز الأرضي، أدخل:
if (Input.GetKeyDown(KeyCode.W) && isTouchingWall && !isGrounded)
{
    r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight);
    if (wallHitLeft.collider != null)
    {
        r2d.AddForce(new Vector2(wallJumpForce, 0)); // Push to the right when wall is on the left
    }
    else if (wallHitRight.collider != null)
    {
        r2d.AddForce(new Vector2(-wallJumpForce, 0)); // Push to the left when wall is on the right
    }
}

الأسئلة المطروحة:

  1. كيف يمكن للشخصية اكتشاف جدار في Unity؟: يمكن للشخصية اكتشاف الجدران باستخدام raycasting. من خلال إطلاق شعاع غير مرئي من اللاعب في الاتجاه المطلوب، يمكن للمرء تحديد ما إذا كان جسم ما، مثل الجدار، يتقاطع مع هذا الشعاع.
  2. ما الفرق بين تنفيذ القفز على الحائط ثنائي الأبعاد وثلاثي الأبعاد في Unity؟: في Unity، تستخدم الفيزياء ثنائية الأبعاد أساليب 'Physics2D' (مثل 'Physics2D.Raycast()') ، بينما تستخدم الفيزياء ثلاثية الأبعاد أساليب 'Physics' (مثل 'Physics.Raycast()'). يظل المنطق متشابهًا نسبيًا، لكن الأساليب والاتجاهات (Vector2 لـ 2D، وVector3 لـ 3D) تختلف.

خاتمة

تتيح هذه الإضافة للشخصية الموجودة في الفضاء ثنائي الأبعاد القفز من الجدران. قد تكون تجربة قيم القوة ضرورية لضمان سلاسة اللعب. من خلال دمج هذه الخطوات، سيجد اللاعبون أن حركة الشخصية ثنائية الأبعاد أكثر تنوعًا وديناميكية في البيئات ذات الجدران.

المقالات المقترحة
إضافة دعم القفز المزدوج إلى وحدة التحكم في الشخصيات ثنائية الأبعاد في Unity
مصباح يدوي تعليمي للوحدة
برنامج تعليمي للتحكم الدودي ثلاثي الأبعاد للوحدة
وحدة تحكم الأحرف ثنائية الأبعاد للوحدة
تحكم طائرات الهليكوبتر للوحدة
إنشاء حركة اللاعب في الوحدة
البرنامج التعليمي لوحدة تحكم المشغل من أعلى إلى أسفل للوحدة