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.