Para analizar este tipo de entidad tenemos que tener clara la diferencia entre tipos de valor y tipos de referencia. Una clase es un tipo de referencia, donde si yo igualo una variable a una clase, en realidad lo que estoy haciendo es que esa variable apunte a la instancia de la clase. Sin embargo, un tipo de valor, es un elemento que se pasa por valor, es decir, a nivel de memoria se crea una nueva instancia de ese valor.


¿Para qué sirve entonces definir una clase que va a ser pasada por valor y no referencia? Una de las razones es si queremos tener algo inmutable, algo que sabemos que no debería poder ser cambiado fuera de su contexto. Las structs también son un poco más livianas que las clases a nivel de memoria y nos ahorran copiar datos uno por uno. El uso mas común de structs en los juegos es para definir datos «guardables». Es decir, un set de datos que van a guardarse en un archivo, ya sea posicionamiento, vida, stats, o simplemente progreso de algún tipo. Esto nos permite implementar un sistema donde cargamos los datos del archivo como una struct y directamente lo copiamos a la entidad del jugador.

Sé que es un poco confuso encontrar usos para Structs cuando tenemos clases, asi que guíense por estos criterios:
- Las structs nunca pueden ser null
- Son ideales para pasaje de datos sin preocuparse con que algo quede referenciado a lo que no debe
- Son muy útiles para manejar estructuras inmutables, como metadata de entidades
- Son muy útiles cuando hay que operar sobre ellos
Veamos algunos ejemplos de structs en Unity
Vector3 es el componente principal de posicionamiento en Unity, se trata de una estructura que contiene 3 coordenadas. Vector3 es una struct y gracias a eso se puede operar cómodamente en vectores. En este ejemplo tenemos una función que crea una casa dada a una distancia dada del personaje que lanza este script.

Color es un componente compuesto por los valores RGBA que representan un color. En este ejemplo, una función recibe como parámetro un Color y dentro del método se hacen operaciones al color, sin embargo, el valor de origen no cambia porque las operaciones solo afectan a la copia que existe en el contexto de ese método.
