Close
    Search Search

    Tutorial: Pathfinding

    Página de tutoriales Este artículo es un tutorial avanzado.Todos los tutoriales · Tutoriales de secuencias de comandos

    ¡Hola! Este sencillo tutorial le enseñará cómo crear una IA básica que pueda encontrar y seguir caminos automáticamente.

    Antes de comenzar, debe tener conocimientos del Tutorial avanzado de secuencias de comandos.

    Creación de un curso y una plataforma

    Tutorial: Pathfinding

    Esta es la carrera de obstáculos que usaré para este tutorial. Contiene un laberinto, saltos de lava, una cuerda floja y un rompecabezas Pick-a-Path. Todos estos son modelos gratuitos, por lo que si desea utilizarlos, todos están disponibles en la Caja de herramientas.



    Ahora, necesitamos crear un punto de partida al comienzo del laberinto. Para evitar confusiones, es mejor enmarcar la ubicación.

    Finalmente, al final del curso, debe tener una almohadilla de extremo. O puede obtener las coordenadas de la ubicación final.

    Ahora, necesitamos hacer el propio robot. Recuerde, para que esto funcione, el robot necesita tener un objeto humanoide adentro. Idealmente, debería insertar un aparejo a través del Creador de aparejos.

    Creando un camino

    Ahora necesitamos crear un camino. Inserte un script en la plataforma y use un servicio llamado PathfindingService.

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

    Ahora configuramos algunas variables locales para el punto inicial y final, así como el humanoide.

    1 inicio local = script.Parent.HumanoidRootPart 2 local Fin = juego.Workspace.EndPoint 3 local hum = script.Parent.Humanoid

    Aquí, el punto de partida es HumanoidRootPart del robot. El punto final es la parte del área de trabajo llamada "EndPoint".



    Ahora usamos una función llamada Crear ruta para crear una ruta en blanco.

    1 ruta local = rutaServicio: CreatePath ()

    Por supuesto, todavía tenemos que darle al sistema un punto de partida y un punto final. Usamos la función ComputeAsync () para que el sistema calcule la ruta más corta posible.

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

    Si usa coordenadas, reemplace x1, x2, etc. con los números correspondientes. Aún así, todavía tenemos que hacer que el robot realmente haga el camino.

    Waypoints

    Tutorial: Pathfinding

    Waypoints son pequeños puntos a lo largo del camino que sigue el robot hasta el destino final. Modifiqué mi guión final para producir estos puntos. Cada uno de estos puntos es 1 waypoint.

    Ahora, necesitamos usar la función GetWaypoints para obtener los waypoints. Lo que hace la función es que devuelve una matriz, que consta de las coordenadas de cada waypoint en orden.

    1 waypoints locales = ruta: GetWaypoints ()

    Finalmente, necesitamos usar la función MoveTo para movernos a cada waypoint. Por supuesto, debido a que los puntos de ruta están en una matriz, usamos un ciclo en pares.

    1 para i, waypoint en ipairs (waypoints) do 2 Humanoid: MoveTo (waypoint.Position) 3 end

    Pero, si recuerda, si usa algún tipo de bucle, necesita al menos un retraso. Entonces, usamos el evento MoveToFinished para esperar hasta que MoveTo finalice, antes de repetir el ciclo.


    1 para i, waypoint en ipairs (waypoints) do 2 Humanoid: MoveTo (waypoint.Position) 3 Humanoid.MoveToFinished: Wait () 4 end


    Sin embargo, el robot no puede saltar sobre los saltos de lava. Para solucionar esto, hay una propiedad de cada punto de ruta llamada "Acción", que le dice qué acción debe realizar. Por lo tanto, configure una declaración if de modo que si el punto de ruta requiere que salte, salte.


    1 si waypoint.Action == Enum.PathWaypointAction.Jump luego 2 Humanoid.Jump = verdadero 3 final

    ¡Y eso es todo! Una vez que los saltos de lava hayan terminado, ¡fácilmente hará la cuerda floja y Pick-a-Path con una brisa! En caso de que tuviera problemas para seguir, aquí está el guión final:

    1 local PathfindingService = juego: GetService ("PathfindingService") 2 local Humanoid = script.Parent: WaitForChild ("Humanoid") 3 local Root = script.Parent: WaitForChild ("HumanoidRootPart") 4 local goal = game.Workspace.Goal. Posición 5 ruta local = PathfindingService: CreatePath () 6 ruta: ComputeAsync (Root.Position, objetivo) 7 waypoints locales = ruta: GetWaypoints () 8 for i, waypoint in ipairs (waypoints) do 9 Humanoid: MoveTo (waypoint.Position) 10 if waypoint.Action == Enum.PathWaypointAction.Jump luego 11 Humanoid.Jump = true 12 end 13 Humanoid.MoveToFinished: Wait () 14 end

    Añade un comentario de Tutorial: Pathfinding
    ¡Comentario enviado con éxito! Lo revisaremos en las próximas horas.