O Unity3d realiza a patrulha inimiga por meio do componente Nav Mesh Agent e resolve o problema do relatório de erro "SetDestination"

Primeiro mostre o efeito:

Na realização da patrulha automática do inimigo, podemos usar o Nav Mesh Agent (agente de grade de navegação) que vem com a unidade, que pode realizar convenientemente essa função enquanto economiza a quantidade de código redundante.

Primeiro adicione o componente Nav Mesh Agent ao inimigo:

https://docs.unity.cn/cn/2018.4/Manual/class-NavMeshAgent.html

O acima é a introdução detalhada deste componente no manual oficial da unidade. Os mais importantes aqui são Velocidade (velocidade de movimento), Velocidade Angular (velocidade de rotação) e Distância de parada (parando quando está perto do alvo distância). Esses três valores precisam estar de acordo com suas próprias necessidades. configurações, e o restante pode ser deixado como padrão.

A seguir no código

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class AIFindWay : MonoBehaviour
{
    public NavMeshAgent agent;
    public Transform[] Points;//通过数组形式可设置多个监测点
    int currentPoint;
    
    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        agent.SetDestination(Points[0].position);//通过Nav Mesh Agent组件的SetDestination 方法括号内为一个Vector3目标点
    }

    void Update()
    {
        if(agent.remainingDistance<agent.stoppingDistance)//到目标的剩余距离是否小于之前在 Inspector窗口中设置的停止距离
        {         
            currentPoint=(currentPoint+1)%Points.Length;//采用取余的方法实现敌人巡逻轨迹的循环
            agent.SetDestination(Points[currentPoint].position);
        }
    }
}

Adicione um script ao personagem e arraste o Nev Mesh Agent para dentro do Agent

E adicione dois pontos Point, adicione dois objetos vazios no painel Hierarchy e nomeie-os como pos1, pos2 e rotule-os para facilitar o posicionamento.

 

 Também é necessário prestar atenção aqui, os valores do eixo Y de pos1 e pos2 devem ser o mais próximo possível do eixo Y do solo, caso contrário, os personagens irão vagar durante a navegação. Pode haver dúvidas aqui, script móvel do inimigo? ? Através deste componente, não há necessidade de escrever scripts de movimento, e a velocidade e a direção do movimento podem ser definidas no componente, aqui você só precisa adicionar um inimigo com animação de movimento. Quando você corre,

 "GetRemainingDistance" só pode ser chamado em um agente ativo que foi colocado em um NavMesh!

Esse erro confuso precisa introduzir o conceito de cozimento dinâmico do NavMesh. Primeiro, armazene todos os objetos de terreno e ambiente criados (com colisões) em um objeto vazio chamado Ambiente e execute as seguintes operações ao mesmo tempo:

Abra Static no Inspector e selecione Navigation Static:

 Em seguida, clique em Janela->AI->Navegação e o seguinte painel aparecerá:

Raio do agente (a distância entre a grade e a borda do terreno)

Altura do agente (a altura máxima que pode ser ultrapassada)

Max Slope (a inclinação máxima que pode ser ultrapassada)

Altura do passo (gradiente máximo que pode passar)

 Altura da queda (distância de queda permitida) Altura do salto (distância de salto permitida)

Geralmente, use o valor padrão e clique em Bake para assar, e o seguinte aparecerá:

 A função de patrulha inimiga está concluída, vamos executá-la.

Acho que você gosta

Origin blog.csdn.net/m0_64652083/article/details/128944308
Recomendado
Clasificación