Jump to content
R3N3

Physics.ComputePenetration

Recommended Posts

Hola amigos , soy nuevo con lo del Physics.ComputePenetration . Como no encontré referencia muy clara sobre el tema y no entendí muy bien la documentación de Unity decidí probarlo por mí mismo. Me funcionó en parte, no entiendo q sucede, en las imgs adjuntas pueden ver, los cubos azules serían objetos de la escena y el blanco mi caja a mover. El cubo azul señalado con la palomita verde funciona perfectamente, detecta la superposición de objetos por todas las caras. En cambio los otros dos, clonados de este, no lo hacen igual, como pueden ver en las imágenes, si lo toco por un borde si lo detecta; pero si lo hago de forma completa no. No entiendo por qué no interactúan igual los objetos. Qué puede ser?    

Caja3d.cs

1caja.jpg

2caja.jpg

3caja.jpg

Share this post


Link to post
Share on other sites

Hola R3N3 la otra vez te estaba escribiendo en el post original y lo perdí, me llego una notificación, la vi y no vi más el contenido,(que era largo), así que ni ganas de hacerlo de vuelta. En resumen,

- Subí el código en un formato amigable, o poné el script con el <> , o usá por ej GhostBin, es que muchos no tiene ganas ni siquiera de abrir un archivo para ver código (me incluyo) ... te voy a hacer el favor: https://ghostbin.com/paste/tmebr

- Seguís usando un overlapSphere? acordate que la forma es una caja. Puede que en los bordes puede fallar si usas un sphere.

- Tené cuidado con decir que si dir.X == 1 , si la dir cambia un minimo en fase tu condición es falta, podés decir si es >0 o <0 mejor. Tampoco no debugues haciendo este tipo de cosas, suelen llevar a problemas, más bien hace un DEbug.Ray de la penetration y listo.

 

- Acordate que con :

overlapped = Physics.ComputePenetration(
                    thisCollider, transform.position, transform.rotation,
                    collider, otherPosition, otherRotation,
                    out direction, out distance
                    );

Estás escribiendo direction cada vez (aunque en el código está comentada ?? quizás me lo perdí), es decir que si tuvieras 3 colliders overlapeados, direction sería una para el primero , otra para el segundo , otra para el tercero, Ojo! podés promediar todas las direction si querés y hacer lo del mayor o menor de los bools, nunca igualar a 1 o -1.

- Tené en cuenta que el piso podría entrar en juego, o cualquier otro collider

- Tené también en cuenta que la esfera que estás usando te da una direction en diagonal, no alineada, usa si querés un overlap Box https://docs.unity3d.com/ScriptReference/Physics.OverlapBoxNonAlloc.html

 

Creo que acá va todo el problema, pero igual te comento, no te mencioné al Compute Penetration a modo de que lo uses si o si, sino para darlo a conocer (es relativamente nuevo y no tan famoso) que en tu caso te podría llegar a ayudar, y sirve muy bien si necesitas (dentro de un entorno determinístico) resolver ciertos problemas de colisiones, pero si la cosa se empieza a complicar no tiene sentido usarlo (dependerá de tus mecánicas de juego, podrías resorver todo usando solo las físicas si tus mecánicas fueran "complicadas"). Por ej yo lo uso así, hago un desplazamiento del personaje (3D) con otro método, luego otra cosa, y luego otra .... , y al final, si quedó penetrado en el suelo, o la rampa, o la escalera le mando el compute penetration y depenetro (promediando como corresponde), pero no es el método principal (sería una locura hacer lo que hago con esto, lo he intentado y no te da mucho control). Vos fijate que te conviene.

saludos

 

 

 

Edited by lightbug

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...