Menu
CoddyTech

Persiga o jogador

Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 50 de 63.

Um inimigo que persegue o jogador precisa de um Rigidbody, para que as paredes o detenham e ele possa empurrar e ser empurrado. A perseguição em si é uma velocidade direcionada ao jogador, definida uma vez por passo de física. Este zumbi caminha em direção ao que estiver no espaço player:

[SerializeField] private Transform player;
[SerializeField] private float speed = 2.5f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    Vector3 toPlayer = player.position - rb.position;
    toPlayer.y = 0f;
    Vector3 dir = toPlayer.normalized;
    rb.linearVelocity = new Vector3(dir.x * speed, rb.linearVelocity.y, dir.z * speed);
}

player.position - rb.position aponta do zumbi para o jogador. O valor de y é definido como 0 para que o zumbi caminhe em terreno plano quando o jogador estiver em um nível mais alto ou mais baixo, e normalized faz com que seu comprimento seja 1, então o zumbi caminha a speed, esteja o jogador a 2 ou a 20 unidades de distância. A nova velocidade mantém a velocidade y anterior, então a gravidade continua puxando o zumbi para baixo ao sair de um degrau. A opção Freeze Rotation está ativada no Rigidbody, então ele não tomba enquanto caminha.

Uma velocidade que você define cria um personagem que começa a se mover e vira de imediato. Um inimigo pesado pode ser empurrado com AddForce no mesmo FixedUpdate: ele ganha velocidade, mantém o impulso e passa do ponto quando o jogador sai do caminho. Evite mover o Transform de um perseguidor: isso o coloca dentro de uma parede com a mesma facilidade que em qualquer outro lugar, e o mecanismo de física só consegue empurrá-lo para fora depois.

challenge icon

Desafio

Médio

Uma pedra rola atrás do jogador. Escreva o script Boulder no objeto Boulder, uma bola com um Rigidbody. O Inspector fornece player (o Player) e force (6). O script Player está pronto: as setas movem o jogador.

  • A cada passo da física, empurre a pedra em direção ao jogador com AddForce, aplicando uma força de force, esteja o jogador perto ou longe.
  • Empurre apenas ao longo do chão, sem componente para cima ou para baixo, mesmo quando o jogador estiver na beirada.
  • Não mova o Transform nem congele a rotação: o atrito faz a pedra rolar.

Pressione Play, corra em círculos ao redor da pedra e, em seguida, Check.

Experimente você mesmo

using UnityEngine;

public class Boulder : MonoBehaviour
{
    [SerializeField] private Transform player;
    [SerializeField] private float force = 6f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // empurre a pedra em direção ao jogador, ao longo do chão
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Física e jogabilidade