Noticias

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

Hacer que un enemigo persiga al personaje

Iniciado por Anonimus Strong, Diciembre 18, 2016, 01:57:47 AM

Tema anterior - Siguiente tema
¿como podría hacer que un enemigo persiga al personaje?
 
no tengo ni la menor idea como lograr esto si alguien le gustaría dar un idea o un lugar donde encontrar esta información sera bienvenida gracias.

Hola, un lugar no te puedo dar, te puedo dar minimo 25 sitios jaja.
 
Que persiga a tu personaje de que manera? directamente atravesando muros o como una persona persiguiendo a otra.
 
Si es el primer caso es muy simple y no cabe mencionarlo.
 
Si es el segundo Unity trae un sistema de navegacion (como casi todo motor 3d) que se basa en una malla de navegacion y agentes que navegan por esta malla (como pegados a ella). La malla de navegacion se construye offline (bake) y abarca todo lo que ve hacia abajo (hacia y's negativos) de tu escena (pisos, rampas, escaleras), Abris Window/NavigationMesh , te aseguras que lo que quieras que forme parte de la maya sea "static" y le das a bake.
 
Una vez creada le agregas el componente NavMeshAgent a los enemigos (es como un characterController practicamente). Lo bueno de esto es que utiliza pathfinding permitiendo crear el camino mas corto entre el agente y su destino (que determinas por codigo).
 
Saludos
 
 

Es como dice ligthbug ... podes hacerlo con NavMesh ...
 
Hice un tutorial hace tiempo sobe eso ...
 
 
 


   
eature=oembed" width="480">

 
Luego tenes que hacer las animaciones ...

Julio 02, 2017, 01:37:00 PM #3 Ultima modificación: Julio 02, 2017, 02:47:35 PM por jtorp20
Hola, mi código respecto de lo aprendido en el video queda como sigue:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class skeleton_chase : MonoBehaviour {
    GameObject Player;
    NavMeshAgent agente;
 
    void Start () {
        agente=GetComponent<NavMeshAgent> ();
        Player =GameObject.FindGameObjectWithTag("Sidney");
        agente.SetDestination(Player.transform.position);
    }
 
    void Update () {
        agente.SetDestination(Player.transform.position);
    }
}

 
----------------------------------------------------------------------------------------------------------------------------------------------------------
 
Yo tengo la versión 5.6.1 de Unity y para que el  compilador me reconozca el NavMeshAgent he tenido que importar using UnityEngine.AI;
 
Por otro lado, he añadido  agente.SetDestination(Player.transform.position); en el Update(),con el fin de que el malo me persiga y no se pare en la posición que tenía el Player al inicio del juego.
 
No funciona muy bien porque el  malo primero atraviesa al player y si continuo corriendo y me paro , lo empuja deslizándolo.
 
Lo que pretendía era lograr la ***cución y eso esta conseguido, ahora toca seguir mejorando el script.
 

 

No utilices SetDestination dentro del Update directamente asi, es una perdida de recursos. Con lo que lo pongas en el Start y luego calculas la distancia entre objetos (Update) para activar y desactivar la ***cuccion, te valdra. (ademas esto te ayuda para que no colisionen)

Cita de: Jose Angel date=1498995420No funciona muy bien porque el  malo primero atraviesa al player y si continuo corriendo y me paro , lo empuja deslizándolo.
   


Hay un opción del propio navmeshagent la cual se llama sttopingdistance que calcula a cuanta distancia se detiene el navmeshagent del objetivo, pues si no quieres que lo empuje detenlo antes..

Julio 02, 2017, 06:47:28 PM #6 Ultima modificación: Enero 01, 1970, 01:00:00 AM por jtorp20
Muchas gracias, ya lo he detenido con esta opción. 
Gracias http://www.unityspain.com/profile/23667-gsg3d/?do=hovercard&referrer=http%253A%252F%252Fwww.unityspain.com%252Ftopic%252F36784-hacer-que-un-enemigo-persiga-al-personaje%252F" href="<___base_url___>/profile/23667-gsg3d/" id="ips_uid_4203_5" title="Go to GSG3D's profile" rel="">GSG3D tomo nota y lo estudio.

Un apunte, aunque en Unity es regla de oro tener mucho cuidado con las escalas, utilizando las mallas de navegación hay que ser especialmente cuidadoso, si haces los objetos o los mapas con escalas muy grandes empezarás a ver que se vuelven locos, que no detectan al jugador, que la cámara te hace giros raros, te lo digo porque aunque no te haya pasado, si en un momento dado te pasa algo de eso, sea lo primero que mires.

Julio 03, 2017, 06:02:38 PM #8 Ultima modificación: Julio 04, 2017, 08:44:48 AM por jtorp20
Sabe alguien que diferencia hay entre estas dos formas de declarar al Player objetivo de la ***cución de un enemy?
 
1.
 



   
       
   
   
      GameObject player;
   
   
      player = GameObject.FindGameObjectWithTag("xxx");
   
   
       
   

[/quote]
 
2.
 



   
       
   
   
      Transform Player;
   
   
      player = GameObject.FindGameObjectWithTag("xxx").transform;
   
   
       
   

[/quote]
 
 

En el 2do estas accediendo al transform del GO(gameobject) y por ende puedes usar las funciones del mismo, es como un 'atajo', si vas a usar las funciones del transform(posición,escala,rotación) crea..
 
Cita de: Jose Angel date=1499097758Transform Player;
   
   
      player = GameObject.FindGameObjectWithTag("xxx").transform;
   


si no es necesario acceder al componente transform, pon
 
 
 
Cita de: Jose Angel date=1499097758GameObject player;
   
   
      player = GameObject.FindGameObjectWithTag("xxx");
   


cosa que al poner 'player' puedes acceder a más componentes y no solamente esta ligado al transform.

Julio 04, 2017, 12:32:57 AM #10 Ultima modificación: Enero 01, 1970, 01:00:00 AM por jtorp20
Muchas gracias

Cita de: Luis_arg date=1484849751Es como dice ligthbug ... podes hacerlo con NavMesh ...
   
   
      Hice un tutorial hace tiempo sobe eso ...
   
   
       
   
   

      
         
eature=oembed" width="480">
      
   
   
      Luego tenes que hacer las animaciones ...
   


eh visto el video y unos cuantos que subiste, una pena que no hables, lo explcias de *** madre, solo te falta hablarlo XD

Etiquetas: