Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Hunger Times IA

Iniciado por LoquenderoMix, Julio 14, 2017, 07:07:06 PM

Tema anterior - Siguiente tema
¡Hola!
 
Como algunos de vosotros sabréis he estado desarrollando Z-Prison, poco a poco lo voy actualizando. Mientras tanto estoy creando un juego de rol que pinta bastante bien llamado Hunger Times. Quiero enfocarlo en una manera que el estilo de juego se similar a la saga "Elder Scrolls". Por el momento hay varias personas y guardias pasando waypoints y siguiendo una ruta especifica. También he puesto un sistema de inventario y de esta manera he hecho que el jugador pueda coger 4 cajas de fruta (robándolas) y que le aparezcan en el inventario, ahora lo que quiero es que, como en los juegos de Elder Scrolls, los guardias abandonen su sistema de waypoints y te persigan. Cualquier script o ayuda que me podáis pasar sería de grandísima ayuda.

Hola @LoquenderoMix,
 
mas que un script, porque hay mil maneras de hacerlo, mejor que preguntaras por el sistema que te conviene y a partir de ahi buscarte un poco la vida; lo que te conviene es un sistema de maquina de estados, encontraras mucha informacion por internet ... con ejemplos simples pero suficiente para tener una base y poder adaptarlo a tus necesidades.

Julio 14, 2017, 08:46:24 PM #2 Ultima modificación: Julio 14, 2017, 08:48:59 PM por ytinU
Nunca usé waypoints(pero sé que es un camino por donde le dices al guardia que patrulle) lo que no sé es si solo ese camino usa un bake o si todo el terreno usa el bake y tu le das los waypoints.. lo que usaba era un overlapsphere y un linecast, pues basicamente una overlapsphere es un collider que detecta los otros colliders que hay dentro y un linecast pues crea un linea de un punto a otro..
 

 
El linecast es las rayitas rojas que como cualquier otro cast colisiona con colliders(por eso al enemigo detras de la pared(linea negra) no lo detecta) cuando 'vea' al enemigo le dices que persiga..
 
Hola @Arthure tengo una duda sobre la Maquina de estados, mi concepto es algo vago pero es asociar las animaciones con su parte logica yo utilizo eventos para asociarlos y pues ....
 
Cita de: Arthure date=1500055536porque hay mil maneras de hacerlo
   


se que no era sobre la maquina de estados pero pense que tambien se puede aplicar a eso mismo asi que los eventos son una forma correcta de hacer las maquinas de estado?.
 
 

Realmente lo que yo quiero es que al principio los guardias se muestren como neutrales y al coger objetos que te persigan y se conviertan en enemigos.

Cita de: LoquenderoMix date=1500060638Realmente lo que yo quiero es que al principio los guardias se muestren como neutrales y al coger objetos que te persigan y se conviertan en enemigos.
   


Haz un script que te persiga lo desactivas y cuando cojas el objetos lo activas...

Lo de los scripts lo llevo un poco mal, estoy aprendiendo a hacerlos, y no sería capaz de hacer un script de tal magnitud. Soy más de animación.

Julio 15, 2017, 12:41:55 AM #6 Ultima modificación: Julio 15, 2017, 01:12:12 AM por lightbug
Cita de: LoquenderoMix date=1500052036Cualquier script o ayuda que me podáis pasar sería de grandísima ayuda
   


UN script? no creo, un sistema de IA puede tener multiples scripts enparentados y el script en si mismo no vale de nada, la idea esque si te pasan ideas te las rebuscas para transcribirlas a codigo.
 
 
 
Cita de: LoquenderoMix date=1500061429Lo de los scripts lo llevo un poco mal, estoy aprendiendo a hacerlos, y no sería capaz de hacer un script de tal magnitud. Soy más de animación.
   


De tal magnitud? Ja no es la gran cosa si lo queres hacer bien basico, arranscas con un enum que tenga informacion del estado actual del enemigo (= controlado por IA) por ej yo tenia uno parecido asi : idle, patrullando, persiguiendo, perdido, planteas los estados en tu update o corrutina como quieras no importa, y desde un estado chequeas condiciones que podrian hacerlo pasar a otro (en si una maquina de estados como dicen arriba), ej:
 

void Update()
{
switch(m_estadoIA)
{
   case Estado.Idle:
             // esperando
      // deteccion activada
      //calculando salida de idle y si se da proximo waypoint
          break;
   case Estado.Patrullando:
             //estas solo moviendote al waypoint destino
      // deteccion activada ---> persiguiendo
      //calculando entrada a idle al llegar --> idle
          break;
   case Estado.PErsiguiendo:
             //estas solo persiguiendo al target
      //calculando posible enfrentamiento
      //deteccion magnificada (si queres), la perdida de contacto directo rompe la deteccion hasta un tiempo --> perdido
          break;
   case Estado.Perdido:
             //deteccion magnificada, estas calculando el tiempo vs condiciones para retornar la ***cucion  --> ***cucion
      
             //si pasó el tiempo, volves a patruyar al ultimo waypoint antes de ***guir o al mas cercano (o lo que quede mas real) --> patruyando
          break;
   
}
}

 
Si a esto le metes que lo moves con un NavMeshAgent y tenes tu navmesh definida tenes el movimiento cocinado + Si le metes un sistema de deteccion (angulo, distancia, dificultad (a lo commandos por ej), etc) ya tenes una linda IA bien basica y que muchos juegos tienen. No es la IA del alien de Alien Isolation, pero vas a tener juego.
 
Podes agregarle detelles que quedan muy bien, como aumentar la habilidad de deteccion a una entidad si recien lo acabas de perder, es logico que este mas alerta. O si perdio de vista al target que se mueva a un waypoint mas cercano y se quede esperando o camine mas despacio, con el algoritmo tipico aunque no te vea siempre va a ir a buscarte con exactitud, no muy real. O refrescar los estados no cuadro a cuadro sino cada 5 / 10 / 20 cuadros. O Inhabilitar otras IA que estan a mucha distancia del Player. etc etc etc.

Etiquetas: