Tutorial de salto de parede 3D e 2D do jogador para Unity
Wall jumping, uma mecânica predominante em plataformas e jogos de ação, permite aos jogadores pular paredes, adicionando complexidade e versatilidade à navegação. Este tutorial tem como objetivo integrar o salto na parede ao controlador FPS fornecido. Ao final, o personagem do jogador será capaz de executar saltos na parede em configurações 2D e 3D.
Implementando Wall Jump para 3D usando o script 'SC_FPSController'
Começando com o código base fornecido no tutorial Unity FPS Controller, apresentaremos a mecânica de salto na parede.
Etapa 1: configurar a detecção de parede
- Adicione uma nova camada em Unity chamada "Wall" para objetos que podem ser saltados na parede.
- Atualize a classe 'SC_FPSController', que você pode obter em nosso tutorial Unity FPS Controller, com as seguintes variáveis:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;
Passo 2: Detectando a Parede
- Incorpore a seguinte lógica dentro do método 'Update()' para detectar uma parede:
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.right, out hit, 1f, wallLayer) || Physics.Raycast(transform.position, -transform.right, out hit, 1f, wallLayer))
{
isTouchingWall = true;
}
else
{
isTouchingWall = false;
}
Este raycast no código acima detectará paredes à esquerda e à direita do jogador.
Etapa 3: Implementando o Wall Jump para 3D
- Dentro do método 'Update()', após a lógica do salto no solo, insira:
else if (Input.GetButton("Jump") && canMove && isTouchingWall)
{
moveDirection.y = wallJumpForce;
// This adds a bit of horizontal force opposite the wall for a more dynamic jump
if (Physics.Raycast(transform.position, transform.right, 1f, wallLayer))
{
moveDirection += -transform.right * wallJumpForce / 2.5f; // Adjust the divisor for stronger/weaker push.
}
else if (Physics.Raycast(transform.position, -transform.right, 1f, wallLayer))
{
moveDirection += transform.right * wallJumpForce / 2.5f;
}
}
Essa lógica no código acima verifica se o jogador está pressionando o botão de pular, se pode se mover e se está tocando uma parede. Se assim for, transmite uma força vertical e uma ligeira força horizontal afastada da parede.
Implementando Wall Jump para 2D usando o script 'CharacterController2D'
Começando com o código base fornecido no tutorial 2D Character Controller for Unity, apresentaremos a mecânica wall jump.
Etapa 1: configurar a detecção de parede
- Adicione uma nova camada em Unity chamada "Wall" para objetos que podem ser saltados na parede.
- Atualize a classe 'CharacterController2D', que você pode obter em nosso tutorial 2D Character Controller para Unity, com as seguintes variáveis:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;
Passo 2: Detectando a Parede em 2D
- Incorpore a seguinte lógica dentro do método 'Update()' para detectar uma parede:
RaycastHit2D wallHitLeft = Physics2D.Raycast(transform.position, Vector2.left, 1f, wallLayer);
RaycastHit2D wallHitRight = Physics2D.Raycast(transform.position, Vector2.right, 1f, wallLayer);
if (wallHitLeft.collider != null || wallHitRight.collider != null)
{
isTouchingWall = true;
}
else
{
isTouchingWall = false;
}
Etapa 3: Implementando o Wall Jump para 2D
- Dentro do método 'Update()', após a lógica do salto no solo, insira:
if (Input.GetKeyDown(KeyCode.W) && isTouchingWall && !isGrounded)
{
r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight);
if (wallHitLeft.collider != null)
{
r2d.AddForce(new Vector2(wallJumpForce, 0)); // Push to the right when wall is on the left
}
else if (wallHitRight.collider != null)
{
r2d.AddForce(new Vector2(-wallJumpForce, 0)); // Push to the left when wall is on the right
}
}
Perguntas abordadas:
- Como um personagem pode detectar uma parede em Unity?: Um personagem pode detectar paredes usando raycasting. Ao disparar um raio invisível do jogador na direção desejada, pode-se determinar se um objeto, como uma parede, cruza esse raio.
- Qual é a diferença entre a implementação de salto de parede 2D e 3D em Unity?: Em Unity, a física 2D usa métodos 'Physics2D' (como 'Physics2D.Raycast()'), enquanto a física 3D usa métodos 'Physics' (como 'Physics.Raycast()'). A lógica permanece relativamente semelhante, mas os métodos e direções (Vetor2 para 2D, Vetor3 para 3D) variam.
Conclusão
Esta adição permite que o personagem no espaço 2D pule das paredes. A experimentação com os valores de força pode ser necessária para garantir uma jogabilidade suave. Ao integrar essas etapas, os jogadores descobrirão que o movimento do personagem 2D é mais versátil e dinâmico em ambientes com paredes.