Noticias

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

Como puedo rebotar con precisión...

Iniciado por daniele_kiro, Septiembre 08, 2016, 12:20:33 AM

Tema anterior - Siguiente tema
Septiembre 08, 2016, 12:20:33 AM Ultima modificación: Septiembre 09, 2016, 12:52:48 PM por pioj
Hola muy buenas!!
 
Mi duda es la siguiente, quiero conseguir que mi jugador rebote contra paredes y suelo sin usar el physic de bounce.
 
Consigo que detecte cuando es suelo y cuando es pared pero si pilla justo en la esquina rebota erróneamente...
 
lo que utilizo básicamente es este trozo de código :
 



   
       
   
   
      Vector3.Reflect(transform.position, transform.right);  //para pared y 
   
   
      Vector3.Reflect(transform.position, transform.up);   // para suelo.
   
   
       
   

[/quote]
 
al combinarlos da error y no se me ocurre otra forma...
 
quiero llegar a conseguir un efecto como el del siguiente vídeo :
 


   
eature=oembed" width="459">

 
 no se si me explico bien pero si alguien sabe como poder hacerlo se lo agradeceria muchisimo!!
 
 

Septiembre 08, 2016, 01:12:52 AM #1 Ultima modificación: Septiembre 08, 2016, 01:13:04 AM por hammer
mhhh no te valdria con la normal del primer punto de impacto?? algo azi
 
 
 

public void OnCollisionEnter2D(Collision2D collision2D){
   if (collision2D.transform.tag == "ColliderBump") {
      Debug.DrawRay (collision2D.contacts[0].point, collision2D.contacts       m_Rigidbody2D.AddForce (collision2D.contacts[0].normal.normalized * 1000.0f);
   }
}

 
Por cierto grandioso juego el KidKamaleon,es uno de los juegos de mi infancia,nunca llegue a pasarmelo sin el truco,demasiado largo ahhaha

Septiembre 08, 2016, 04:29:37 PM #2 Ultima modificación: Septiembre 09, 2016, 12:54:03 PM por pioj
Cita de: hammer date=1473289972mhhh no te valdria con la normal del primer punto de impacto?? algo azi
   
   
       
   
   

public void OnCollisionEnter2D(Collision2D collision2D){
   if (collision2D.transform.tag == "ColliderBump") {
      Debug.DrawRay (collision2D.contacts[0].point, collision2D.contacts       m_Rigidbody2D.AddForce (collision2D.contacts[0].normal.normalized * 1000.0f);
   }
}

   
      Por cierto grandioso juego el KidKamaleon,es uno de los juegos de mi infancia,nunca llegue a pasarmelo sin el truco,demasiado largo ahhaha
   


Muchisimas gracias @hammer !! modificandolo un poco he conseguido hacer el mismo efecto! muchas gracias!!
 
ya que estoy con el tema...
 
como podría conseguir el siguiente efecto?
 


   
eature=oembed" width="459">

 
//www.unityspain.com/applications/core/interface/file/attachment.php?id=9861" rel="">efecto expansion.mov
 
consigo que aparezcan los siguientes bloques pero para destruir los antiguos o evitar su aparición cuando hay ya un bloque existente me esta llevando de cabeza, lo tengo con colliders pero fallan bastante...
 
Hay alguna forma de comprobar si existe un objeto es xyz coordenadas y evitar que se creen si hay algo??
 
para que aparezcan hago lo siguiente:
 



   
       
   
   
      clone = Instantiate(Resources.Load("Objetos/" + nombre, GameObject));
      clone.transform.position.x = transform.position.x -1;
      clone.transform.position.y = transform.position.y +1;
      clone.GetComponent.<Animation>().Play("Aparecer");
      clone = Instantiate(Resources.Load("Objetos/" + nombre, GameObject));
      clone.transform.position.x = transform.position.x;
      clone.transform.position.y = transform.position.y +1;
      clone.GetComponent.<Animation>().Play("Aparecer");
      clone = Instantiate(Resources.Load("Objetos/" + nombre, GameObject));
      clone.transform.position.x = transform.position.x +1;
      clone.transform.position.y = transform.position.y +1;
      clone.GetComponent.<Animation>().Play("Aparecer");
      GetComponent.<Animation>().Play("Desaparecer");
      Destroy(gameObject,0.3);
   
   
       
   

[/quote]
 
 

Septiembre 08, 2016, 06:48:24 PM #3 Ultima modificación: Septiembre 08, 2016, 06:48:49 PM por hammer
Pues seguro hay  muchas maneras xD XD, no se,se me ocurren un par de opciones,aunque siempre depende de como este montado todo.
 
1.-. lo primero tienes los elementos a escala??? digamos 1:1unidad unity,qui decir como si tuvieras una grid de tiles,si es asi podrias tener un array bidimensional donde guardar lo que hay en cada tile del escenario.Si lo tienes asi solo tendrias que comprobar en el array si hay algo o no.
 
2.-con un raycast,3d no 2d,nunca he utillizado el 2d y no se si tiene profundidad. como has puesto en el codigo y poniendolo para atras en z.
 

Vector3 rayOrigin = new Vector3( transform.position.x,transform.position.y + 1.0f,transform.position.z -1.0f);
               
if(!Physics.Raycast(rayOrigin,Vector3.forward,1.0f)){}

 
y asi cambiando el ray origin por cada posicion como tienes puesto.puedes ponerle al raycast el layerMask si lo necesitas,en este caso  necesitaras que los sprites tengas un colllider 3d y no 2d
 
3.-Supongo que funcionaria tambien,con un lineCast 2D cogiendo la posicion del bloque inicial y la posicion donde generaras el nuevo
 
No soy mucho de 2D tengo que decir,pero creo que alguno te funcionaria,si no dilo y buscamos otra manera.
 
para destruir el bloque en dos choques por debajo,pues le pones un script que cuente los OnCollisionEnter teniendo en cuenta la normal en el eje y

Me encanta que hayas puesto de referencia un juegazo como el Kid Chamaleon!
 
Otra cosa: Tratad de evitar "subir" videos a la Comunidad, si puedes encontrar el referente por Youtube,etc... Los vídeos ocupan una barbaridad de espacio (ese .mov de 10 megas sólo para 3 segundos??? exagerado!), y este servidor no dispone de mucho almacenamiento todavía. 
 
De lo contrario, nos tocaría aumentar el espacio alquilado y costará más, necesitando más cantidad de donaciones... 

Etiquetas: