¿Por qué la programación no lo es todo en el desarrollo de videojuegos?
Programar es sin duda una parte crucial en el desarrollo de videojuegos, pero no es el único componente esencial. Muchos aspectos del desarrollo requieren configuración, algo que depende de las variables públicas y privadas que estructuramos en nuestro código. Además, los atributos ofrecen una manera intuitiva de manipular y adaptar nuestros juegos. Aprender a manejar estas herramientas no sólo enriquece el juego, sino también mejora la experiencia del usuario.
¿Qué son las variables públicas y privadas?
Las variables públicas son aquellas que declaramos al principio de una clase, fuera de cualquier método. Este tipo de variables son visibles en el inspector, lo que permite que otros componentes puedan verlas e incluso modificarlas. Imagina el fantasmita de Mario Bros: necesita saber hacia dónde mira Mario para cambiar su comportamiento. Ahí entran en juego las variables públicas.
Por otro lado, las variables privadas o protegidas no se muestran en el inspector y no pueden ser modificadas por otras clases. Sin embargo, esto no siempre es absoluto, ya que existen atributos que pueden modificar este comportamiento.
Los atributos son como pequeñas decoraciones que podemos agregar encima de las variables para cambiar su comportamiento. Algunos de los atributos más comunes incluyen:
SerializeField: Hace que una variable privada se muestre en el inspector.
HideInInspector: Esconde una variable pública del editor.
Range: Crea un slider en el inspector, útil para limitaciones como entre 0 y 1.
TextArea: Convierte un campo de tipo string en un área más grande para escribir código o texto largo.
Header y Space: Permiten organizar mejor el código con títulos y espacios.
ToolTip: Proporciona mensajes cuando el mouse se coloca sobre la variable, como recomendaciones o advertencias.
Estos atributos ayudan a los desarrolladores a tener un control más preciso y estético sobre el comportamiento y presentación de sus variables en el editor de Unity.
¿Cómo usamos arrays y clases serializables?
Las propiedades serializables facilitan la gestión de colecciones de datos más complejas. Por ejemplo, un personaje en un juego puede tener múltiples amigos. En lugar de declarar variables individuales para cada amigo, podemos usar arrays. Sin embargo, para relaciones más complejas usamos clases serializables.
Al hacer una clase serializable, Unity puede manejar estos objetos personalizados de forma similar a cómo maneja los tipos primitivos, facilitando la visualización y modificación de datos en el inspector.
¿Qué ventajas ofrece la correcta configuración de las variables y atributos?
Implementar y configurar variables y atributos de manera efectiva permite:
Optimización: Acceso y modificación directa desde el inspector sin recompilar.
Organización: Mejora la claridad del código y el editor con diferencias visuales (headers, spaces).
Control preciso: Restringir o permitir la visibilidad de propiedades según sea necesario.
Eficiencia del equipo: Facilita el trabajo conjunto y evita errores mediante atributos inteligentes y recomendaciones con ToolTips.
Profundizar en estas prácticas no solo eleva la calidad de los proyectos, sino también incrementa la eficiencia del equipo, propiciando un entorno de trabajo más ordenado y productivo. ¡Continúa explorando estas herramientas para llevar tus habilidades de desarrollo al siguiente nivel!
Propiedades públicas y privadas, [SerializeField], [Header] y [HideInInspector]
Al crear un juego, la mayor parte del tiempo vamos a estar configurando cosas, en lo que destacaran el uso de las variables públicas y privadas y los atributos.
Variable públicas
-Van al principio de la clase
Son un poco claustrofóbicas..
-No van a entrar a ningún método,(pero siguen dentro de la clase).-Se ven en el Inspector
Por qué usarlas?
Son importantes en la interacción con otros Objs. ya que otros scripts/componentes las pueden ver y modificar.
Variables privadas y protegidas
-No pueden ser vistas(ni modificadas) por otras clases.-No se ven en el Inspector, a menos que estén decoradas por
Atributos
"suerte de cartelito que escribimos arriba de una variable, aplicándole distintos efectos"
- [SerializeField]
○ La variable se muestra en el Inspector, aún si es privada.
- [HideInInspector]
○ La variable no se muestra en el Inspector.
- [Range(n,m)]
○ El editor nos aplica un slider, desde un valor inicial a un valor final, para modificar la variable.
- [TextArea]
-Ampliación de un cuadro de texto("string") para escribir código o líneas de texto largas.
- [Header("title")] & [Space (px)]
-Aplicación de títulos y espacios en el código para maximizar legibilidad en editor.
- [Tooltip("text")]
-Nos permite dejar un texto(tip) que brotará en un cuadro al dejar el cursor sobre la variable decorada.
A escribirrr
- Sintaxis para declarar variables aplicadas al inspector:
_modificadorDeAcceso + tipoDeDato + nombre;_
O sea:
public bool Checkbox
Nota: sin un modif. de acceso, la variable no aparecerá en el inspector.
Uso de arrays
Si quiero declarar una variable a la que pueda ir añadiendo o quitando valores de forma dinámica y ordenada; por ejemplo para llevar el control de los amigos que gana y pierde un personaje
Me puedo valer de un array, cuya sintaxis en Unity (C#) requiere especificar *esto es un array y este es el tipo de dato que almacenaremos dentro, lo cual se expresa como:
public string [] amigo;
¿Y qué pasa si queremos almacenar más información referida a estos amigos (regalos recibidos, por ejemplo)?
XCrear otro array simplemente no es una buena solución, ya que no estarán conectados entre sí.
Para esto se recomienda
Englobar las propiedades en una Clase nueva
agregando la directiva de UnityEngine para poder usar el objeto GameObject en nuestras variables
Decorando la clase con [System.Serializable] para que Unity pueda mostrarla en la consola a pesar de no ser un tipo de dato primitivo
En código:
Luego implementamos nuestra clase Amistad en el script, como tipo de dato para un array.
Quedaría así:
using UnityEngine; using System.Collections; using System.Collections.Generic;PublicclassExploradorDeVariables:Monobehaviour{PublicAmistad[] amistades;
Ahora, desde el Inspector podemos agregar amigos y darles "regalos" en forma de GameObjects, (con la posibilidad de arrastrarlos desde la Hierarchy).
OPAAA, los objetos serializables son lo que estaba buscando, trato de hacer un juego de rol con unos amigos, y creo que eso nos puede ser muy util, gracias profe ruth
La última parte se vio complicada, más cuando quise hacer el experimento creando un nuevo script y me salió una cantidad de errores de compilación XD... Un poco se parece a la declaración de variables como objetos de lo que vi en Javascript, pero eso debo revisar mejor...