Qué es un GameObject#
Un GameObject es la unidad básica de todo lo que existe en una escena de Unity: el jugador, un enemigo, una cámara, una luz, un botón. Pero por sí mismo no hace nada. Es una caja vacía que solo tiene un nombre y un Transform (posición, rotación y escala).
Lo que convierte esa caja en "un enemigo" o "una moneda" son los Componentes que le añades.
Un enemigo no es una clase gigante Enemigo. Es un GameObject al que le pegas: un SpriteRenderer (para verse) + un Rigidbody2D (para caer) + un Collider2D (para chocar) + tu script de IA. Vas componiendo el comportamiento pieza a pieza. Este enfoque se llama composición sobre herencia y es la forma de pensar de Unity.
Qué es un Componente#
Un Componente es una pieza de comportamiento o datos que se adjunta a un GameObject. Los ves en el Inspector cuando seleccionas un objeto: cada bloque es un componente.
- ¿Quieres que se vea? →
Sprite Renderer(2D) oMesh Renderer(3D) - ¿Quieres que le afecte la gravedad? →
Rigidbody - ¿Quieres que colisione? → un
Collider - ¿Quieres tu propia lógica? → tu script (que también es un componente, porque hereda de
MonoBehaviour)
Trabajar con componentes desde código#
using UnityEngine;
public class Ejemplo : MonoBehaviour
{
private Rigidbody rb;
void Awake()
{
// Obtener un componente que ya está en el objeto
rb = GetComponent<Rigidbody>();
// Comprobar si existe (más seguro)
if (TryGetComponent<Collider>(out var col))
Debug.Log("Tengo collider: " + col.name);
// Añadir uno nuevo en tiempo de ejecución
var luz = gameObject.AddComponent<Light>();
}
}GetComponent recorre los componentes del objeto para encontrar el que pides. Llámalo una vez en Awake y guarda el resultado en una variable. Hacerlo en Update cada fotograma es un error de rendimiento habitual.
Jerarquía: padres e hijos#
Los GameObjects se organizan en un árbol (la ventana Hierarchy). Un objeto hijo hereda la transformación de su padre: si mueves el padre, los hijos se mueven con él. Esto sirve para agrupar (una "mano" como hija de un "brazo") o para construir objetos complejos.
Errores frecuentes#
- Confundir GameObject (el objeto) con Component (lo que le da comportamiento).
- Buscar componentes con
GetComponentenUpdateen vez de cachearlos. - Olvidar que desactivar un GameObject (
SetActive(false)) desactiva todos sus componentes e hijos.
Resumen#
En Unity todo es un GameObject vacío al que das vida con Componentes. Piensa en "componer" objetos pegando piezas, no en crear clases enormes. El siguiente paso natural es entender cómo se ejecuta tu código: el ciclo de vida de MonoBehaviour.