Implementera Parkour System i Unity

Konceptet med parkour, en träningsdisciplin som fokuserar på att övervinna fysiska hinder med hjälp av rörelse, har fått enorm popularitet i videospel, och erbjuder spelarna en interaktiv och engagerande miljö. Att implementera detta system i Unity kan höja spelupplevelsen. Denna handledning guidar dig genom processen att ställa in ett grundläggande parkour-system i Unity, med fokus på vägglöpning och valv.

Tillgångar som krävs

1. Ställa in scenen

  • Se till att miljön har väggar och hinder taggade på lämpligt sätt, använd "Wall" för väggar och "Obstacle" för valvbara hinder.

2. Ändra 'SC_TPSController'-skriptet för Wall Running

2.1. Upptäcka en vägg:

  • Denna metod kontrollerar om karaktären är bredvid en vägg med 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. Väggkörning

  • Denna coroutine klarar väggkörning.
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.
}
  • Integrera väggkörning i metoden '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. Ändra 'SC_TPSController' för valv

3.1. Upptäcka ett hinder

  • Kontrollera om det finns ett valvbart hinder framför karaktären.
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. Vaulting

  • Lägg till en valvmetod:
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.
}
  • Integrera valv i metoden 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Slutsats

Dessa modifieringar kommer att introducera wall running och valvfunktioner till den befintliga tredjepartsspelaren. Testa dessa nya rörelser i olika scenarier för att säkerställa att de fungerar som avsett. Justeringar kan vara nödvändiga beroende på spelets specifika miljö eller önskad parkour-mekanik.

Föreslagna artiklar
Lägga till stöd för dubbla hopp till en 2D Platformer Character Controller i Unity
Hur man gör krankontroll i Unity
Bilkontroller för Unity
Lägger till Crouching till FPS Player i Unity
Spelar 3D och 2D Wall Jump Tutorial för Unity
Dialogsystem för enhet
Skapa spelarrörelse i Unity