La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Desarrollo de Videojuegos Ma.Elena Melón Jareda ITESM-CEM Departamento de Sistemas de Información y Computación Persecución de enemigos Ruta más corta."— Transcripción de la presentación:

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

2 Persecución sencilla Implementación en Unity PJ Moskal

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 var detectObject: Transform; //distance that will trigger following action var distanceDetection: 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

5 Otra persecución sencilla Implementación en Unity GesterX 9351/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; //the enemy's target var moveSpeed = 3; //move speed var rotationSpeed = 3; //speed of turning var maxDistance=100; var minDistance=10; var myTransform : Transform; //current transform data of this enemy function Awake() { myTransform = transform; //cache transform data for easy access/preformance } function Start() { target = GameObject.FindWithTag("Player").transform; //target the player }

9 Script modificado function Update () { if (target) { var dist = Vector3.Distance(target.position, transform.position); //if distance is less than what is specified then do something if(distmaxDistance){ Debug.Log("Estas demasiado lejos!"); }else{ Debug.Log("Alla voy!"); //rotate to look at the player myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime); //move towards the player myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime; }

10 Ruta más corta A*

11 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) o g(n) es el costo real del camino recorrido para llegar al nodo n. o 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) nodosPorVisitar o abiertos una fila donde se guarda la información de los nodos que ya han sido visitados nodosVisitados o 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 origen destino obstáculo

15 Ejemplo Simple origen destino obstáculo ¿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) puede estimarse de diferentes maneras. El método que usaremos para este ejemplo se conoce con el nombre de Método Manhattan. En este método calculas el total de cuadros que se requieren recorrer horizontalmente o verticalmente para llegar al destino, ignorando movimientos diagonales y obstáculos. Después se multiplica por 10 que es el costo de cada movimiento horizontal o vertical. H = 10*(abs(currentX-targetX) + abs(currentY-targetY))

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

19 Ejemplo Simple

20

21

22

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 y/a-pathfinding/download/

25 Versiones actuales etstarted.php etstarted.php


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

Presentaciones similares


Anuncios Google