הטמעת מערכת פארקור באחדות

הרעיון של 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' עבור Vaulting

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();
}

סיכום

שינויים אלה יציגו פונקציות של ריצת קיר ו-קמרון לבקר הנגן הקיים בגוף שלישי. בדוק את התנועות החדשות הללו בתרחישים שונים כדי לוודא שהן פועלות כמתוכנן. ייתכן שיהיה צורך בהתאמות בהתאם לסביבה הספציפית של המשחק או למכניקת הפארקור הרצויה.