1 / 25

Desarrollo de Videojuegos

Desarrollo de Videojuegos. P ersecución de enemigos Ruta más corta. Ma.Elena Melón Jareda ITESM-CEM Departamento de Sistemas de Información y Computación. Persecución sencilla Implementación en Unity. PJ Moskal http://dmac.comdma.com/?p=988. Persecución.

maggy-howe
Download Presentation

Desarrollo de Videojuegos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Desarrollo de Videojuegos Persecución de enemigos Ruta más corta Ma.Elena Melón Jareda ITESM-CEM Departamento de Sistemas de Información y Computación

  2. Persecución sencilla Implementación en Unity PJ Moskal http://dmac.comdma.com/?p=988

  3. Persecución • El enemigo siempre voltea a ver al FPS controller y se mueve en su dirección. • El script de distancia hace que sólo se mueva el enemigo si el FPS controller se encuentra a una distancia mínima. • Ver video.

  4. Script de distancia //attach this script to the object that will follow FPC //this script working conjunction with SmoothLookAt script that you should also apply to the object //and Constant Force component that should be applied to the object //The object needs a sphere collider and it has to be a rigidbody with Freeze Rotation turned on //object to be followed vardetectObject: Transform; //distance that will trigger following action vardistanceDetection: float; function Update () { if (detectObject) { var dist = Vector3.Distance(detectObject.position, transform.position); //if distance is less than what is specified then do something if(dist<distanceDetection){ //print("attack"); GetComponent(SmoothLookAt).enabled = true; GetComponent(ConstantForce).enabled = true; }else{ //print("stop attack"); GetComponent(SmoothLookAt).enabled = false; GetComponent(ConstantForce).enabled = false; } } }

  5. Otra persecución sencilla Implementación en Unity GesterX http://answers.unity3d.com/questions/19351/how-to-create-a-basic-follow-ai

  6. Instrucciones • En este caso el script hace todo lo que a mano se realizó en el video anterior. • No se toman en cuenta distancias. • Seguir las instrucciones de la liga.

  7. Modificaciones • El código de Internet no toma en cuenta las distancias. • Combinando los 2 scripts anteriores, el de persecución y el de distancia, se puede detectar si el enemigo está demasiado lejos o demasiado cerca y detener la animación.

  8. Script modificado var target : Transform; //theenemy's target varmoveSpeed = 3; //movespeed varrotationSpeed = 3; //speed of turning varmaxDistance=100; varminDistance=10; varmyTransform : Transform; //currenttransform data of thisenemy functionAwake() { myTransform = transform; //cache transform data foreasyaccess/preformance } functionStart() { target = GameObject.FindWithTag("Player").transform; //target theplayer }

  9. Script modificado functionUpdate () { if (target) { vardist = Vector3.Distance(target.position, transform.position); //ifdistanceislessthanwhatisspecifiedthen do something if(dist<minDistance){ Debug.Log("Te atrape!"); }elseif(dist>maxDistance){ Debug.Log("Estas demasiado lejos!"); }else{ Debug.Log("Alla voy!"); //rotateto look at theplayer myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime); //movetowardstheplayer myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime; } } }

  10. Ruta más corta A*

  11. A* • El algoritmo de búsqueda A* (A estrella) se clasifica dentro de los algoritmos de búsqueda en grafos. • Presentado en 1968 por Hart, Nilsson y Raphael. • El algoritmo encuentra el camino de menor costo entre un nodo origen y uno objetivo (siempre y cuando se cumplan determinadas condiciones). • A* es un algoritmo completo: en caso de existir una solución, siempre dará con ella.

  12. A* • A* utiliza la función de evaluación: f(n) = g(n) + h'(n) • g(n) es el costo real del camino recorrido para llegar al nodo n. • h'(n) representa el valor heurístico (estimado) del nodo a evaluar desde el n hasta el final

  13. A* A* mantiene dos estructuras de datos auxiliares: • una fila de prioridad (ordenada por el valor f(n) de cada nodo)  nodosPorVisitaro abiertos • una fila donde se guarda la información de los nodos que ya han sido visitados  nodosVisitadoso cerrados • En cada paso del algoritmo, se expande el nodo que esté primero en nodosPorVisitar y en caso de que no sea un nodo objetivo, calcula la f(n) de todos sus hijos, los inserta en nodosPorVisitar y pasa el nodo evaluado a nodosVisitados.

  14. Ejemplo Simple obstáculo destino origen http://www.policyalmanac.org/games/aStarTutorial.htm

  15. Ejemplo Simple obstáculo destino origen ¿Qué camino seguir?

  16. Ejemplo Simple • Para este ejemplo vamos a suponer lo siguiente: • Moverse horizontalmente o verticalmente cuesta 10 • Moverse en diagonal cuesta 14 • g(n) se calculará sumando el costo del último movimiento más el costo que lleva el padre

  17. Ejemplo Simple • h'(n)puedeestimarse de diferentesmaneras. • El métodoqueusaremosparaesteejemplo se conoce con el nombre de Método Manhattan. • En estemétodocalculas el total de cuadrosque se requierenrecorrerhorizontalmente o verticalmenteparallegar al destino, ignorandomovimientosdiagonales y obstáculos. Después se multiplicapor 10 quees el costo de cadamovimiento horizontal o vertical. H = 10*(abs(currentX-targetX) + abs(currentY-targetY))

  18. Ejemplo Simple f(n) g(n) h'(n) ¿Cuál es la mejor opción?

  19. Ejemplo Simple

  20. Ejemplo Simple

  21. Ejemplo Simple

  22. Ejemplo Simple

  23. A* • h'(x) es un estimador de h(x) que informa la distancia al nodo objetivo, entonces: • Si h'(x) hace un estimación perfecta de h(x), A* converge inmediatamente al objetivo. • Si h'(x) = 0, la función g(x) controla la búsqueda. • Si h'(x) = 0 y g(x) =0 la búsqueda será aleatoria. • Si h'(x) = 0 y g(x) =1 o constante, la búsqueda será Primero en Anchura. • Si h'(x) nunca sobrestima a h(x) (o subestima), se garantiza encontrar el camino optimo, pero se desperdicia esfuerzo explorando otras rutas que parecieron buenas. • Si h'(x) sobrestima a h(x), no puede garantizarse la consecución del camino del menor costo.

  24. Implementación de A* en Unity Aron Granberg http://www.arongranberg.com/unity/a-pathfinding/download/

  25. Versiones actuales • http://www.arongranberg.com/astar/docs/getstarted.php

More Related