Close
    Search Search

    Tutorial: Pathfinding

    Página do tutorial; este artigo é um tutorial avançado.Todos os tutoriais · Tutoriais de script

    Olá! Este tutorial simples irá ensiná-lo a fazer uma IA básica que pode encontrar e seguir caminhos automaticamente.

    Antes de começar, você deve ter conhecimento do Tutorial de script avançado.

    Criando um curso e equipamento

    Tutorial: Pathfinding

    Esta é a pista de obstáculos que usarei para este tutorial. Ele contém um labirinto, saltos de lava, uma corda bamba e um quebra-cabeça Pick-a-Path. Todos esses modelos são gratuitos, portanto, se você quiser usá-los, todos estão disponíveis na Caixa de ferramentas.



    Agora, precisamos criar um ponto de partida no início do labirinto. Para evitar qualquer confusão, é melhor encaixotar o local em.

    Finalmente, no final do curso, você deve ter um protetor de extremidade. Ou você pode obter as coordenadas do local final.

    Agora, precisamos fazer o próprio robô. Lembre-se, para que isso funcione, o robô precisa ter um objeto Humanóide dentro. Idealmente, você deve inserir uma plataforma por meio do Rig Builder.

    Criando um Caminho

    Agora precisamos criar um caminho. Insira um script no rig e use um serviço chamado PathfindingService.

    1 pathService local = jogo: GetService ("PathfindingService")

    Agora configuramos algumas variáveis ​​locais para o ponto inicial e final, bem como o humanóide.

    1 local start = script.Parent.HumanoidRootPart 2 local End = game.Workspace.EndPoint 3 local hum = script.Parent.Humanoid

    Aqui, o ponto de partida é o HumanoidRootPart do robô. O ponto final é a parte do espaço de trabalho chamada "Ponto final".



    Agora usamos uma função chamada Create Path para criar um caminho em branco.

    1 caminho local = pathService: CreatePath ()

    Claro, ainda temos que dar ao sistema um ponto inicial e um ponto final. Usamos a função ComputeAsync () para que o sistema calcule o caminho mais curto possível.

    1 path:ComputeAsync(start.Position, end.Position) 2 --Alternatively, 3 path:ComputeAsync(Vector3.new(x1,y1,z1), Vector3.new(x2,y2,z2))

    Se você usar coordenadas, substitua x1, x2 e assim por diante pelos números correspondentes. Ainda assim, ainda temos que fazer o robô realmente fazer o caminho.

    Os pontos de passagem

    Tutorial: Pathfinding

    Os pontos de passagem são pequenos pontos ao longo do caminho que o robô segue até o destino final. Modifiquei meu script final para produzir esses pontos. Cada um desses pontos é 1 ponto de referência.

    Agora, precisamos usar a função GetWaypoints para obter os waypoints. O que a função faz é retornar um array, consistindo nas coordenadas de cada waypoint em ordem.

    1 ponto de referência local = caminho: GetWaypoints ()

    Finalmente, precisamos usar a função MoveTo para mover para cada waypoint. Claro, como os waypoints estão em uma matriz, usamos um loop em pares.

    1 para i, waypoint em ipairs (waypoints) fazer 2 Humanóide: MoveTo (waypoint.Position) 3 end

    Mas, se você se lembrar, se você usar qualquer tipo de loop, precisará de pelo menos um atraso. Portanto, usamos o evento MoveToFinished para esperar até que o MoveTo seja concluído, antes de repetir o loop.


    1 para i, waypoint em ipairs (waypoints) faça 2 Humanoid: MoveTo (waypoint.Position) 3 Humanoid.MoveToFinished: Wait () 4 end


    No entanto, o robô não pode pular sobre os pulos de lava. Para consertar isso, há uma propriedade de cada waypoint chamada "Ação", que informa qual ação deve ser executada. Portanto, configure uma instrução if para que, se o waypoint exigir que ele salte, ele salte.


    1 if waypoint.Action == Enum.PathWaypointAction.Jump then 2 Humanoid.Jump = true 3 end

    E isso é tudo! Uma vez que os pulos de lava terminarem, ele fará facilmente a corda bamba e o Pick-a-Path com uma brisa! Caso você esteja tendo problemas para acompanhar, aqui está o script final:

    1 local PathfindingService = jogo: GetService ("PathfindingService") 2 local Humanoid = script.Parent: WaitForChild ("Humanoid") 3 local Root = script.Parent: WaitForChild ("HumanoidRootPart") 4 local goal = game.Workspace.Goal. Posição 5 caminho local = PathfindingService: CreatePath () 6 caminho: ComputeAsync (Root.Position, objetivo) 7 waypoints locais = caminho: GetWaypoints () 8 para i, waypoint em ipairs (waypoints) do 9 Humanoid: MoveTo (waypoint.Position) 10 if waypoint.Action == Enum.PathWaypointAction.Jump then 11 Humanoid.Jump = true 12 end 13 Humanoid.MoveToFinished: Wait () 14 end

    Adicione um comentário do Tutorial: Pathfinding
    Comentário enviado com sucesso! Vamos analisá-lo nas próximas horas.