Implementación del sistema Parkour en Unity

El concepto de parkour, una disciplina de entrenamiento centrada en superar obstáculos físicos mediante el movimiento, ha alcanzado una inmensa popularidad en los videojuegos, ofreciendo a los jugadores un entorno interactivo y atractivo. Implementar este sistema en Unity puede mejorar la experiencia de juego. Este tutorial te guiará a través del proceso de configuración de un sistema de parkour básico en Unity, centrándote en correr por la pared y saltar.

Activos requeridos

1. Preparando la escena

  • Asegúrese de que el entorno tenga paredes y obstáculos etiquetados adecuadamente, usando "Wall" para paredes y "Obstacle" para obstáculos saltables.

2. Modificación del script 'SC_TPSController' para ejecución en pared

2.1. Detectando una pared:

  • Este método verifica si el personaje está al lado de una pared usando 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. Correr por la pared

  • Esta rutina maneja la carrera por la pared.
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.
}
  • Integre el muro con el método '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. Modificando el 'SC_TPSController' para Vaulting

3.1. Detectar un obstáculo

  • Busca un obstáculo que puedas saltar frente al personaje.
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. Abovedado

  • Agregue un método de bóveda:
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.
}
  • Integre la bóveda en el método 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Conclusión

Estas modificaciones introducirán funcionalidades de correr por la pared y saltar al controlador de jugador en tercera persona existente. Pruebe estos nuevos movimientos en varios escenarios para asegurarse de que funcionen según lo previsto. Es posible que sean necesarios ajustes según el entorno específico del juego o la mecánica de parkour deseada.

Artículos sugeridos
Sistema de Diálogo para la Unidad
Creando movimiento de jugadores en unidad
Cómo hacer control de grúa en Unity
Controlador de coche para Unity
Tutorial de salto de pared 3D y 2D de Player para Unity
Tutorial del controlador de gusanos 3D para Unity
Tutorial del controlador de jugador de arriba hacia abajo para Unity