Implementering af Parkour System i Unity

Konceptet parkour, en træningsdisciplin fokuseret på at overvinde fysiske forhindringer ved hjælp af bevægelse, har oplevet enorm popularitet i videospil, og tilbyder spillerne et interaktivt og engagerende miljø. Implementering af dette system i Unity kan hæve spiloplevelsen. Denne vejledning vil guide dig gennem processen med at konfigurere et grundlæggende parkour-system i Unity, med fokus på vægløb og hvælving.

Aktiver påkrævet

  • En grundlæggende karaktercontroller: Vi vil bruge en spillercontroller fra tredjepersonskameraet i Unity som basisklasse for ændringer.
  • Parkour-animationer: vægløb, hvælving osv.

1. Indstilling af scenen

  • Sørg for, at miljøet har vægge og forhindringer mærket korrekt, ved at bruge "Wall" til vægge og "Obstacle" til hvælvinger.

2. Ændring af 'SC_TPSController' scriptet til Wall Running

2.1. Registrering af en væg:

  • Denne metode kontrollerer, om karakteren er ved siden af ​​en væg ved hjælp af 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ægløb

  • Denne coroutine klarer vægløb.
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.
}
  • Integrer vægløb i 'Update()' metoden:
// 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. Ændring af 'SC_TPSController' for Vaulting

3.1. Opdagelse af en forhindring

  • Tjek efter en hvælvingbar forhindring foran karakteren.
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. Hvælving

  • Tilføj en vaulting-metode:
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.
}
  • Integrer hvælving i 'Update()' metoden:
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Konklusion

Disse ændringer vil introducere wall running og vaulting-funktionaliteter til den eksisterende tredjeparts-afspillercontroller. Test disse nye bevægelser i forskellige scenarier for at sikre, at de fungerer efter hensigten. Justeringer kan være nødvendige afhængigt af spillets specifikke miljø eller den ønskede parkour-mekanik.