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

لقد شهد مفهوم parkour، وهو نظام تدريب يركز على التغلب على العوائق الجسدية باستخدام الحركة، شعبية هائلة في ألعاب الفيديو، مما يوفر للاعبين بيئة تفاعلية وجذابة. يمكن أن يؤدي تطبيق هذا النظام في Unity إلى الارتقاء بتجربة اللعب. سيرشدك هذا البرنامج التعليمي خلال عملية إعداد نظام الباركور الأساسي في 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();
}

خاتمة

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