Noticias

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

Raycast no detecta nada

Iniciado por mrpacogp, Mayo 21, 2015, 03:21:05 PM

Tema anterior - Siguiente tema
Buenas tardes, como siempre escribiendo a veces uno medita o ve un error repentino:

RaycastHit hitMan;
      if (Physics.Raycast (transform.position, -Vector3.up, out hitMan, 0.4f,9)) {
         print(hitMan.transform);
         Debug.DrawRay(transform.position, -Vector3.up, Color.red);
         if (hitMan.transform.gameObject.layer == LayerGround) {
            print ("toco madera");
            if (hitMan.distance <= 0.25) {
               
               jumping = false;
               
               
            }
         }
      }

Con este sencillo bloque de código lanzamos raycast e ignoramos el layer del player.
Porque no recibo información con el hit-transform ni con nada?
A veces va, y otras no.
 

Fíjate, en la construcción del RayCast esta mal implementado.
 
El método a seguir para que funcione bien es el siguiente.
 
crear una variable de tipo LayerMask.

public LayerMask Layers;

luego dentro de la función IsGround que vamos a crear necesitamos una variable temporal de tipo RaycastHit

 
void IsGround ()
{
//Creamos nuestra variable temporal que nos sirve para el OUT del metodo Physic.RayCast.
RaycastHit hit;
//Creamos el Rayo, esto nos sirve tambien para el debug entonces reducimos calculos.
Ray ray = new Ray(transform.position, -Vector3.up);
//Luego creamos una variable tipo flotante para la distancia.
float distance = 0.4f;
//Luego Construimos nuestro RayCast, los Parametros son, el Rayo, la salida del RaycastHit, la Distancia del mismo, y por ultimo los Layers.
if (Physics.Raycast(ray, out hit, distance,Layers))
{
   //Dibujar el Rayo.
   Debug.DrawRay(ray.origin, ray.direction * distance, Color.red);
   //Zona de comprobacion, esto puede ser de la siguiente manera, puedes hacerlo con tag o layer.
   string data = hit.transform.gameObject.layer;
   switch(data)
   {
      case "Madera": print("Collisiono con madera"); break;
      case "Metal": print("Collisiono con Metal"); break;
      case "Tierra": print("Collisiono con Tierra"); break;
   }
}
}

Tu problema fue que el Raycast esta chocando con el transform donde esta el script, entonces este no te funciona.
 
Lo hice todo a memoria, no se si me confundí con algún nombre o algo...
 
Suerte.

No, si lo del layer ya lo tenía declarado fuera pero no lo page en el código de muestra.
Ahora ya lo tengo funcionando perfecto gracias de todas formas.

Etiquetas: