تنفيذ نظام الباركور في الوحدة

لقد شهد مفهوم parkour، وهو نظام تدريب يركز على التغلب على العوائق الجسدية باستخدام الحركة، شعبية هائلة في ألعاب الفيديو، مما يوفر للاعبين بيئة تفاعلية وجذابة. يمكن أن يؤدي تطبيق هذا النظام في Unity إلى الارتقاء بتجربة اللعب. سيرشدك هذا البرنامج التعليمي خلال عملية إعداد نظام الباركور الأساسي في Unity، مع التركيز على الجري على الحائط والقفز.

الأصول المطلوبة

1. وضع المشهد

  • تأكد من أن البيئة تحتوي على جدران وعوائق موسومة بشكل مناسب، باستخدام "Wall" للجدران و"Obstacle" للعوائق القابلة للقبو.

2. تعديل البرنامج النصي 'SC_TPSController' للتشغيل على الحائط

2.1. الكشف عن الجدار:

  • تتحقق هذه الطريقة مما إذا كان الحرف بجوار الحائط باستخدام raycasting.
bool IsBesideWall(Vector3 direction)
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, direction, out hit, 1f))
    {
        if (hit.transform.CompareTag("Wall"))
        {
            return true;
        }
    }
    return false;
}

2.2. تشغيل الجدار

  • هذا الكوروتين يتعامل مع الجري على الحائط.
public float wallRunTime = 2f; // Duration of the wall run.

IEnumerator WallRun(Vector3 direction)
{
    float startTime = Time.time;
    canMove = false; // Disable regular movement during wall run.

    while (Time.time - startTime < wallRunTime)
    {
        characterController.Move(direction * speed * Time.deltaTime);
        yield return null;
    }

    canMove = true; // Enable regular movement after wall run.
}
  • دمج الجدار الذي يعمل بالطريقة 'Update()':
// Wall Run
if (IsBesideWall(transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(transform.right));
}
else if (IsBesideWall(-transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(-transform.right));
}

3. تعديل 'SC_TPSController' للتخزين

3.1. الكشف عن عقبة

  • تحقق من وجود عائق قابل للقفز أمام الشخصية.
bool IsObstacleInFront()
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
    {
        if (hit.transform.CompareTag("Obstacle"))
        {
            return true;
        }
    }
    return false;
}

3.2. القفز

  • إضافة طريقة القبو:
void Vault()
{
    canMove = false; // Disable regular movement during vaulting.
    
    // Translate the player over the obstacle.
    Vector3 vaultMovement = (Vector3.up + transform.forward) * speed * Time.deltaTime;
    characterController.Move(vaultMovement);
    
    canMove = true; // Enable regular movement after vaulting.
}
  • دمج القبو في طريقة 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

خاتمة

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

المقالات المقترحة
إنشاء حركة اللاعب في الوحدة
كيفية التحكم في الرافعة في الوحدة
نظام الحوار من أجل الوحدة
الوحدة كيفية جعل عناصر التحكم باللمس المحمول
وحدة تحكم السيارة للوحدة
وحدة التحكم في الشخصية كيفية إضافة القدرة على دفع الأجسام الصلبة في الوحدة
تحكم سفينة الفضاء في الوحدة