Cómo acceder a VARIABLE de otro Script en Unity

Introducción – Tenemos un pequeño problema…

En este artículo voy a mostrar el proceso detallado para acceder a una variable definida en otro script en Unity.

El principal problema al que nos enfrentamos es el siguiente, ayer entró una persona a preguntar cómo leer el valor de defensa que tiene un enemigo desde el script del jugador, hace un rato, justo antes que tú, vinieron a preguntar cómo hacer que un script de control acceda a la cantidad total de monedas recolectadas para saber si se ha conseguido el objetivo. Y ahora tú estás aquí con tu propio proyecto distinto al de los demás, con tus propios scripts a los que les has dado unos nombres muy particulares.

Para resolver este problema voy a explicar la solución UTILIZANDO NOMBRES GENÉRICOS (como «ScriptA» y «ScriptB«), tendrás que entender el procedimiento para este ejemplo genérico en particular y luego tendrás que aplicar lo que has entendido a tu propio caso particular, es decir deberás determinar quiénes son los ScriptA y ScriptB en tu caso particular.

Si prefieres un vídeo paso a paso tengo uno buenísimo:

Se trata de un ejemplo guiado en el que si haces lo mismo que hago yo, conseguirás llamar a una FUNCIÓN que está definida en otro script y también ACCEDER A UNA VARIABLE que está en otro script en Unity, la idea es que entiendas el procedimiento y luego lo puedas adapatar para usarlo en tus propios scripts.


Procedimiento paso a paso para acceder a una variable de otro Script en Unity

Paso 1. Definir cuáles son los Scripts involucrados

Este es un paso muy importante para que podamos resolver el problema de los nombres, tus scripts tienen un nombre muy particular, distinto al de los scripts de las otras personas que han entrado aquí.

Por favor ten muy presente estos dos puntos:

  • En este ejemplo genérico vamos a usar dos scripts, sus nombres serán «ScriptA» y «ScriptB«.
  • La variable que queremos acceder se encuentra en ScriptB y la vamos a acceder a esta variable desde ScriptA.

Paso 2. Asegurar que la variable sea accesible desde un contexto externo

Debemos asegurarnos que la variable que queremos acceder (en ScriptB) esté declarada con visibilidad pública, de esa forma esta variable podrá ser accedida desde un contexto externo, por ejemplo desde el ScriptA.

Por ejemplo, si la variable que queremos acceder fuese de tipo int y su nombre fuese «variableEjemplo«, en ScriptB deberíamos definirla de la siguiente manera:

public int variableEjemplo;

SI LA VARIABLE NO TIENE VISIBILIDAD PÚBLICA NO PUEDE SER ACCEDIDA DESDE OTROS SCRIPTS

Paso 3. Definir un tipo de dato que nos permita acceder al script donde está la variable

Recordemos que desde ScriptA queremos acceder a ScriptB, por lo tanto dentro de ScriptA tenemos que definir una variable que sea del tipo ScriptB, esta variable nos permitirá acceder desde ScriptA a las variables y funciones públicas definidas en ScriptB.

Podemos definir esta variable de la siguiente manera:

public ScriptB variableTipoB;

Paso 4 (CRUCIAL). Inicializar la variable anterior para que apunte al componente que queremos acceder

No encuentro un adjetivo preciso para decirte lo IMPORTANTE que es esta parte, no solo para resolver este problema en particular de acceder a una variable de otro script, sino para CUALQUIER COSA QUE QUERAMOS HACER EN UNITY. Se trata de poder referenciar un objeto preciso desde un Script.

El punto es que la variable que definimos en el paso anterior, si no la inicializamos tiene valor null y si intentamos usarla en este estado tendremos en consola un error de Null Reference Exception.

Tenemos que asegurarnos de que la variable tenga en su interior alojado el componente apropiado al cual queremos hacer referencia, en este caso particular al componente tipo ScriptB.

Esto lo podemos hacer de muchas formas, una de las más simples es ir a la escena de Unity y en el inspector del ScriptA arrastrar al campo tipo ScriptB el GameObject que tiene asignado el ScriptB, de esa forma colocamos en la variable ese componente y lo podemos usar dentro del ScriptA.

Paso 5. Utilizar la variable tipo ScriptB para para acceder a la variable definida dentro de ese script

Una vez que completamos el paso anterior ahora tenemos una variable tipo ScriptB que contiene la referencia del componente tipo ScriptB que está asignado en un GameObject en la escena de Unity.

Para acceder a una variable definida dentro del otro script utilizamos esa variable tipo ScriptB y con el operador punto accedemos a la variable que nos interesa. De acuerdo al ejemplo dado en este paso a paso esto lo haríamos de la siguiente forma:

variableTipoB.variableEjemplo

La expresión anterior es la variable que está definida en el otro script, esta variable podemos usarla dentro del ScriptA o cambiarle su valor si así lo deseamos.

Salir de la versión móvil
Secured By miniOrange