Métodos Awake y Start en Unity para Configuración Inicial
Resumen
Domina el salto en Unity 2D con C# desde el primer script: diferencias entre Awake y Start, detección de input en Update y aplicación de AddForce al Rigidbody2D con impulso. Con buenas prácticas como delegar en métodos y configurar dependencias al iniciar, evitarás errores típicos como el salto repetido al mantener pulsada la tecla.
¿Qué diferencia a awake de start en Unity?
Al dar Play, ambos se ejecutan, pero en orden distinto. Awake ocurre en el frame 0, antes de renderizar nada, y Start en el frame 1, cuando todo está preparado. Para configurar dependencias privadas, usar Awake es más coherente con el “despertar” del objeto: al iniciar, ya sabe quién es su Rigidbody2D o su Collider.
¿Cómo referenciar rigidbody2d con getcomponent?
Usa una variable privada para guardar la referencia.
Llama a GetComponent<Rigidbody2D>() en Awake.
Finaliza cada línea con punto y coma. No lo olvides.
usingUnityEngine;publicclassPlayer:MonoBehaviour{privateRigidbody2D rigidBody;privatefloat jumpForce =6f;// fuerza de saltovoidAwake(){ rigidBody =GetComponent<Rigidbody2D>();}}
¿Por qué usar awake para configurar dependencias?
Se ejecuta antes que Start.
Evita un frame de desfase en referencias.
Mantiene el objeto listo desde el inicio.
¿Cómo detectar input en update sin errores?
Update se ejecuta hasta 60 veces por segundo si el juego corre a 60 fps. Ahí puedes consultar entradas: teclado con Input.GetKey y ratón con Input.GetMouseButtonDown. Para atender ambas, combina condiciones con el operador lógico OR.
¿Qué teclas y botones admite keycode y mousebutton?
Teclas alfanuméricas: KeyCode.A, KeyCode.B, etc.
Modificadores y especiales: Alt, F1–F12, Tab, Home, AltGr.
Ratón: botón 0 (izquierdo), 1 (derecho), 2 (rueda si es clicable).
Variantes del ratón: GetMouseButton, GetMouseButtonUp, GetMouseButtonDown.
Para “o”: usa dos barras verticales ||. En teclado español: Alt + 1 dos veces.
¿Por qué aparece el bug al mantener la tecla?
Con Input.GetKey(KeyCode.Space) en Update, la condición es verdadera tantos frames como mantengas pulsado.
Resultado: se aplica fuerza repetidamente y el personaje sube sin parar.
Es un bug típico al programar entradas cuadro a cuadro.
¿Cómo programar el salto con rigidbody2d y addforce?
La física ya está resuelta por el motor. Solo necesitas aplicar una fuerza hacia arriba al Rigidbody2D. Usa la dirección Vector2.up y la magnitud definida por tu fuerza de salto. Para un salto, el modo correcto es un impulso en un instante.
GetComponent : busca otro componente del mismo GameObject
componentes : Collider, Rigidbody, etc
Gracias, excelente aporte, me sirvio bastante.
de gran ayuda, gracias!
Existen dos tipos de fuerza que se pasan a RigidBody2D.AddForce, ForceMode2D.Force y ForceMode2D.Impulse.
Force: es una fuerza constante (empujar un objeto).
Impulse: Es aplicar la fuerza esa fuerza en un instante (Lanzar una pelota, brincar).
Logica de salto:
Conceptos segun el contexto:
rigidBody: es l que controla la fisica del personaje
Vector2: Lo usamos por que como estamos en 2d
necesitamos dos vectores
Le decimos a el rigidBody que vengan y que con el AddForce agregue fuerza entonces le decimos donde tiene que aguegar la fuerza por lo que ponemos vecctor2 y up (Up significa hacia arriba en español) y lo multiprimcamos por Jump force para que el personaje salte, e inpulsamos la fuerza con impulso
No me aparece el autocompletar en VS, alguien sabe como puedo activarlo?
ctrl + space
¡Hola! Si a alguien le pasa su editor de código visual studio 202X no le autocompleta, debe:
— ir al inicio de Windows > visual studio installer > modificar y luego descargar el paquete de “Desarrollo de Juego con Unity”.
— Luego de esto debe ingresar a Unity > Preferences > External Tools > External Script Editor y seleccionar de la lista “Microsoft Visual Studio 202X” > dar clic en “Regenerate project files” > cerrar esa ventana.
— Después van a ir a su archivo de script en unity y le darán doble clic, esto abrirá el Visual Studio 202X, esperan que cargue, van a buscar en el explorar de soluciones del VS su archivo de script, lo abren y en la parte superior darán clic a “▶ Asociar a Unity”
Saludos.
si me sirvio, gracias.
Recordar que las 2 "pleca" (||) van dentro de un mismo paréntesis
(++Input.GetKeyDown(KeyCode.Space)++ || ++Input.GetMouseButtonDown(0)++)
Tuve el error de haber cerrado paréntesis y al revisarlo pude arreglarlo :D
Hay pequeñas pepitas de oro aquí y allá, que enriquecen este curso. :)
Un consejo, utilizar la siguiente función para cuando el juego no funciona como se desea
debug.log("Mensaje");
Con esta función puedes imprimir un mensaje en la consola, en mi caso yo la coloqué dentro del if
Y noté que cuando das un click con el mouse se imprime el mensaje 1 vez, mientras que si lo haces con la barra espaciadora te imprime el mensaje como 5 veces
A mí me ha funcionado para encontrar muchos tipos de bugs como este c:
Consejo de un inexperto: tengan bien presente que el script esté asociado al personaje (arrastren el script al inspector del personaje)
no me sale la opcion de keycode
por que la fuerza es mayor con la tecla espacio que con el boton del mouse sin cambiar otro parametro?
no deberian ser iguales??
Es que el teacher dejo el espacio pegado por eso el impulso pero si dejas el botón del mouse pegado seria el mismo efecto
La razón es que utilizo Input.GetKey y no Input.GetKeyDown, como si lo hizo con Input.GetMouseButtonDown
Como seria para el mobile? como seria el getkey? o como se manejaria en ese caso?
Te comparto la documentación de Unity donde habla del mobile input :)
apenas empezaré a adentrarme en todo lo relacionado a la programación, mi sueño es desarrollar videojuegos, pero me gustaría saber si este es el curso correcto para comenzar a programar o me recomiendan algún otro, cómo dije, apenas comenzaré a aprender (:
Hola, veo que nadie ha respondido a tu duda, en mi humilde opinión creo que debes de hacer paso por paso la escuela de videojuegos, la cual tiene todo lo que puedes necesitar.
Como se a cuantos frame por segundo va corriendo mi juego?
En la pestaña Game, encontraras un botón Stats. Haz clic en él y veras los FPS a los que esta corriendo el juego.
Al momento de meter el código que va explicando el profesor me aparece este error al momento de meter este script al jugador
error CS0246: The type or namespace name 'Ridgibody2D' could not be found (are you missing a using directive or an assembly reference?
¿alguna sugerencia? por favor
le pusiste al player el componente Rigidbody2d ?
Ridgibody2D esta mal escrito, te recomiendo que cheques la guia que hice la clase pasada para poder activar el intelisense en VS.
Wow, más fácil de lo que pensaba!
Excelente el curso, todo te lo explican detallado.