No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a Unity: Scripting

Curso de Introducción a Unity: Scripting

Ruth Margarita García López

Ruth Margarita García López

Propiedades públicas y privadas, [SerializeField], [Header] y [HideInInspector]

5/24
Recursos

Aportes 4

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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
<h5>Por qué usarlas?</h5>
  • 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

<h5>- Sintaxis para declarar variables aplicadas al inspector:</h5>
		_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;
<h5>¿Y qué pasa si queremos almacenar más información referida a estos amigos (regalos recibidos, por ejemplo)?</h5>
X Crear 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:

        Using UnityEngine;
        
        [System.Serializable]
        Public class Amistad {
        	Public string nombre;
        	Public GameObject[] regalos;
      
    <h5>Luego implementamos nuestra clase Amistad en el script, como tipo de dato para un array.</h5>

    Quedaría así:

     	using UnityEngine;
     	using System.Collections;
     	using System.Collections.Generic;
     	
     	Public class ExploradorDeVariables : Monobehaviour {
     		Public Amistad[] 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…

# Clase #5 - **Propiedades públicas y privadas, \[SerializeField], \[Header] y \[HideInInspector]** ### **Variables Públicas** * **Declaración**: Usamos la palabra clave `public` seguida por el tipo de dato (`public int miVariable`). * **Ubicación**: Se declaran al principio de la clase, fuera de cualquier método. * **Inspector**: Son visibles y editables en el Inspector de Unity. * **Acceso**: Otros scripts pueden verlas y modificarlas. ### **Variables Privadas o Protegidas** * **Declaración**: Usamos la palabra clave `private` seguida por el tipo de dato (`private int miVariable`). * **Inspector**: No se muestran en el Inspector. * **Acceso**: No son accesibles desde otras clases. Por defecto, las variables sin modificador son privadas. ## **Atributos en Unity** * **Atributos**: Son como "decoraciones" que aplicamos a las variables para cambiar su comportamiento o visualización en el Inspector. 1. `[SerializeField]`: Hace que una variable privada sea visible en el Inspector. 2. `[HideInInspector]`: Oculta una variable en el Inspector, incluso si es pública. 3. `[Range(n, m)]`: Crea un deslizador (slider) en el Inspector para seleccionar un valor entre `n` y `m`. 4. `[TextArea]`: Crea un campo de texto para cadenas largas en el Inspector. 5. `[Header("título")]` **y** `[Space(px)]`: Permiten agregar títulos y espacios en el Inspector para organizar mejor las variables. 6. `[Tooltip("texto")]`: Muestra un mensaje al pasar el mouse sobre la variable en el Inspector. ## **Objetos Serializables** * **Objetos Serializables**: Son objetos que Unity puede guardar y mostrar en el Inspector. * **Uso**: Se usan para almacenar datos de manera estructurada y permitir que estos sean visibles y editables en el Inspector. * **Declaración**: Se usan con el atributo `[System.Serializable]` antes de la definición de la clase. Ejemplo:\[System.Serializable] public class MiClase { public int valor; public string nombre; } ```js [System.Serializable] public class MiClase { public int valor; public string nombre; } ```