Jump to content
UnitySpain
enelmenu

Ayuda - Physics.Raycast

Recommended Posts

Hola de nuevo (Perdon por hacer tantos post pero tengo muchas dudas, y no son cualquier inquietud, la verdad son dificiles tanto para mi siendo novato, como para encontrar respuestas concretas en la red)

En este caso me encuentro en un problema grave, y es que ahora mismo me esta costando mucho entender el sistema Booleano de Phisycs.Raycast

Lo que me pueden preguntar: Porque??, no es tan complicado enelmenu, no seas boludo cheee, da valor verdadero y falso!! 

e.e no me digas u.u, basicamente me cuesta porque no entiendo su logica, miren este mini script (si tiene errores avisen) que hice:

		public bool phyRay;
		public bool phyRayF;

	void Update () {
		Debug.DrawRay (transform.position, Vector3.down * 0.8f, Color.yellow);
		Debug.DrawRay (transform.position, Vector3.right * 0.8f, Color.red);

		RaycastHit hit;
		Ray ray = new Ray (transform.position, Vector3.down * 0.8f);
		Ray rayF = new Ray (transform.position, Vector3.right * 0.8f);

		phyRay = Physics.Raycast (ray, out hit, 0.8f);
		phyRayF = Physics.Raycast (rayF, out hit, 0.8f);
		
		if (phyRay = true) {
			Debug.Log ("opa");
		} else if (phyRayF = true) {
			Debug.Log ("aita");
		}
	} 

PhyRay = ¿No deberia  ser false mientras mi raycast down no toque nada abajo?

PhyRayF = ¿No deberia  ser false mientras mi raycast right no toque nada a su derecha?

Sin embargo mi cuando inicio el script (situando mi centro en una pocision que no toca ningun trigger collider en ningun lado) inicia como bugeado, inicia phyRay true y phyRayF false....

Alguien me puede explicar que pasa? que estoy haciendo mal, o como se hace?

Edited by enelmenu

Share this post


Link to post
Share on other sites
8 hours ago, enelmenu said:

miren este mini script (si tiene errores avisen)

Linea 15, fijate que estas igualando PhyRay a true!!  usa el operador logico "==".

 

8 hours ago, enelmenu said:

PhyRay = ¿No deberia  ser false mientras mi raycast down no toque nada abajo?

PhyRayF = ¿No deberia  ser false mientras mi raycast right no toque nada a su derecha?

PhyRay y PhyRayF, pueden ser lo que sea sin importar el otro ray, que lo va a determinar la figura geometrica con la que toca, si fuera que pones una esfera debajo, podria tocar el right con el down tranquilamente. Si fuera que usas un cubo tambien se podria dar, salvo que el cubo este alineado con los ejes. En definitiva lo determina la figura geometrica.

El Physics.Raycast devuelve true si algo toca (tene en cuenta la matriz de colisiones en opciones de fisicas, si esta todo en default no hay que preocuparse) y falso si no. Esa es la logica del cast.

El out hit lleva la informacion del cast a esa estructura para que puedas tener mas detalle de dicho cast, punto, normal, el collider, etc. En el codigo tuyo no tiene mucha utilidad porque en la linea que sigue lo estas reemplazando (con PhyRayF). Pero agregando otro "hit" ya estaría.

8 hours ago, enelmenu said:

Sin embargo mi cuando inicio el script (situando mi centro en una pocision que no toca ningun trigger collider en ningun lado) inicia como bugeado, inicia phyRay true y phyRayF false....

Alguien me puede explicar que pasa? que estoy haciendo mal, o como se hace?

De seguro es por el condicional de arriba, usalo asi (si no queres poner el ==):

if(PhyRay)
	Print("down");

if(PhyRayF)
	Print("right");

eso si para debugear te conviene poner "down" y "right", porque si lees "opa" "ipu" "papu" "isu" no vas a tener idea de que esta pasando :6_smile:

Saludos

Edited by lightbug

Share this post


Link to post
Share on other sites
Ahora, lightbug said:

Linea 15, fijate que estas igualando PhyRay a true!!  usa el operador logico "==".

El Physics.Raycast devuelve true si algo toca (tene en cuenta la matriz de colisiones en opciones de fisicas, si esta todo en default no hay que preocuparse) y falso si no. Esa es la logica del cast.

El out hit lleva la informacion del cast a esa estructura para que puedas tener mas detalle de dicho cast, punto, normal, el collider, etc. En el codigo tuyo no tiene mucha utilidad porque en la linea que sigue lo estas reemplazando (con PhyRayF). Pero agregando otro "hit" ya estaría.

De seguro es por el condicional de arriba, usalo asi (si no queres poner el ==)

Ufff tengo la cabeza a mil, debe ser por que estoy programando hace mas de 10 horas...

Efectivamente, era esa boludes, error totalmente mio, eso del out hit me sirvió mucho, gracias!

El funcionamiento es muy basico y simple tanto como el sistema booleano, no entendia la logica por que simplemente no era logico mi codigo....

"Al minimo error grandes consecuencias" Me hace falta mas cafe que logica para mi cerebro me parece jajajajaja.

Gracias light un abrazo!

Share this post


Link to post
Share on other sites

×
×
  • Create New...