Noticias

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

Temas recientes

problema detectando colisiones

Iniciado por Rddleo, Enero 17, 2019, 01:36:49 AM

Tema anterior - Siguiente tema
Enero 17, 2019, 01:36:49 AM Ultima modificación: Enero 18, 2019, 12:04:42 AM por Bamf
hola muy buenas otra vez, esta vez tengo un problema con la funcion OnCollisionEnter(), quiero hacer que cuando el coche del jugador se choque contra otro coche se reinicie la pantalla, pero o no me detecta la colision o no tengo bien puesta la funcion de reinicio, pero creo que es mas lo primero. os dejo el codigo y si le veis algun fallo si podeis me lo decis. Un saludo.
 
 
 
le he añadido al jugador y al prefab de los coches que vienen de frente la box collider2d, y al jugador rigid body2d, probe a ponerle tb rigid body2d a los otros coches pero tampoco funcionaba asi que se lo quite
 
 
 

 private void OnCollisionEnter2D(Collision2D collision)
    {
        this.reinicio();
    }
   public void reinicio()
    {
        SceneManager.LoadScene("SampleScene");
    }

 
 

Cita de: Rddleo date=1547685409pero creo que es mas lo primero
   


siempre probá las cosas por separado (siempre que tengas un problema, claro está), si no estás seguro meter todo de golpe solo te va a confundir. Por ej corre en una instrucción solo el LoadScene, para el onCollisionEnter hace un Debug.Log o print que diga "anda el on collision" , que se yo.
 
Si el nombre de la escena es exactamente así, debería estar bien. Lo del OnCollisionEnter quizás sea, porque uno (por lo menos) de los dos debe tener un rigidbody, fijate la tabla de colisiones del manual. https://docs.unity3d.com/Manual/CollidersOverview.html
 
También verificá que: 1 -  las capas que tengan los objetos estén preparadas para colisionar entre ellas y 2 - que el objeto que tenga el mensaje OnCollisionEnter tenga el boxCollider2d (y que no sea un padre vacío o cosas así).

Yo estoy detectando las colisiones y en un objeto utilizo un boxcollider2d + rigid2d, en el otro solo el boxcollider. El objeto donde chocan los sprites es un rigidbody2d de tipo 'kinematic' y su boxcollider2d tiene la opcción 'is trigger' activada, y el sprite que es quien se mueve y choca, tiene un boxcollider2d también con trigger activado, ambos en el mismo tag, si no no se detectan.

Enero 17, 2019, 11:17:14 PM #3 Ultima modificación: Enero 18, 2019, 01:40:39 AM por lightbug
Cita de: Argantonio date=1547752308su boxcollider2d tiene la opcción 'is trigger' activada
   


Si tiene eso no creo que te ande on collision, (quizás sí OnTrigger) fijate del manual:
 
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionEnter.html
 
Dice:
 


   OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider. [Hasta aca bien]

 


   In contrast to OnTriggerEnter, OnCollisionEnter is passed the Collision class and not a Collider. The Collision class contains information about contact points, impact velocity etc. If you don't use collisionInfo in the function, leave out the collisionInfo parameter as this avoids unneccessary calculations.


   ---> Note: Collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached. Collision events will be sent to disabled MonoBehaviours, to allow enabling Behaviours in response to collisions.


   Notar que de la misma tabla, no es posible disparar el mensaje entre kinematic rigidbodies, solo un kinematico vs un NO kinemático, me olvide de mencionarlo anteriormente.

 
 
 
Cita de: Argantonio date=1547752308ambos en el mismo tag, si no no se detectan.
   


el tag no hace nada, tampoco las capas por si mismas, vos podés decir que capa choca con cual (via Layermask o matriz de colisiones), pero el tag ni pincha ni corta.

Cita de: Rddleo date=1547685409

 private void OnCollisionEnter2D(Collision2D collision)
    {
        this.reinicio();
    }
   public void reinicio()
    {
        SceneManager.LoadScene("SampleScene");
    }

   
       
   


Por ahi ya te lo dijieron pero es probable que este usando dos cuerpos Kinematicos, con OnCollisionEnter esto no funciona, tal vez sea mas facil usar el OnTriggerEnter.

Pues si es un cuerpo kinematico el del rigid body probare a cambiarlo y os cuento que tal
 
 

Cita de: lightbug date=1547763434el tag no hace nada, tampoco las capas por si mismas, vos podés decir que capa choca con cual (via Layermask o matriz de colisiones), pero el tag ni pincha ni corta. 
   
   
      En mi proyecto, que es el primero que hago, todo sea dicho, si no tienen el mismo tag no funcionan, y esto ocurre porque así lo tengo asignado en los scripts... Yo lo unico que he hecho es ponerle un ejemplo de como funciona en mi proyecto, no pretendía dar consejos como 'experto' ni nada parecido. Un saludo!
   


 

Cita de: Argantonio date=1547839170En mi proyecto, que es el primero que hago, todo sea dicho, si no tienen el mismo tag no funcionan, y esto ocurre porque así lo tengo asignado en los scripts.
   


Ok

Problema solucionado muchas gracias por vuestra ayuda. Un saludo.

Etiquetas: