Tutorial juego plataforma Unity: Crear un juego 2D paso a paso con C
¡Bienvenido a este tutorial detallado para crear un juego de plataforma 2D usando Unity y C#! Si eres desarrollador principiante o intermedio, aquí encontrarás una guía paso a paso para aprender desde la configuración inicial hasta la implementación de funcionalidades clave en un juego de plataformas. Te acompañaré para que avances con confianza y disfrutes el proceso de desarrollo.
Índice
- Configuración del proyecto en Unity
- Diseño del escenario y personajes
- Programación de movimientos básicos del jugador
- Detección de colisiones
- Implementación de enemigos y recolección de objetos
- Creación de niveles y gestión de la interfaz de usuario
- [Conclusión y buenas prácticas]
Configuración del proyecto en Unity
Paso 1: Instalar Unity y crear un proyecto 2D
- Descarga e instala Unity Hub desde la página oficial de Unity.
- Desde Unity Hub, instala la versión más reciente de Unity que soporte 2D y C#.
- Crea un nuevo proyecto, selecciona la plantilla “2D” y nómbralo, por ejemplo, “MiJuegoPlataforma”.
Paso 2: Configurar la escena base
Cuando abras el proyecto:
- Ve a la ventana Scene para trabajar en el diseño.
- En Hierarchy,, elimina el objeto
Main Camera
y crea una nueva cámara si quieres ajustar la vista. - Configura el modo de visualización 2D haciendo clic en el botón 2D en la escena.
Diseño del escenario y personajes
Paso 3: Crear el escenario
Para un juego de plataforma necesitaremos un suelo y plataformas sobre las que el jugador puede caminar.
- En la ventana Hierarchy, crea un nuevo objeto vacío y llámalo “Ground”.
- Añade un componente Sprite Renderer y asigna un sprite para usar como plataforma. Puedes usar un sprite cubo o un rectángulo simple.
- Añade un Box Collider 2D para detectar colisiones con el jugador.
Además, crea más objetos similares para conformar otras plataformas.
Paso 4: Crear el jugador
- Crea un nuevo objeto de tipo Sprite y asígnale un sprite de personaje (puede ser un simple cuadrado o un diseño libre).
- Añade un Rigidbody 2D para que Unity habilite la física y las fuerzas.
- Agrega un Box Collider 2D para detectar colisiones.
Programación de movimientos básicos del jugador
Paso 5: Crear script de movimiento
Vamos a programar el movimiento horizontal y salto del jugador.
- En la carpeta Scripts del proyecto, crea un nuevo script C# llamado
PlayerController.cs
. - Abre el script y escribe el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
using UnityEngine; public class PlayerController : MonoBehaviour { public float speed = 5f; public float jumpForce = 10f; private Rigidbody2D rb; private bool isGrounded = false; void Start() { rb = GetComponent<Rigidbody2D>(); } void Update() { Move(); Jump(); } void Move() { float moveInput = Input.GetAxis("Horizontal"); rb.velocity = new Vector2(moveInput * speed, rb.velocity.y); } void Jump() { if (Input.GetButtonDown("Jump") && isGrounded) { rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse); } } private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Ground")) { isGrounded = true; } } private void OnCollisionExit2D(Collision2D collision) { if (collision.gameObject.CompareTag("Ground")) { isGrounded = false; } } } |
Explicación paso a paso:
- Rigidbody2D se usa para aplicar física al jugador.
- El movimiento horizontal se controla con
Input.GetAxis("Horizontal")
, que responde a las teclas A/D o flechas. - El salto se activa con la tecla configurada para “Jump” (por defecto la barra espaciadora).
- Colisiones con el suelo establecen que el personaje puede saltar.
Paso 6: Aplicar el script al jugador
- Arrastra
PlayerController.cs
al objeto jugador en la escena. - Asegúrate que el suelo tiene la etiqueta “Ground” aplicada para que el script detecte correctamente.
Detección de colisiones
Paso 7: Ajustar colisiones para plataformas e ítems
- Cada plataforma y suelo debe tener un Collider2D.
- Para que el jugador detecte los objetos y no atraviese plataformas, asegúrate que el
Rigidbody2D
del jugador no tiene la opciónIs Kinematic
activada. - Puedes configurar capas y usar la matriz de colisiones en el menú Edit > Project Settings > Physics 2D para optimizar.
Implementación de enemigos y recolección de objetos
Paso 8: Crear un enemigo simple
- Añade un objeto sprite para el enemigo.
- Añade un Rigidbody2D y un Box Collider 2D (con
Is Trigger
desactivado). - Crea un script llamado
EnemyController.cs
para movimientos básicos o patrullaje:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using UnityEngine; public class EnemyController : MonoBehaviour { public float speed = 2f; public Transform pointA, pointB; private Vector3 target; void Start() { target = pointB.position; } void Update() { transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime); if (Vector3.Distance(transform.position, target) < 0.1f) { target = target == pointA.position ? pointB.position : pointA.position; } } } |
Paso 9: Detectar colisiones enemigo-jugador
Agrega al script del jugador este método:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Ground")) { isGrounded = true; } else if (collision.gameObject.CompareTag("Enemy")) { // Aquí puedes implementar la lógica de perder vida o reiniciar nivel Debug.Log("Jugador ha sido tocado por enemigo"); } } |
Paso 10: Crear ítems coleccionables
- Crea un objeto sprite para el ítem.
- Añade un Circle Collider 2D con
Is Trigger
activado. - Crea un script
Collectible.cs
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using UnityEngine; public class Collectible : MonoBehaviour { void OnTriggerEnter2D(Collider2D other) { if(other.CompareTag("Player")) { Debug.Log("Ítem recogido"); Destroy(gameObject); // Aquí puedes actualizar el puntaje o inventario } } } |
- Asigna la etiqueta “Player” a tu personaje para que la detección funcione correctamente.
Creación de niveles y gestión de la interfaz de usuario
Paso 11: Crear varios niveles
- Duplica la escena y modifica plataformas, enemigos y objetos para diferentes diseños.
- Usa el sistema de escenas de Unity para cargar niveles:
1 2 3 4 5 6 7 8 9 10 |
using UnityEngine.SceneManagement; public class LevelManager : MonoBehaviour { public void LoadLevel(string levelName) { SceneManager.LoadScene(levelName); } } |
- Puedes llamar al método
LoadLevel
para pasar al siguiente nivel al completar el actual.
Paso 12: Crear una interfaz de usuario (UI) básica
- Ve a GameObject > UI > Text para añadir texto.
- Crea un objeto para mostrar el puntaje o vidas.
- Crea un script
UIManager.cs
para actualizar la UI:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
using UnityEngine; using UnityEngine.UI; public class UIManager : MonoBehaviour { public Text scoreText; private int score = 0; public void AddScore(int amount) { score += amount; scoreText.text = "Puntaje: " + score; } } |
- Modifica el script de
Collectible
para llamar aAddScore
cuando se recoja un item.
Conclusión y buenas prácticas
¡Felicidades! Has creado tu propio juego de plataforma 2D en Unity usando C#. Este tutorial cubrió desde cómo configurar tu proyecto, diseñar los escenarios y personajes, hasta programar movimientos, detectar colisiones, añadir enemigos y coleccionables, y gestionar niveles e interfaces.
Buenas prácticas para seguir avanzando:
- Divide tu código en scripts pequeños y enfocados.
- Usa prefabs para reutilizar objetos y facilitar cambios.
- Aprende a usar el sistema de animaciones de Unity para dar vida a personajes.
- Experimenta con físicas y detecta errores con la consola.
- Lleva control de versiones con herramientas como Git.
Te invito a seguir practicando, creando niveles más complejos y enriqueciendo la jugabilidad. ¡Comparte tu proyecto y sigue aprendiendo programación juegos Unity!
¿Quieres profundizar más? Explora la documentación oficial de Unity y participa en foros y comunidades para resolver dudas y compartir experiencias.
¡Manos a la obra y a crear juegos increibles!