Implementatie van het Parkour-systeem in Unity

Het concept van parkour, een trainingsdiscipline gericht op het overwinnen van fysieke obstakels met behulp van beweging, is enorm populair geworden in videogames en biedt spelers een interactieve en boeiende omgeving. Het implementeren van dit systeem in Unity kan de gameplay-ervaring naar een hoger niveau tillen. Deze tutorial leidt je door het proces van het opzetten van een basisparkoursysteem in Unity, met de nadruk op muurlopen en voltige.

Vereiste activa

1. De scène instellen

  • Zorg ervoor dat de omgeving muren en obstakels op de juiste manier heeft gemarkeerd, gebruik "Wall" voor muren en "Obstacle" voor springbare obstakels.

2. Het 'SC_TPSController'-script voor muurdoorvoeren aanpassen

2.1. Een muur detecteren:

  • Deze methode controleert of het personage zich naast een muur bevindt met behulp van 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. Muur rennen

  • Deze coroutine is geschikt voor muurlopen.
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.
}
  • Wandloop integreren volgens de 'Update()'-methode:
// 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. Wijziging van de 'SC_TPSController' voor springen

3.1. Een obstakel detecteren

  • Controleer of er een springbaar obstakel voor het personage is.
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. Gewelf

  • Voeg een springmethode toe:
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.
}
  • Integreer voltige in de 'Update()'-methode:
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Conclusie

Deze aanpassingen introduceren functionaliteiten voor wall running en springen in de bestaande third-person player controller. Test deze nieuwe bewegingen in verschillende scenario's om er zeker van te zijn dat ze presteren zoals bedoeld. Aanpassingen kunnen nodig zijn, afhankelijk van de specifieke omgeving van het spel of de gewenste parkour-mechanismen.

Voorgestelde artikelen
Speler 3D- en 2D-muursprong-tutorial voor Unity
Helikoptercontroller voor Unity
Hoe u kraanbediening in eenheid kunt maken
Autocontroller voor Unity
Karaktercontroller Hoe u de mogelijkheid kunt toevoegen om starre lichamen in eenheid te duwen
Vliegtuigcontroller voor Unity
Hurken toevoegen aan FPS-speler in Unity