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.
Desafio
MédioUma 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 deforce, 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
}
}
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
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para Coletar3Gatilhos
Colisores de gatilhoOnTriggerEnterItens coletáveisZonas de eliminaçãoEntrada e saídaRevisão: chave e porta6Raycasts
Physics.RaycastRaycastHitVerificação do chão com um raioCamadas e LayerMaskLinha de visãoOverlapSphere e SphereCastRecapitulação: armadilha a laser9Inimigos
Persiga o jogadorPersiga ao alcancePatrulhe e persigaVida e danoEmpurrãoRecapitulação: Cão de guarda