Aprende a crear un enemigo móvil en Unity 2D con C#. Configura un prefab con animación, añade un Capsule Collider como trigger, usa Rigidbody2D para la física y prepara un script limpio con variables esenciales. Con estas prácticas, tendrás un enemigo que patrulla de izquierda a derecha y listo para futuras colisiones y giros.
¿Cómo configurar el enemigo en Unity 2D?
Para empezar, crea un nuevo script de C# llamado Enemy y arrástralo al objeto enemigo. Asegúrate de que el prefab está bien configurado y aplica los cambios cuando edites una instancia. Así mantienes consistencia y evitas sorpresas al instanciar.
¿Qué collider trigger usar y cómo orientarlo?
Añade un Capsule Collider 2D en la cabeza del enemigo.
Actívalo como IsTrigger para que atraviese moneda o personaje.
Oriéntalo en horizontal: mejora el ajuste con la forma del enemigo.
¿Para qué sirve el Rigidbody2D y qué restringir?
Agrega un Rigidbody2D para poder mover con fuerzas o velocidad.
Mantén una ruta horizontal: congela la posición en el eje Y.
Ajusta gravedad y automasa según la necesidad del movimiento.
Escala si es necesario: por ejemplo, 0.6 para equilibrar dificultad y jugabilidad.
¿Cómo mantener orden con el prefab?
Resetea posición al probar cambios en la escena.
Pulsa Apply cuando edites un hijo del prefab para guardar.
Arrastra el script Enemy al objeto enemigo antes de programar.
¿Qué variables y patrones de código necesitas en el script Enemy?
Define solo lo esencial para mover y reiniciar el enemigo con claridad. Usa nombres expresivos y aprovecha el ciclo de vida de Unity para inicializar correctamente.
usingUnityEngine;publicclassEnemy:MonoBehaviour{// editable en el Inspector: velocidad de movimiento.publicfloat runningSpeed =1.5f;// referencia interna al Rigidbody2D.privateRigidbody2D rigidBody;// orientación: true mira a la derecha, false a la izquierda.publicbool facingRight =false;// posición de arranque para reinicios controlados.privateVector3 startPosition;privatevoidAwake(){ rigidBody =GetComponent<Rigidbody2D>(); startPosition =this.transform.position;}privatevoidStart(){this.transform.position = startPosition;}}
runningSpeed: velocidad del enemigo editable desde el Inspector para iterar rápido.
rigidBody: referencia a Rigidbody2D recuperada con GetComponent en Awake.
facingRight: estado de orientación, por defecto false porque el enemigo mira a la izquierda.
startPosition: guarda la posición inicial en Awake y la reaplica en Start para instancias limpias.
Este patrón separa inicialización del objeto y aparición en escena: Awake corre una vez cuando se cargan objetos, Start cuando el objeto se activa. Así evitas heredar posiciones de instancias previas del prefab.
¿Qué habilidades prácticas refuerzas al implementar el enemigo?
Más allá del código, la configuración correcta acelera el desarrollo y previene errores al escalar el proyecto.
Configuración de física 2D: uso de Rigidbody2D, gravedad y restricciones por eje.
Colisiones controladas: Capsule Collider como trigger para detectar sin bloquear.
Gestión de estado: variable booleana de orientación con valores claros.
Ciclo de vida de Unity: diferencias entre Awake y Start para inicializar y reinstanciar.
Reutilización con prefabs: aplicar cambios en instancias con Apply para mantener coherencia.
Balance de dificultad: escalado a 0.6 para ajustar el tamaño del enemigo a la jugabilidad.
Rutas horizontales: congelar eje Y para patrullas izquierda-derecha estables.
¿Te gustaría que el enemigo reaccione al chocar con paredes o cambie de dirección con triggers? Cuéntame qué comportamiento quieres lograr y resolvemos dudas paso a paso.
la posición se guardara la primera vez que inicie el juego gracias al método Awake y después de eso cada llamemos un objeto nuevo sera mediante el método start
Me pregunto por que no usará el Poligon collider? Se ajusta a la perfeccion a los objetos. Será que consume más rendimiento?
Puede ser para que se calculen menos poligonos a la hora de procesar los modelos. Aunque yo diría que es mejor un collider más friendly con el usuario, ya que en cursos de diseño explicaron que muchas veces el collider debe ser más chico que el enemigo en 2D para evitar frustraciones del jugador.
No tengo una respuesta exacta, pero en muy pocos casos se necestan colliders que sean exactamente acordes al modelo
Gracias por el aporte Eze! Me sirve! En una de las clases el profesor comentó que Lara Croft estaba hecha en sus inicios con 300 poligonos y en la epoca actual con 500.000. Supuse que era mejor tener un collider con más poligonos jeje
En mi nada amplia experiencia (solamente este curso y el de diseño de VJ con Unity) he visto que colocar un polygon collider es mas factible dado que es mas preciso (y tmbn se genera automaticamente sin necesidad de ir nodo por nodo), mi pregunta seria ¿Por qué deberíamos usar un capsule por encima de un polygon collider en este caso? Me encanta el curso!!!
Muchas veces el tema real es el rendimiento en si, si tomas el curso de 2D te darás cuenta el porque, es mas un tema de rendimiento que de precision básicamente.
Porque no usamos el SceneManager?, de esta forma nos ahorrariamos el hecho de tener que calcular la pocicion inicial del personajes, la puntuacion y las monedas