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.
luego dentro de la función IsGround que vamos a crear necesitamos una variable temporal de tipo RaycastHit
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.
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.