Noticias

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

Gravedad en el agua

Iniciado por Siam, Noviembre 22, 2016, 11:34:01 AM

Tema anterior - Siguiente tema
Buenos dias.
 
Estoy intentando que un personaje al entrar en el agua baje al fondo mas lento. Al agua le he agregado un rigid body poniendole la masa en 0 y congelando la posicion en X e Y y en gravity scale se la he puesto en 0.05 pero no hace ningun cambio.
 
No se si esto se hace de esta manera o es mediante codigo.

Noviembre 22, 2016, 02:02:41 PM #1 Ultima modificación: Noviembre 22, 2016, 02:06:10 PM por Miguel_Angel
Tendrás que hacer que el personaje detecte el agua y cuando eso ocurra actuar sobre el personaje para que caiga mas despacio. A no ser que exista algún sistema alternativo, tendrás que programar un poco. El Rigidbody iría en el personaje no en el agua, El agua como mucho necesitaría un colisionador, aunque hay otras formas de detectar objetos. La mayoría de los problemas tienen muchas soluciones dependiendo de las necesidades del entorno.

como dice @Miguel_Angel El rigidbody fuera del agual xD
 
tienes que añadir un colisionador de maya al agual y ponerlo en modo trigger. En el personaje un script que cuando entre al agua cambie sus propiedades en el rigidbody y en su velocidad de movimiento.
 
aqui tienes un tutorial
 


   
eature=oembed" width="480">

 
 

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE(▄▀)_๑۩۞۩๑ 



Cita de: Siam date=1479810841Buenos dias.
   
   
      Estoy intentando que un personaje al entrar en el agua baje al fondo mas lento. Al agua le he agregado un rigid body poniendole la masa en 0 y congelando la posicion en X e Y y en gravity scale se la he puesto en 0.05 pero no hace ningun cambio.
   
   
      No se si esto se hace de esta manera o es mediante codigo.
   


Estas poniendo el agua como Rigiddbody, le pones un gravity scale pero le congelas la posicion, entonces no se va a mover, no se tiene que mover, se debe usar como detector.
 
Podes hacerlo de distintas formas dependiendo del tipo de agua que tengas., tenes basicamente dos tipos:
 
1 - Zonas de agua cada una representada por una caja por ejemplo, que se "pueden" encontrar a distintas alturas(ej tenes un edificio en el piso uno tenes una pileta, tmb en el piso 4 y asi... , o tenes distintos charcos de agua en un terreno irregular) la caja tiene funcionalidad.
 
2 - un Mar, uniforme la misma altura, (Ej juego Crysis) el objeto no tiene funcionalidad
 
Si es el caso 2 podes verificar si el Player esta mas abajo (transform.position.y (Los pies)) que la altura donde comienza el "mar", pero no solo te alcanza donde comienza sino que le tenes que dar un poco mas, mas o menos donde el player no hace Pie (Yo uso 3/4 de la altura del Player o el cuello mas o menos). Podes hacer esto con un simple plano que hace de grafico, no tiene ninguna funcionalidad. Y el punto de referencia podes atar un GameObject vacio al player y usarlo de referencia y estarias verificando la altura de este objeto vs la altura del plano.
 
Si es el caso 1, podes atar un "detector" (puede ser una esfera o una caja trigger) puesto a la altura donde el player no hace pie (ponele en el cuello). El detector este solo colisionara con los volumenes de agua, o sea que podes crear dos layers una que sea "agua", otra "detectordeAgua", te vas a Projects/Physics y comprobas que en la matriz se intersecte la de detectoragua solamente con agua.
 
Una vez que entraste en el modo "nado" ahi aplicas a tu personaje los efectos correspondiente, fijate que la camara todavia no sufrio ningun efecto, si lo queres podes poner el detector en la cabeza (o agregar otro detector) del player (funciona en primera y tercera si es tipo sidescroll) y cuando entra en "modo nado" pones efectos en la camara (Bajate los "More image effects" del asset store son muy buenos , gratis y tenes de todo (hasta efecto borracho ajjaja))
 
Saludos

He estado haciendo pruebas y he creado un GameObject vacio con un boxCollaider en trigger y he creado este script y se lo he agregado
 

void OnTriggerEnter2d(Collision2D col)
{
   Debug.Log ("Enter");
   col.gameObject.GetComponent<Rigidbody2D> ().gravityScale = 0.3f;
}
 
void OnTriggerExit2d(Collision2D col)
{
   Debug.Log ("Exit");
   col.gameObject.GetComponent<Rigidbody2D> ().gravityScale = 1f;
}

 
Por lo que yo entiendo cualquier elemento con un collaider y un rigid body deberia bajar la gravedad, pero ni siquiera me sale el mensaje de debug.log

Noviembre 22, 2016, 09:51:14 PM #5 Ultima modificación: Noviembre 22, 2016, 10:08:02 PM por lightbug
Cambia "Collision2D por Collider2D, collision se usa para OnCollisionEnter
 
Otra cosa, cuando pedis el componente rigidbody si lo que entra no lo tiene te va a dar nullreference siempre verifica que lo tenga antes
 

if(col.GetComponent<Rigidbody2D>())
  col.GetComponent<Rigidbody2D>().gravityScale .....

 
 


Etiquetas: