Implementando o Sistema Parkour no Unity

O conceito de parkour, uma disciplina de treinamento focada na superação de obstáculos físicos por meio do movimento, tem obtido imensa popularidade nos videogames , oferecendo aos jogadores um ambiente interativo e envolvente. Implementar este sistema em Unity pode elevar a experiência de jogo. Este tutorial irá guiá-lo através do processo de configuração de um sistema básico de parkour em Unity, com foco em corrida em paredes e saltos.

Ativos necessários

  • Um controlador de personagem básico: Usaremos um controlador de jogador da câmera de terceira pessoa em Unity como classe base para modificações.
  • Animações de Parkour: corrida na parede, salto, etc.

1. Preparando a cena

  • Certifique-se de que o ambiente tenha paredes e obstáculos devidamente marcados, usando "Wall" para paredes e "Obstacle" para obstáculos que podem ser saltados.

2. Modificando o script 'SC_TPSController' para corrida na parede

2.1. Detectando uma parede:

  • Este método verifica se o personagem está ao lado de uma parede 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. Corrida na parede

  • Esta corrotina lida com a execução na parede.
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 o corredor de parede no 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 o 'SC_TPSController' para salto

3.1. Detectando um Obstáculo

  • Verifique se há um obstáculo que pode ser saltado na frente do personagem.
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. Salto

  • Adicione um método de vault:
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 o vaulting no método 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Conclusão

Essas modificações introduzirão funcionalidades de corrida na parede e salto ao controlador de jogador de terceira pessoa existente. Teste esses novos movimentos em vários cenários para garantir que funcionem conforme o esperado. Podem ser necessários ajustes dependendo do ambiente específico do jogo ou da mecânica de parkour desejada.