desarrollo de videojuegos ma.elena melón jareda itesm-cem departamento de sistemas de información...

25
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

Upload: isabel-hilario

Post on 22-Apr-2015

2 views

Category:

Documents


1 download

TRANSCRIPT

Page 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

Desarrollo de Videojuegos

Ma.Elena Melón Jareda

ITESM-CEM Departamento de Sistemas de Información y Computación

Persecución de enemigosRuta más corta

Page 2: 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

Persecución sencilla Implementación en Unity

PJ Moskal

http://dmac.comdma.com/?p=988

Page 3: 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

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.

Page 4: 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

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<distanceDetection){

//print("attack");

GetComponent(SmoothLookAt).enabled = true;

GetComponent(ConstantForce).enabled = true;

}else{

//print("stop attack");

GetComponent(SmoothLookAt).enabled = false;

GetComponent(ConstantForce).enabled = false;

}

}

}

Page 5: 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

Otra persecución sencilla Implementación en Unity

GesterXhttp://answers.unity3d.com/questions/19351/how-to-create-a-basic-follow-ai

Page 6: 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

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.

Page 7: 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

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.

Page 8: 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

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

}

Page 9: 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

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(dist<minDistance){

Debug.Log("Te atrape!");

}else if(dist>maxDistance){

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;

}

}

}

Page 10: 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

Ruta más corta

A*

Page 11: 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

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.

Page 12: 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

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

Page 13: 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

A*

A* mantiene dos estructuras de datos auxiliares:una fila de prioridad (ordenada por el valor f(n) de

cada nodo) nodosPorVisitar o abiertosuna 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.

Page 14: 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

Ejemplo Simple

origen

destino

obstáculo

http://www.policyalmanac.org/games/aStarTutorial.htm

Page 15: 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

Ejemplo Simple

origen

destino

obstáculo

¿Qué camino seguir?

Page 16: 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

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

Page 17: 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

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))

Page 18: 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

Ejemplo Simple

f(n)

¿Cuál es la mejor opción?

h'(n)

g(n)

Page 19: 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

Ejemplo Simple

Page 20: 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

Ejemplo Simple

Page 21: 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

Ejemplo Simple

Page 22: 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

Ejemplo Simple

Page 23: 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

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.

Page 24: 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

Implementación de A* en Unity

Aron Granberg

http://www.arongranberg.com/unity/a-pathfinding/download/