Noticias

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

Misil Guiado - OnTriggerStay2D

Iniciado por Yellow, Marzo 29, 2016, 05:04:04 AM

Tema anterior - Siguiente tema
Marzo 29, 2016, 05:04:04 AM Ultima modificación: Mayo 29, 2016, 02:53:47 AM por Yellow
 
 
Hola, muy buenas a todos compañeros.
 
Quiero realizar una consulta a la comunidad, ya que no tengo muy claro cómo puedo lograr que este código, instancie un GameObject (en este caso un misil) hacia el collider (Other) que entra dentro del Trigger.
 
Hasta el momento, puedo instanciar el misil hacia adelante (leftSide.up) cuando algún objeto con collider entra dentro del Trigger (Un Box Collider 2D). Pero mi intención es que el misil se dirija hacia la posición del GameObject que acaba de entrar (Sí, que lo persiga).
 
En resumen, UN MISIL GUIADO.
 
Todo el código dentro del "if" se cumple, el objeto se instancia, y se aplica el Addforce hacia adelante: (Es un juego 2D)
 

void OnTriggerStay2D(Collider2D Other){
        if (currentTime >= timeBetweenSide && playerController.selecS && playerController.launchSide && instantiateSide1 && playerController.sideCount > playerController.minSideWinder) {
            GameObject side = Instantiate (sideWinder, leftSide.position, myTransform.rotation) as GameObject;
            Rigidbody2D sidePhysics = side.GetComponent<Rigidbody2D> ();
            sidePhysics.AddForce (leftSide.up * Time.deltaTime * 2000, ForceMode2D.Impulse); 
            currentTime = ;
        }
    }

 
He probado código, pero hasta ahora no logro nada, por eso dejo aquí el básico, Addforce hacia adelante, para ver que ideas nuevas me pueden brindar.
 
Lo hago dentro de OnTriggerStay2D, para simular el rango de disparo del misil, si no está dentro del Trigger, no se puede disparar.
 
Gracias de antemano, por dedicar tiempo en ayudar a este "desarrollador" atorado.
 
 

Y qué quieres? Que a partir del código de tienes se convierta en código para un misil guiado?

Deberías ponerle un código al misil para dirigirlo donde quieras, es mucho más práctico que intentar hacerlo todo desde un único script.

ese codigo nisiquiera tiene sentido para hacer un misil guiado... la idea es q primero lo disparas poniendole fuerza (metodo de inicio), luego haces q se oriente todo el tiempo hacia su objetivo pero q gire lento (metodo de actualizacion), y luego si toca algo explota (metodo de contacto)... asi ves q necesitas al menos tres metodos no todo apelotado en un evento Trigger

Cita de: Yellow date=1459220644En resumen, UN MISIL GUIADO.
   
   
       
   
   

void OnTriggerStay2D(Collider2D Other){
        if (currentTime >= timeBetweenSide && playerController.selecS && playerController.launchSide && instantiateSide1 && playerController.sideCount > playerController.minSideWinder) {
            GameObject side = Instantiate (sideWinder, leftSide.position, myTransform.rotation) as GameObject;
            Rigidbody2D sidePhysics = side.GetComponent<Rigidbody2D> ();
            sidePhysics.AddForce (leftSide.up * Time.deltaTime * 2000, ForceMode2D.Impulse); 
            currentTime = ;
        }
    }

   
      He probado código, pero hasta ahora no logro nada, por eso dejo aquí el básico, Addforce hacia adelante, para ver que ideas nuevas me pueden brindar.
   
   
      Lo hago dentro de OnTriggerStay2D, para simular el rango de disparo del misil, si no está dentro del Trigger, no se puede disparar.
   
   
      Gracias de antemano, por dedicar tiempo en ayudar a este "desarrollador" atorado.
   
   
       
   


 
 
Para ser un MISIL GUIADO necesitarías un objetivo, y en el código no has puesto ningún objetivo, solo has efectuado un disparo.
 
La forma más sencilla de crear un DISPARO es aplicando una velocidad al componente Rigidbody o Rigidbody2d, al que hemos desactivado 'Use gravity' aplicar gravedad, y hemos puesto a 0 las variables Drag, Angular Drag, y Mass.
 
De este modo no sería necesario crear un script dentro del GameObject del misil para añadir una fuerza en cada 'frame'.
 
De esta forma mantendrá una trayectoria y una velocidad constante. El código sería:
 
 
 

void OnTriggerStay2D(Collider2D Other){
        if (currentTime >= timeBetweenSide && playerController.selecS && playerController.launchSide && instantiateSide1 && playerController.sideCount > playerController.minSideWinder) {
            //Instanciar misil, y guardar referencia en variable side
            GameObject side = Instantiate (sideWinder, leftSide.position, myTransform.rotation) as GameObject;
            //Guardar referencia al componente Rigidbody2D en la variable sidePhyscis
            Rigidbody2D sidePhysics = side.GetComponent<Rigidbody2D> ();
            //Aplicar una velocidad al misil de 30 hacia adelante
            sidePhysics.velocity = side.transform.forward * 30f;  
            }
    }

 
 

Aplica una fuerza constante y modifica la rotacion del misil mediante Quaternion.Lerp() hacia el objetivo.

Etiquetas: