Inimigo que persegue e patrulha
Asse a malha de navegação e faça um inimigo perseguir o jogador sem código, ou patrulhar entre dois pontos com um script curto.
Validado no aparelho · APK 0.4.0 · navegação aceita no POCO F7 dentro do APK público 0.3.0 (bake pelo Inspector e 7 verificações em Play)
Continue a cena do Fazer um player: chão e paredes com colisão e o seu personagem.
1. A superfície de navegação
Seção intitulada “1. A superfície de navegação”- + › Navegação › Superfície.
- No Inspector, confira as medidas do agente: Raio do agente 0,5, Altura do agente 2, Altura do degrau 0,4, Inclinação máxima 45°. Coletar = Toda a cena.
- Toque Assar. O bake roda em segundo plano e grava
Navegação/<nome>.navmesh. O viewport desenha a malha azulada, com um vão em volta das paredes.
Só colisores estáticos viram chão. Mudou uma parede de lugar? O cartão fica “Desatualizada”: asse de novo.
2. O inimigo, sem código
Seção intitulada “2. O inimigo, sem código”- Selecione o seu personagem (o alvo).
- + › Navegação › Agente perseguidor. Ele cria um Personagem com o componente Agente e um cilindro, já com Seguir objeto = a seleção.
- Afaste o inimigo do jogador e aperte ▶: ele contorna as paredes até você.
| Campo do Agente | Experimente |
|---|---|
| Velocidade | 3 (um pouco mais lento que o jogador a 4) |
| Distância de parada | 1,5 (para antes de encostar) |
| Girar para o movimento | ligado (o inimigo olha para onde anda) |
| Desvio de agentes | Alto, quando houver vários inimigos |
3. Patrulhar entre dois pontos (script)
Seção intitulada “3. Patrulhar entre dois pontos (script)”Conferido contra a API C# do APK; a execução desta receita no aparelho ainda não foi registrada.
Num Agente com Seguir objeto vazio:
using System.Numerics;using Astra;using Astra.Components;
[ComponentId("meujogo.patrulha")]public sealed class Patrulha : Behavior{ private readonly Vector3 pontoA = new(-6, 0, 0); private readonly Vector3 pontoB = new(6, 0, 0); private NavAgent agente; private bool indoParaB;
public override void Start() { if (Object.GetComponent<NavAgent>() is not { } encontrado) { Enabled = false; return; } agente = encontrado; // Ao chegar, troca de destino. agente.OnDestinationReached(this, _ => { indoParaB = !indoParaB; agente.SetDestination(indoParaB ? pontoB : pontoA); }); agente.SetDestination(pontoA); }}Os pontos são posições no mundo, em metros; ponha-os sobre a malha. Stop() e Resume() pausam e retomam; Warp(ponto) teleporta.
4. Sem script: reagir à chegada
Seção intitulada “4. Sem script: reagir à chegada”Numa Conexão de evento no inimigo: Evento Agente: chegou, Ação Chamar método, Método Áudio: tocar, Receptor = um objeto com Fonte sonora. Ver Flow: eventos sem código.
Limites
Seção intitulada “Limites”- A malha fica onde foi assada: mover o objeto da Superfície não a desloca.
- Áreas nomeadas por projeto e volume modificador não existem; o Modificador muda a área de colisores no bake (Caminhável, Não caminhável, Salto, Difícil).
- Portas que abrem: use Obstáculo, que recorta a malha durante o Play.
Fichas: Superfície · Agente · Obstáculo.