Domina los gizmos en Unity para ver lo que el raycast no muestra a simple vista. Con un rayo visual podrás medir la distancia al suelo en tiempo real y afinar parámetros de diseño como masa, fuerza y gravedad. Además, aplicarás la segunda ley de Newton para lograr un salto coherente y sentir el control del gameplay.
¿Cómo activar y usar gizmos en Unity para medir distancia?
Con el botón Gizmos en la pestaña Game puedes ver ayudas visuales durante el play. Al activarlos, aparecen elementos como el collider en forma de cápsula alrededor del personaje. Lo útil: dibujar una línea vertical hacia abajo para comprobar el alcance del detector de suelo (por ejemplo, 1.5 metros) y verificar si el cálculo coincide con lo esperado.
Activa Gizmos en la pestaña Game durante el play.
Identifica el collider del personaje y su centro: transform.position.
Dibuja un rayo vertical hacia abajo que siga al personaje en todo momento.
Coloca el código al final de Update para localizarlo fácil y retirarlo antes de producción.
¿Qué diferencia hay entre draw ray y draw line?
Debug.DrawRay: dibuja un rayo desde un punto con una dirección y longitud.
Debug.DrawLine: dibuja una línea entre dos puntos específicos.
Para medir distancia al suelo desde el personaje, un rayo vertical suele ser suficiente.
¿Qué código necesitas para dibujar el rayo en el update?
Dentro de Update, usa la clase Debug para dibujar el rayo. Define origen, dirección, longitud y color. Recuerda: las clases en mayúscula (por ejemplo, Color) y las variables en minúscula. Todas las líneas terminan en punto y coma.
Origen: el centro del personaje con transform.position.
Dirección: hacia abajo con Vector2.down.
Longitud: 1.5f metros para el alcance del detector.
Color: Color.red para una referencia clara.
¿Cómo elegir el color del gizmo sin complicarte?
Usa colores por defecto: Color.red, Color.green, Color.blue, entre otros.
Si lo prefieres, define tu color con componentes red, green, blue, hue, saturation y value.
Opta por un color contrastado para verlo bien durante el play.
¿Cómo ajustar masa, fuerza y gravedad según la segunda ley de Newton?
Recordatorio esencial: fuerza es igual a masa por aceleración. Por tanto, aceleración = fuerza / masa. Si aumentas la masa, disminuye la aceleración que puedes dar con la misma fuerza; si reduces la masa, el salto se vuelve más intenso. Este equilibrio es clave para un salto natural.
Masa = 2: el personaje salta menos, le cuesta despegar.
Masa = 0.5: con la misma fuerza, el salto es mucho mayor.
Masa automática (automasa en el rigidbody): Unity calcula, por ejemplo, 2.42 kg; con esa masa, casi no se mueve con la fuerza anterior.
Solución práctica: si usas automasa, aumenta la fuerza de salto, por ejemplo, hasta 20 para recuperar un salto similar al original.
Extra útil: ajusta la gravedad y la fuerza de salto en relación a la masa para simular entornos como “espacio” o escenarios de baja gravedad.
Buenas prácticas de game design con física:
Ajusta primero la masa del rigidbody y verifica el comportamiento del salto.
Usa el rayo de gizmo para medir la distancia al suelo y validar el detector.
Equilibra fuerza, masa y gravedad hasta lograr fluidez y coherencia visual.
Mantén el código de gizmos en Update y bórralo antes de publicar.
¿Tienes una mejor combinación de masa y fuerza para tu personaje o un color de gizmo que te funcione mejor? Comparte tu configuración y resultados en los comentarios.
Apuntes
Dubug: modo de prueba, poder probar cosas
DrawRay: dibujar un rayo
this.transform.position: empezar desde el centro del personaje
Vector2.down: Hacia donde quiero el rayo, hacia abajo(down)
1.5f :para establecer el limite del rayo:
Color.red: color
Excelente, pero cabe destacar que la referencia this.transform.position se coloca de esta manera porque el script está dentro del objeto, pero si el script estuviera fuera del objeto al que se le quiera extraer el transform, pues usamos name.transform.position [El name es el nombre que le colocas para hacer la referencia.]
Discúlpenme pero me tomé la tarea de hallar la precision exacta, y lo hice con todo el Zoom que Unity me permitia, y pues con un valor de: 1.276363f logre la precision.
Magnífica precisión.
Los Gizmos son una herramienta de Unity que nos ayudarán a gestionar los parámetros de configuración del salto y cualquier otra acción de nuestro personaje de forma visual, son una especie de líneas que podemos ver si entramos al modo de debugging y en este caso las vamos a utilizar para calcular la distancia entre el centro del personaje y la tierra 🤓.
holano me sale la recta de color rojo
ahoraque raro
Encontre una forma mas dinámica de sacar la altura necesaria
primero debemos instanciar el Collider(en mi caso fue un capsule) de donde vamos a sacar las medidas.
luego sacamos la altura de el collider u o dividimos en 3, ya que la altura del collider toma toda su altura y solo necesitamos del centro para abajo, no lo dividimos en dos, ya que nos queríamos cortos
Muchas gracias por tu aporte! Justo eso estaba tratando de hacer, me sirvio mucho.
Platzi debería sacar un curso de física y matematica aplicada en videojuegos >:)
Con una longitud de RayCast en 1.315f me va bastante preciso 😄
Gracias muy amable
Aun no se diferenciar muy bien que tipos de código se colocan en Start o Update. Alguien me puede explicar por favor :3
Claro, en Start van las instrucciones que se ejecutarán una única vez cuando se inicie el juevo, en Update van las instrucciones que se ejecutarán constantemente cada frame por segundo (como detectar si presiono una tecla o no)
Bueno mi enfoque para tener presicion fue no agarrar el centro, sino la parte inferior, como tenemos el centro y la parte superior, solo calcule la diferencia en el eje y para la posicion y el codigo me quedo asi:
bool IsTouchingTheGround(){//Se obtiene la posicion del centro del personajeVector2 position = transform.position;// Se actualiza la posicion Y restandole la mitad de la altura del personaje position.y-=(transform.up.y- transform.position.y)/2;// Se indica una cantidad muy pequeña basicamente es un puntovar distance =0.001f;// Esto es para verlo en Unity//Debug.DrawRay(position, Vector2.down * distance, Color.red); // Devuelvo si el rayo encontro o no un colaider de la groundMaskreturnPhysics2D.Raycast(position,Vector2.down, distance, groundMask);}
si creamos una variable publica para la distancia del rayo podemos manipularlo desde el inspector.(solo recuerden que en modo juego no se guardan los cambios, asi que anoten el numero que mas les agrade y apliquenlo en modo edición.)
¿una consulta, donde podria aprender sobre las leyes de la fisica para programacion de videojuegos? no recuerdo absolutamente nada, help me.
No logro que se visualice el Gizmos ¿por qué puede suceder esto?
En el Game tienes que activar los Gizmos
Me sucede lo mismo, y los Gizmos están activados :/
Cada vez aprendo más en este curso que me será de utilidad en un futuro muy cercano.
En mi caso, me gusta tener los Gizmos visibles aun fuera del PlayMode, por ello uso:
/// <summary>/// Allows to draw Gizmos on Scene mode without hit Play/// Permite dibujar los gizmos en la escena sin presionar Play/// </summary>privatevoidOnDrawGizmos(){Debug.DrawRay(transform.position,Vector2.down* groundDistance,Color.yellow);//Gizmo draw to check ground distance}
No me sale en el Visual Studio la opción Debug.
Además no me reconoce el color
¿Qué debo hacer?
Alguien sabe por que mi personaje se ve detras del platform? Y como resolverlo?
Cada vez que le hago zoom a la escena, los GameObjects desaparecen sin razón alguna, ¿Alguien sabe como puedo solucionar este problema?
Una duda a mi en Visual nunca me aparece las opciones de autocompletar que le aparecen al profesor. Tengo que mover algo en algo de ajustes o descargar algo para que me aparezcan?
Acabo de darme cuenta que hay veces que mi personaje salta mucho y hay veces que salta menos, que puede ser?
Es porque al saltar se le añade una fuerza al personaje y si usas el ray cast para verificar lo cerca que está del suelo, puede ser que la distancia sea muy larga y por ende te de tiempo a presionar el botón de saltar varias veces lo que haría que se acumule el impulso y por ende tener un salto mayor
Hola,
No se si a alguien mas le pasa o le pasó, pero la mayoria de los gizmos no se ven en mi pantalla. Se ve el recuadro de la escena y la camara, pero no el collider ni el rayo que le armamos... Me fije en el desplegable de "Gizmos" y esta todo marcado...
Alguna idea de que puede ser?
Por si a alguien mas le llega a pasar esto..... tenia el draw dentro del if del jump... por eso no me lo mostraba...
Si compañero, lo que pasa es que no activaste los gizmos o tal vez si pero no desde la pestaña indicada, tienes que activarlos desde la pestaña de Game, entras a Game... Los activas y ya todo ready
Personalmente, prefiero utilizar la funcion OnDrawGizmos(){ }
te da mas opciones como, drawwiresphere, drawray, drawline, etc.
Y es mucho mejor si utilizas Physics2D, por ejemplo yo uso lo siguiente:
public bool IsGrounded(){returnPhysics2D.OverlapCircle(groundCheck.position,.25f, ground);}privatevoidOnDrawGizmos(){Gizmos.color=Color.cyan;Gizmos.DrawWireSphere(groundCheck.position,.25f);}