Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: daniele_kiro en Septiembre 08, 2016, 12:20:33 AM

Título: Como puedo rebotar con precisión...
Publicado por: daniele_kiro en Septiembre 08, 2016, 12:20:33 AM
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!!
 
 
Título: Como puedo rebotar con precisión...
Publicado por: hammer en Septiembre 08, 2016, 01:12:52 AM
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
  • .normal, Color.red, 1.0f);
      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
Título: Como puedo rebotar con precisión...
Publicado por: daniele_kiro en Septiembre 08, 2016, 04:29:37 PM
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
  • .normal, Color.red, 1.0f);
      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">

 
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]
 
 
Título: Como puedo rebotar con precisión...
Publicado por: hammer en Septiembre 08, 2016, 06:48:24 PM
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
Título: Como puedo rebotar con precisión...
Publicado por: pioj en Septiembre 09, 2016, 12:56:39 PM
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...