hola
tengo 4 coches (uno de ellos manejado por el player), en una "arena" (una zona cuadrada, cerrada, con algunos grandes bloques a lo columna)
los coches al moverse van dejando una "cola" (generando un muro) como en la escena de las "motos" de tron... (pero girando normal, no de 90 grados como en tron)...
la cosa es que quiero hacer una IA que sea capaz de esquivar los muros, a la vez que intentan acorralar a los otros coches...
...y no se muy bien hacia donde dirigirme... jeje
puesto que los muros son dinamicos (los van generando los coches, en cualquier algulo) creo que usar el navMesh no es viable... tengo un sistema de pathFinding propio pero "setupearlo" todo el rato (porque los "muros" cambian) tampoco es viable...
habia pensado usar varios raycast en varias direcciones para deterctar los muros y torcer en consecuencia... mientras intenta ir hacia un "target" que se posicionaria "delante" de alguno de los coches.... creo que lo hare asi...
...pero queria saber que ideas tenias para solucionar esto
NavMesh teniendo solo 4 vehículos sería bastante viable, si el juego es para PC.
Podrías basarte en un PathFinding básico por un grid con slot de un tamaño considerable, y que los muros al ser creados ocupen dicho slot... Lo de siempre.
el juego es para android...
si, tambien he pensado lo de los "slots"... hacer todo como una cuadricula... con "casillas" de tamaño considerable, como dices, para mejorar el rendimiento... pero no se si me convence... el resultado, el movimiento, creo que quedaria como "cuadriculado" y me gustaria un movimiento mas "natural" (el torcer de los coches, las "trazadas" (caminos) que hacen)
...creo que lo hare con los raycasts...
Cita de: Igor date=1522947028habia pensado usar varios raycast en varias direcciones para deterctar los muros y torcer en consecuencia... mientras intenta ir hacia un "target" que se posicionaria "delante" de alguno de los coches.... creo que lo hare asi...
No digo que no te vaya a salir, pero en mi experiencia he intentado hacer esto con simples enemigos patruyando(porque quería inventar Skynet) y terminas necesitando varios rays + info del propio trayecto (quizas más) y encima el resultado el raro , incluso si te fijas los experimentos de IA que lo usan se ve medio trucho , por eso termina siendo tedioso y quizás hasta peor en performance que usar un NavMesh, no lo se.
Cita de: Igor date=1522959037si, tambien he pensado lo de los "slots"... hacer todo como una cuadricula... con "casillas" de tamaño considerable, como dices, para mejorar el rendimiento... pero no se si me convence... el resultado, el movimiento, creo que quedaria como "cuadriculado" y me gustaria un movimiento mas "natural" (el torcer de los coches, las "trazadas" (caminos) que hacen)
No necesariamente te quedaría nada cuadriculado si lo perreas bien, dependerá de tu sistema de pathfinding, mas que nada del desplazamiento, ponele un ej:
Fijate como el auto va de un permitido a otro formando esas rectas, si a esos trayectos los suavizas podés lograr un aspecto creible y no tan duro (te recomiendootra a Sebastian Lague con su editor de Curvas, muy informativo además y para esto se aplica muy bien). Fijate como en mi dibujo el desplazamiento va del punto permitido al otro sin importar el medio, esto sirve pero si le metés más complejidad todo se va al diablo, necesitas tener pequeñas metas o irte a algo más rebuscado.
Si usas el navMesh podés usar obstáculos dinámicos NavMeshObstacle en "Carve" , la idea sería ir generando por un lado lo visual (bien suavizado y demás de los muros) y por otro la parte cuadrada no visible que hará de obstáculo, pero ahora el obstáculo no funcionaría como en mi dibujo ahora sí lo esquiva
Estoy pensando en voz alta, no me creas nada
thankius @lightbug por tus consejos, con graficos explicandolo y todo... jeje,
pues justo el sistima de pathFinding que me hize fue siguiendo un tutorial de Sebastian Lauge...
probare a usarlo a ver si queda bien el resultado... y probare tambien con un sistema a base de rayCast...
de todas formas esto era solo para un minijuego dentro del juego... y se me ha ocurrido que en vez de un "tron" puedo hacer un "snake", quitar los otros coches, y jugar a recojer items... y que se alargue la cola... pero bueno... primero intentare hacerlo a lo "tron", con coches IA... si me lio mucho pasare de los coches IA... y lo hare a lo "snake"
...la idea del pathFinding o navMesh tambien me echaba un poco para atras porque, como son coches, andan "hacia delante"... me refiero a que no giran como las personas... y entonces el "camino solucion" del pathFinding habria que "reinterpretarlo" o nose... habria que hacer algo porque el coche igual no puede dar las curvas como le marca el camino... y se estrella con un muro...
...y pense que igual hechando unos raycast podria ver si hay una pared cerca... a los lados y adelante, en un abanico de... quizas 5 o 7 raycast... y si hay pared a la derecha y a la izquierda... saber cual de las paredes esta mas cerca, si hay adelante se cierra el camino... o esas cosas... pero claro... aun me faltaria una logica de ver como llegar a tu destino....
igual al final la solucion es combinar ambos sistemas...
hare pruebas... hasta que me aburra y pase a otra cosa
Lo que dices de los rayos es el llamado "wandering behaviour", y basicamente es un poco como el steering. Tu lanzas 3 rayos, 1 frontal y 2 de 45º en los 2 lados del capo del coche para ver los lados (o mas rayos segun necesidades) y con eso te dedicas a acelerar para adelante mientras no haya obstaculo, o giras el coche si delante hay obstaculo y en alguno de los lados no lo hay.
A eso hay que sumarle el tratar de ver por donde andan los otros coches y ver si es interesante girar para cortarles el paso o no
si... algo asi se me habia ocurrido hacer... no sabia que esa "tecnica" tenia nombre... simpre se aprende algo nuevo...
creo que tres rayos seria un poco justo... habia pensado en 5 o 7 rayos... porejemplo en -90, -60, -30, 0, 30, 60, 90 grados... aunque quizas los de -90 y 90 sobran... nose...
ahora que se el nombre voy a mirar buscando por el nombre a ver si encuentro mas informacion, ejemplos, y tecnicas similares...
gracias
La mayoria de juegos de coches del mercado usan 3 solo. Uno en el medio del capo y 1 en cada lado con angulo de 45°.
Con eso te sobra para saber si viene curva o si hay obstaculo. El truco aqui es NO usar un raycast si no un sphere cast para cubrir mas espacio y asi solo gastar 3 por coche.
Si necesitas saber q pasa por detras entonces necesitas rayos en la parte trasera del coche.
mira,
he encontrao este video
eature=oembed" width="480">
aunque ya sabiaas o menos como hacerlo, me ha ayudado un poco a abordar el asunto... o por lo menos a ver cuales son los posibles "problemas" o "incidencias" o cosas inesperadas que pueden surgir... asi comenzare ya "saltandomelos"... jeje, aunque seguro que surgen otros problemas por el camino... otras "cosas"... esto es asi, es el pan de cada dia...
a veces estas todo convecido de que " si, esto es asi, y esto lo pongo de esta manera, y tiene que funcionar..." ...y estas cometiendo un error... ...y no te das cuenta hasta que lo ves y dices: "anda! claro! como no me habia dado cuenta de que iba a pasar esto, que tonto soy, tenia que haberlo hecho esto de esta otra manera..."
...que lo cambias y yasta... no pasa nada... pero esas "cosas inesperadas" seguiran surjiendo... a no ser que lo compiles y ejecutes muchas veces no ves el "error" en lo que estas haciendo...
Use el wandering en un rpg en el que trabaje. Y todos los npcs caminaban de forma "realista" sin chocar con nada y de forma random con 3 sphere casts por npc.
En coches al menos hasta la fecha en los mas conocidos he visto q la IA se basa en los 3 rayos para conducir por el circuito, y luego con triggers se decide si toman atajos o no (dependiendo de la ia de cada coche)
La complicacion en tu caso es decidir como giran los coches para cortarles el paso a los demas. Pq te toca pensar en ver como decides donde girar y en que direccion. Pero ahi esta la gracia del asunto... XD
buenas,
lo habia dejao "abandonado" unos dias... pero lo retome ayer... ya casi tengo listo el minijuego.al final con 7 raycast, hayo el punto medio de todas las colisiones (las 7) o, en caso de no producirse, las coordenadas que introduzco son las del "final" del rayo... y le sumo algo de las normales para que sepa a que lado esta "torcido" el muro... y asi pueda "adaptarse" y seguir el contorno del muro...
y luego solo hago que el coche intente ir hacia ese "punto medio"
...y si no colisiona ninguno de los rays el coche intentara ir a su "destino"...
en este caso intentara ir a coger alguno de los items (que aumentan el tamaño de la cola o "muro") (buscara el mas cercano) (los items se "respawnean" cada cierto tiempo)
ya funciona mas o menos... falta pulir un poco alguna cosa... las longitudes de los rays y las "fuerzas" aplicadas con las normales del la colision de los rays...
(ah, y no son rays, son spheres)