En esta ocasión les traigo un asset para Unity que consiste en un Script de rotación y traslación que al asignarlo a cualquier GameObject de la escena hará que este objeto gire y se mueva automáticamente de acuerdo a los parámetros ingresados en el inspector.
Descargar el paquete de Unity – Script de rotación y traslación de objeto
🟢 VÍDEO: Configurar script de animación de rotación y traslación de un objeto en Unity
Cómo usar el Script de animación de rotación y traslación
1. Descargar e importar el Script de animación de rotación y traslación.
2. Seleccionar el GameObject al que se le quiere aplicar la animación.
3. Asignarle el Script descargado al GameObject, arrastrándolo al inspector o con el botón Add Component.
4. Ajustar los parámetros para lograr el efecto deseado, estos incluyen el eje de rotación, la velocidad de giro, la amplitud del movimiento vertical y la frecuencia del mismo.
He creado una nueva Textura PBR Seamless para Unity y Unreal Engine 4, en este caso se trata de una textura de suelo color oscuro.
Dentro del paquete de descarga encontrarás 3 mapas de resolución 256×256 correspondientes al Albedo, Metallic y Normal.
Descargar Textura Seamless de Madera para Unreal Engine
Dentro del paquete de descarga encontrarás 3 mapas de resolución 256×256 correspondientes a Base Color, Normal y Occlusion Roughness Metallic.
Introducción
En este artículo vamos a ver cómo hacer un contador en Unity que se incremente o decremente progresivamente, es decir que no muestre directamente el valor sino que vaya aumentando o disminuyendo hasta llegar a dicho valor.
Esta solución funciona de la siguiente manera, el valor que debe mostrar el contador se encuentra definido en un Script que tiene una función pública que permite leer dicho valor. Luego tenemos un Script que estará asignado al componente texto que muestra el valor en pantalla y que leerá el valor que debe mostrar e irá aproximándose a dicho valor de manera progresiva.
Funcionamiento del contador de cambio gradual en Unity
Esto lo tendrás que analizar y entender para poder adaptarla a tu propio proyecto, en el siguiente video hay una explicación detallada del funcionamiento.
Al importarlo les preguntará si quieren importar TextMesh PRO, ya que el contador puede usarse tanto para texto normal como para texto tipo Text Mesh PRO.
Cómo funciona el Contador
El texto que se va incrementando o decrementando de manera progresiva funciona con un Script llamado Counter, ese Script se asigna al GameObject que tiene asignado un componente Text o TextMeshPro (chequear la casilla en el inspector si se usa este último).
El valor que queremos mostrar estará definido en algún otro Script, en la descarga se provee un ejemplo, un Script llamado ScoreControl, pero deberías usar tu propio Script en el que tienes el valor a mostrar y adaptar ese Script para que pueda ser leído por el contador.
Cómo adaptar la solución a tu proyecto
En el Script donde tienes el valor que quieres mostrar debes implementar la interfaz de programación ICounterValueContainer que viene dentro del paquete, esto en la declaración de la clase, colocando «, ICounterValueContainer» a la derecha de MonoBehaviour, ver cómo está hecho en el Script ScoreControl.
Implementar esa interfaz te obliga a definir un método llamado GetValue() que devuelva un valor entero, así que en tu Script defines un método público que devuelva un entero llamado GetValue() y haces que retorne el valor que quieres mostrar en pantalla. Ver cómo está hecho en el Script Score.
El Script Counter lo asignas al objeto del Canvas que tiene el componente Text o TextMeshPro (recuerda marcar la casilla «useTextMeshPro si ese es el caso») que indicará el valor. Luego, en el inspector, debes asignar el GameObject que contiene el Script con el valor que quieres mostrar, en el ejemplo se asigna el objeto «Control» porque es el que contiene el Script ScoreControl (que implementa la interfaz ICounterValueContainer).
En el inspector del Script Counter también puedes modificar el valor «increment» que definirá qué tan rápido avanza o retrocede el contador hasta llegar al valor objetivo.
Introducción
En este artículo vamos a analizar la ejecución de un programa simple en Unity para entender cuáles son las diferencias entre Update y FixedUpdate en Unity.
Para ver estas diferencias monté una escena simple de Unity con dos cubos y algunos scripts de programación, te puedes descargar el paquete de Unity en este artículo.
Paquete de Unity para Descargar
A continuación puedes descargar un paquete de Unity que puedes importar en tu proyecto en Unity y ver cómo se comportan dos objetos a los que se les aplica una traslación en el método Update en un caso y en el método FixedUpdate en el otro.
En el siguiente vídeo explico cómo funciona un prototipo en Unity que permite estudiar las diferencias entre Update y FixedUpdate
Para empezar, los métodos Update y FixedUpdate son funciones que pertenecen a la clase MonoBehaviour y que se ejecutarán de manera automática y cíclica cuando colocamos esos Scripts en la jerarquía.
Resumen de las diferencias entre Update y FixedUpdate en Unity
1. La cantidad de ejecuciones por segundo de Update es variable, mientras que la cantidad de ejecuciones por segundo de FixedUpdate es fija.
2. En general no se tiene control sobre las ejecuciones de Update, dependerán del rendimiento de cada ordendor. Para FixedUpdate podemos modificar el Time Step en Project Settings > Time, por defecto es 0.02 segundos (20 milisegundos).
3. Ambas funciones se utilizan para hacer cambios en el tiempo, de lo anterior se concluye que Update se utiliza para la parte lógica y FixedUpdate para la parte física, movimientos y animaciones, es decir acciones que deben cambiar de manera regular en el tiempo.
Cómo ver las diferencias entre Update y FixedUpdate usando el paquete para descargar
Al importar el paquete van a tener una carpeta que contiene todos los archivos necesarios, lo que deben hacer es abrir la escena que está dentro de la carpeta, llamada «UpdateFixedUpdate».
Dentro de la escena tenemos un contador de frames por segundo para saber la tasa de refresco del juego en todo momento.
Tenemos dos Cubos llamados Update y FixedUpdate, ambos tienen asignado un script llamado «UpdateFixedUpdate» en el que se define una velocidad para el movimiento de los cubos y una variable lógica que va a determinar si el movimiento del cubo se hace en la función Update o en la función FixedUpdate.
Luego hay otro GameObject llamado Saturation que tiene asignado un Script llamado «CreateObjectsForever», cuando este Script se active comenzará a instanciar cubos como hijos del Script Saturation de manera ininterrumpida, lo que ocasionará poco a poco ocasionará una sobrecarga de procesamiento y con un poco de análisis nos permitirá entender las diferencias entre Update y FixedUpdate en Unity.
Procedimiento para el Análisis
Primera Prueba sin Sobrecarga
Inicialmente nos aseguramos que el GameObject Saturation esté deshabilitado o su Script «CreateObjectsForever» esté deshabilitado, para que inicialmente no se produzca la saturación del juego.
Nos aseguramos que ambos objetos tengan la misma velocidad en su Script UpdateFixedUpdate y que en el objeto Update la casilla «Use Fixed Update» esté desmarcada, mientras que en el objeto FixedUpdate, esa casilla esté marcada.
Entramos en el modo juego y observamos cómo se comportan los cubos. En mi caso se observa que el cubo que se mueve utilizando el método Update lo hace de manera más rápida que el cubo que se mueve en el método FixedUpdate. El cubo que se mueve con Update lo hace a más del doble de velocidad y a veces se mueve más rápido y otras más lento, mientras que el otro cubo se mueve de manera regular en el tiempo.
Segunda Prueba con Sobrecarga
Ahora activamos el objeto Saturation (o su script), para activar la instanciación de los objetos.
Al entrar en el Modo Juego se observa que los FPS del juego comienzan a descender gradualmente. Este cambio puede ser aún más drástico si seleccionamos el objeto Saturation en la jerarquía y si lo estamos viendo de cerca en la pestaña Editor. Pero lo más importante que notamos es que la velocidad del cubo que se mueve con Update comienza a disminuir, mientras más es la sobrecarga, más lento se mueve el cubo, hasta que en un momento es superado por el cubo que se mueve con FixedUpdate.
Esto nos indica que a mayor saturación de procesamiento, la función Update se ejecuta menos veces por segundo, mientras que la función FixedUpdate se ejecuta de manera regular en el tiempo y, pese a que el juego comience a tener lag, los movimientos serán proporcionales.
Introducción
En este artículo vemos cómo reproducir música y efectos de sonido en Unity, haciendo que se reproduzcan de manera automática al iniciar el modo juego, pero también vamos a ver cómo crear un script de control para reproducir la música o el sonido en Unity a través de código.
Para reproducir clips de audio en Unity se utiliza un componente llamado AudioSource, que significa fuente de audio, este componente nos permite configurar distintos parámetros como por ejemplo el volumen, hacer que se reproduzca en bucle, entre otros.
El componente AudioSource por si solo no es suficiente para escuchar los audios en Unity, también es necesario que haya en la escena un componente de tipo AudioListener, este componente normalmente viene asignado a la cámara por defecto al crear una nueva escena, el AudioListener actua como los «oídos» que oyen el sonido que reproducen los AudioSources. Hay que asegurarse de que solo haya un único componente AudioListener en la escena, especialmente si estamos usando efectos de sonidos en 3D, es decir que tenemos en cuenta la posición desde donde se está originando el sonido, por ejemplo si un sonido se produce a la derecha de la perspectiva del jugador, que el sonido se escuche con mayor volumen en los altavoces de la derecha.
En el siguiente vídeo vemos cómo reproducir música o sonidos en Unity de manera automática al iniciar la partida y también cómo reproducir la música y detenerla a través de script
Procedimiento resumido para reproducir un sonido en Unity al iniciar el juego
1. Crear un GameObject y en el inspector asignarle el componente AudioSource (Botón Add Component).
2. Configurar el componente AudioSource con la opción «Play On Awake» activada y el resto de los parámetros a gusto (más adelante vemos las distintas opciones).
3. Al entrar en el modo juego, el sonido comenzará a reproducirse de manera automática con los parámetros configurados.
Procedimiento resumido para reproducir un sonido en Unity desde un Script
1. Crear un GameObject y en el inspector asignarle el componente AudioSource (Botón Add Component). Desactivar la opción «Play on Awake» y configurar los demás parámetros a gusto.
2. Crear un Script para controlar el inicio del sonido, el volumen, el final, entre otras acciones. Asignar este Script al mismo GameObject que tiene el componente AudioSource.
3. En el script definir una referencia para el objeto AudioSource y encontrarla en el método Start usando GetComponent<>().
4. Definir una función pública para reproducir el sonido desde cualquier otro Script, dentro de esta función ejecutar la instrucción: «audioSource.Play()».
5. Detectar el evento en el cual el sonido debe reproducirse y en ejecutar la función Reproducir definida en el script del audio.
Configuración del componente AudioSource
El componente AudioSource tiene muchos parámetros ajustables para conseguir distintos resultados con nuestros sonidos. En la siguiente imagen vemos qué aspecto tiene el componente AudioSource en el inspector en Unity.
Fig. 1: Componente AudioSource genérico en Unity.
Para empezar podemos asignar manualmente el sonido que queremos reproducir arrastrándolo al campo AudioClip. Esto también lo podemos hacer desde un script con la instrucción «audioSource.clip=unClip;», siendo «audioSource» la referencia del componente AudioSource del inspector y «unClip» es un campo que contiene la referencia de algún sonido.
Luego podemos mutear el sonido y ajustarle el volumen. Habilitar la opción «Play On Awake» para que el sonido se reproduzca ni bien el GameObject entre en estado habilitado. La opción Loop hace que el sonido se vuelva a reproducir cuando termina.
El Spatial Blend es un parámetro que nos permite ajustar si se trata de un sonido de fondo o un sonido que depende de la distancia que hay entre el AudioSource y el AudioListener, si ponemos el indicador en 3D, obtendremos un sonido stereo cuyo volumen y distribución en los audífonos dependerá de la posición en la que está la fuente. Dentro de 3D Sound Settings podemos ajustar parámetros relacionados a esto.
Introducción
En este artículo vamos a ver cómo determinar si un número entero es par o impar utilizando un algoritmo de programación. El algoritmo en cuestión lo implementaremos en lenguaje C# para Unity y para hacerlo necesitamos que los números cumplan alguna condición lógica o matemática que nos permita clasificarlos.
En el siguiente vídeo explico detalladamente un algoritmo para diferencias números pares e impares en lenguaje C# para Unity:
En este vídeo explico una estrategia para determinar si un número es par o impar y luego implementamos el algoritmo en lenguaje C# en Unity.
Estrategia para determinar si un número es PAR o IMPAR
Sabemos que los números pares son los que terminan en 0, 2, 4, 6 u 8 y que los números impares son los que terminan en 1, 3, 5, 7 y 9. Por ejemplo podemos saber rápidamente que 39 es un número impar y que 44 es un número par.
Podríamos aplicar lo anterior para clasificar los números pero sería un poco engorroso ya que habría que convertir el número a cadena de caracteres, elegir el último caracter y luego realizar una serie de comprobaciones para ver si ese último número es por ejemplo un 0, 2, 4, 6 u 8; si alguno coincide el número es par y sino el número es impar. Es posible hacerlo así, pero existe una alternativa más simple a nivel de código para saber si un número entero es par o impar y es aplicando un criterio de divisibilidad.
Un número par es un número que es divisible por 2, es decir es un múltiplo de 2, osea que lo podemos expresar como el número 2 multiplicado por otro número y esa expresión resulta equivalente. Por ejemplo el número 26 sabemos que es par porque lo podemos expresar como 2 * 13, ya que 2 * 13 = 26.
Un número impar es un número que no es divisible por 2, es decir no es múltiplo de 2, en este caso no podemos expresarlo como el número 2 multiplicado por otro número.
El hecho de que un número par sea divisible por 2, quiere decir que al dividir el número por 2 el resto de la división es 0, en cambio, la división entre un número impar y 2 siempre tendrá resto 1. Podemos usar este hecho para programar un algoritmo que compruebe si un número es par o impar.
Para probar el código para verificar si un número entero es par o impar vamos a crear un Script con cualquier nombre, en mi caso usé «EvenOrOdd», luego creamos un empty GameObject en la jerarquía (figura 1) y le asignamos ese Script en el inspector (figura 2), de esa forma al entrar en el modo juego el Script se va a ejecutar y podremos probar el código.
Fig. 1: Crear un Empty GameObject en la jerarquía en Unity.
Fig. 2: Asignar el Script al GameObject.
Operador Módulo
El operador módulo permite conocer cuánto vale el resto al efectuar una división.
Consideremos una operación de división entre dos números enteros, por ejemplo 5 dividido 3, el resultado entero de esta división es 1 y el resto de la división es 2, podemos comprobar que: 3 x 1 + 2 = 5.
Entonces, teniendo en cuenta lo que dijimos en la introducción sobre números pares y divisibilidad por 2, si a un número cualquiera le aplicamos la operación módulo 2 y el resultado es igual a 0, podemos decir que el número es divisible por 2 y en consecuencia es un número par. Si el resultado no es 0, entonces el número es impar.
La programación de este algoritmo la podemos ver a continuación en la figura 3, en la línea 10 se genera un número aleatorio entre 0 y 100, luego en la línea 12 hacemos esta comprobación de si el módulo 2 de ese número es igual a 0 y asignamos ese resultado lógico a la variable lógica «esPar». Finalmente utilizando la sentencia if comprobamos si la condición es verdadera o falsa e imprimimos un mensaje acorde en cada caso.
Fig. 3: Algoritmo para saber si un número entero es par o impar en C#, Unity.
Testear el algoritmo par-impar
Al entrar en el modo juego, el código definido en el método Start se ejecuta, en las figuras 4 y 5 se pueden ver dos ejecuciones distintas de este algoritmo, una para un número par y otra para un número impar.
Fig. 4: Mensaje en consola indicando que el número generado resulta par.
Fig. 5: Mensaje en consola indicando que el número generado resulta impar.
Introducción
En este artículo vamos a ver cómo exportar de Unity a Android y compilar versiones de 32 y 64 bits, necesarias para poder publicar un juego o aplicación en Google Play.
El siguiente video está dividido en dos partes, los primeros 5 minutos tratan de cómo configurar el motor Unity para compilar las versiones de 32 y 64 bits. A partir del minuto 5 se muestra la forma en la que solucioné un error técnico con el mensaje: «IL2CPP.exe did not run properly!».
Antes que nada necesitamos tener instalado todo lo necesario para exportar de Unity a Android. Además del propio Unity vamos a necesitar 4 herramientas extra. Android Build Support, Android SDK, Android NDK y Java JDK.
Todo esto lo podemos obtener desde Unity HUB al momento de instalar una nueva versión del motor o podemos añadirle estos módulos a la versión que hayamos instalado previamente.
Dentro de Unity debemos asegurarnos de que están configuradas estas herramientas. En la pestaña Edit > Preferences vamos a la sección «External Tools».
En caso de que instalamos las herramientas usando Unity HUB, las casillas JDK, SDK y NDK deben estar marcadas, en caso de que instalemos estas herramientas nosotros mismos debemos desmarcar esas casillas e indicar las rutas donde estas herramientas están instaladas.
Configuración en Unity para exportar en 32 y 64 bits
Por defecto, al iniciar un nuevo proyecto para Android podremos exportar una aplicación para 32 bits, para poder exportar las dos arquitecturas debemos ir a la ventana «Project Settings > Player» podemos ir desde la pestaña Edit > Project Settings o desde la ventana de compilación (File > Build Settings).
Dentro de la ventana Player vamos a la sección «Other Settings» y debemos cambiar el parámetro «Scripting Backend» de «Mono» a «IL2CPP», esto nos habilitará la casilla «ARM64», pulsamos esta casilla y eso nos permitirá crear una compilación para la arquitectura de 64 bits.
Al momento de hacer la compilación sugiero utiliza la opción «App Bundle» que nos exportará el juego en un archivo con extensión .aab que contendrá las dos arquitecturas, este archivo podremos subirlo a Google Play.
Error IL2CPP.exe did not run properly!
Estuve algunos días intentando solucionar el error «IL2CPP.exe did not run properly!» que surgió al intentar exportar el juego en 64 bits.
Aparentemente el error se debe a la herramienta NDK, estuve consultando distintos foros pero no encontré una solución concreta.
Luego de varios días pude resolver el problema, así que voy a detallar exactamente la manera particular en la que pude hacerlo. En el video se puede ver a partir del minuto 5 aproximadamente.
Introducción
En este artículo vamos a ver cómo guardar y cargar distintos tipos de datos en Unity usando la clase PlayerPrefs. Para ello vamos a analizar un prototipo que se pueden descargar en esta misma página y luego importarlo en Unity.
Paquete de Unity para Descargar
A continuación puedes descargar el paquete de Unity para importar en tu proyecto, dentro encontrarás los archivos que se utilizan en el vídeo de más abajo, el Script que se encarga de Guardar y Cargar los datos en Unity y también la escena donde está definida la interfaz gráfica y demás elementos.
Fig. 1: Archivos que se añaden a tu proyecto al importar el paquete de descarga.
En el siguiente vídeo vemos cómo guardar y cargar DATOS PRIMITIVOS con PlayerPrefs en Unity
Al iniciar el programa van a ocurrir tres cosas, en primer lugar se van a leer los datos almacenados en la memoria, luego se van a generar nuevos datos de manera aleatoria y finalmente se van a guardar esos nuevos datos en la memoria, sobreescribiendo los datos antiguos.
Todo esto se ejecuta dentro de un método Start por lo que se resuelva antes incluso de mostrar el primer frame en pantalla.
La información leída de la memoria se va a mostrar en la columna de datos del lado izquierdo, estos datos fueron generados en la sesión anterior y cargados de la memoria. Los datos generados en la sesión actual se van a mostrar en la columna de datos de la derecha, estos datos se generan al momento de iniciar el programa y se guardan en la memoria.
En la interfaz tenemos tres botones que nos permiten reiniciar la escena, borrar los datos de la memoria y salir del programa.
Cómo guardar y cargar distintos tipos de datos en Unity
En este ejemplo hacemos el guardado de datos usando la clase PlayerPrefs, la cual es una herramienta que cuenta con algunas funciones que fácilmente nos permiten hacer el guardado de distintos tipos de datos primitivos, solo necesitamos dar un nombre de identificación para el dato a guadar y pasar el valor de dicho dato y las funciones se encargan del resto, para leer el dato guardado simplemente lo obtenemos con el mismo nombre que lo guardamos.
A continuación dejo una serie de artículos específicos donde se hace el guardado y la carga de datos de distint
En este artículo vamos a ver qué es una matriz en matemática, cómo se define, qué tipos de matrices hay y vamos a ver ejemplos de matrices.
Una matriz es un arreglo de números ordenado, que consiste en una serie de filas y columnas, de modo que cada elemento ocupa una posición y puede ser identificado por su número de fila y de columna.
Dadas dos matrices podremos realizar ciertas operaciones entre ellas siempre que cumplan determinadas condiciones.
Una de las aplicaciones mas útiles de las matrices es la resolución de sistemas de ecuaciones. Por ejemplo, si tenemos un sistema de dos ecuaciones con dos incógnitas, podemos representar este sistema con una matriz cuadrada de 2×2 (llamémosla A), multiplicada por un vector columna de incógnitas (vector x) y ese producto igualarlo al vector columna de términos independientes (digamos B). Este sistema se representaría de la siguiente manera:
A.x = B
Lo cual recuerda mucho a una ecuación lineal simple en la que tenemos una incógnita (x) que está multiplicada por un coeficiente (A) y esto es igual a un valor (B), para resolver esa ecuación lineal basta con dividir a ambos miembros por el coeficiente A y de esta forma despejaríamos la incógnita x. No se puede hacer divisiones con matrices pero se puede recurrir a una operación análoga que es multiplicar ambos miembros por la matriz inversa de A (siempre que exista la matriz inversa de A), con esto se despeja el vector incógnita.
x = A-1.B
Definición de una Matriz en Matemática
Una matriz la representamos con una letra del alfabeto en mayúscula (por ejemplo A, B, C…), luego podemos explicitar sus elementos, para ello vamos a escribir sus números en una tabla que contendrá una determinada cantidad de filas y columnas.
En la figura 1 vemos un ejemplo de una matriz genérica A de m filas y n columnas, vemos que en la derecha de la igualdad se ha explicitado la matriz escribiendo sus elementos aij.
Fig. 1: Matriz A genérica de m filas y n columnas, a la derecha se muestran sus elementos aij.
La matriz de la figura 1 hace referencia a una matriz cualquiera, se suele utilizar para las definiciones y propiedades de las matrices.
Ejemplos de matrices con valores
Vamos a ver ejemplos de matrices que tienen características particulares ya sea por su tamaño o por la forma en la que están distruibuidos sus elementos.
Matriz Cuadrada
Una matriz cuadrada es una matriz en la que el número de filas coincide con el número de columnas. En la figura 2 vemos un ejemplo de una matriz B de 3 filas y 3 columnas.
Fig. 2: Ejemplo de una matriz B de 3 filas y 3 columnas, a la derecha se muestran sus elementos bij.
En una matriz cuadrada tenemos una diagonal principal que son los elementos bij para los cuales i=j, en el caso de la figura 2 son los elementos b11, b22 y b33 cuyos valores son 1, 0 y 2 respectivamente.
La diagonal principal divide a la matriz en dos partes, un triángulo superior y un triángulo inferior.
Matriz Diagonal
Una matriz diagonal es una matriz en la que todos sus elementos no nulos están ubicados en la diagonal principal y el resto de los elementos son 0. En las figuras 3 y 4 vemos ejemplos de matrices diagonal, en particular la matriz de la figura 4 se la conoce como matriz identidad.
Fig. 3: Ejemplo de una matriz A diagonal de 3×3.
Fig. 4: Matriz identidad de 3×3.
Matriz Triangular
Una matriz triangular es una matriz que tiene todos sus elementos no nulosde un lado de la diagonal principal y el resto de los elementos son 0. Podemos tener matrices triangular superior y matrices triangular inferior, como se observa en las figuras 5 y 6 respectivamente.
Fig. 5: Ejemplo de una matriz A de 3×3 triangular superior.
Fig. 6: Ejemplo de una matriz A de 3×3 triangular inferior.
Conclusión
Una matriz en matemática es una arreglo de números ordenados en una cantidad fija de filas y columnas.
Las matrices cuadradas son las matrices en las que el número de fila coincide con el número de columnas. En una matriz cuadrada tenemos una diagonal principal que es el elemento en el cual el número de fila coincide con el número de columna.
Una matriz diagonal es una matriz cuadrada en la que todos sus elementos no nulos se encuentran en la diagonal principal. Particularmente la matriz identidad es una matriz diagonal en la que todos los elementos valen 1.
Las matrices triangulares son aquellas en la que todos los elementos no nulos se encuentran en la diagonal principal y por encima o por debajo, de aquí las podemos clasificar en matriz triangular superior o inferior.
En este artículo vamos a ver cómo guardar una variable booleana en Unity utilizando la clase PlayerPrefs, las variables booleanas en Unity son del tipo bool. La clase PlayerPrefs de por si no cuenta con un método para guardar datos booleanos por lo que vamos a guardar en memoria un dato entero y utilizar esta información para determinar si el valor de la variable es verdadero o falso. Luego veremos cómo cargar la variable booleana leyendo de la memoria el valor entero almacenado y aplicando lógica para transformar ese dato en verdadero o falso.
Guardar este tipo de variables nos puede servir para guardar estados, por ejemplo si el jugador ya ha hecho alguna acción como cerrar una ventana y que esta no vuelva a aparecer.
En el siguiente vídeo vemos cómo guardar y cargar DATOS PRIMITIVOS con PlayerPrefs en Unity
PlayerPrefs no tiene una función que permita guardar valores lógicos directamente, así que vamos a guardar un número entero que podrá valer 0 o 1 en función del estado de la variable booleana, para esto usamos el método estático «SetInt», una función que necesita que le demos dos parámetros.
El primer parámetro es un string con el nombre que va a tener esta variable que vamos a almacenar, esto permitirá que luego lo podamos recuperar. El segundo parámetro es el valor entero que queremos guardar.
La instrucción que hará el guardado de los datos en Unity se vería de la siguiente forma:
En este caso indicamos el nombre del dato entre comillas porque es un string, el segundo parámetro lo indicamos utilizando el operador ternario «?:» que funciona como una sentencia if simplificada, en primer lugar tenemos el dato lógico que queremos guardar, «boolData», luego el operador «?» y luego los valores que devuelve si boolData es verdadero o falso separados por «: «.
La expresión «boolData ? 1 : 0» dará como resultado 1 si boolData es verdadero y 0 si boolData es falso.
Cómo cargar un bool con PlayerPrefs
Para cargar un bool en Unity usando PlayerPrefs tenemos que recordar que en el paso anterior lo guardamos como 0 si la variable es falsa o 1 si es verdera, por lo tanto recuperamos el valor entero usando la función «GetInt», una función que se puede usar de dos formas distintas.
En la primer forma le damos un parámetro que va a ser el nombre del dato que queremos recuperar, el nombre que le dimos cuando ejecutamos la función «SetInt» que vimos anteriormente. Lo hacemos de la siguiente forma.
La ejecución del método estático «GetInt» de PlayerPrefs dá como resultado un número entero pero al utilizar el operador «==», que nos compara si ambas expresiones son iguales, obtenemos un resultado lógico que podemos asignar a la variable «boolData«. Si el entero almacenado es 1, boolData será verdadero, sino será falso.
La segunda forma consiste también en darle el nombre del dato que utilizamos en la ejecución de «SetInt» pero además damos un valor por defecto que se utilizará en caso de que no haya un dato guardado bajo ese nombre, esto se hace de la siguiente forma.
Esta página utiliza cookies para analíticas y ads, continua navegando en él si estás de acuerdo. Ajustes de CookiesACEPTAR
Política de Privacidad y Cookies
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are as essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.