Los GameObjects son los objetos que podemos colocar en una escena en Unity, cuando un GameObject está activo en la jerarquía y el juego esté corriendo, Unity actualiza periódicamente cada uno de sus componentes y ejecuta algunas otras funciones sobre ellos, todo esto de manera automática. Si desactivamos el GameObject, este proceso no se llevará a cabo y lograremos el efecto de que el GameObject desaparezca de la escena.
En este vídeo vamos a ver cómo activar y desactivar GameObjects en Unity a través de código. Para ello vamos a crear un Script que tenga un referencia del GameObject que queremos activar o desactivar y vamos a usar la función SetActive(), pasando como parámetro «false» para desactivar el GameObject y «true» para activarlo.
ACERCA DE ESTE VÍDEO
En este quinto vídeo de la mini serie «De Blender a Unity» finalmente vamos a exportar el modelo de Blender a Unity, muestro la forma en la que prefiero hacerlo y cómo llevar las texturas. Lo que hago es en Blender seleccionar todos los objetos que quiero exportar, luego voy a File – Export y elijo el formato FBX, en la ventana que se abre marco la casilla «Selected Objects» para que solo se exporte lo que he seleccionado, finalmente elijo el directorio y le doy un nombre. Con esto ya tenemos el modelo 3D pero no tenemos las texturas dentro del archivo, las texturas las llevaremos a Unity por separado.
Luego vemos en Unity cómo configurar todo para que el modelo se muestre con los materiales y las texturas, el resultado que se obtendrá en general no será el mismo que teníamos en Unity por que los shaders son diferentes, así como las condiciones de iluminación y los parámetros de renderizado, a partir de este punto habrá que trabajar en la apariencia del modelo para obtener el resultado que necesitemos.
En este vídeo vemos un resumen sobre los CONJUNTOS NUMÉRICOS, clasificación de distintos números, ejemplos e importancia de los mismos para la creación de modelos computacionales.
Los conjuntos numéricos nos sirven para agrupar números que tienen características similares. Es uno de los conceptos básicos de la matemática por lo que es importante entender cuáles son y qué características tiene cada uno.
Conjunto de Números Naturales (ℕ)
Este conjunto está compuesto por los números {1,2,3,…} (los puntos suspensivos indican que la enumeración continúa indefinidamente), estos números son todos positivos y representan magnitudes enteras, es decir no tienen parte decimal.
Conjunto de Números Enteros (ℤ)
Si a los números naturales agregamos el número 0 y los números negativos sin parte decimal obtenemos el conjunto de los números enteros. {…,-3,-2,-1,0,1,2,3,…}.
Con los números negativos podemos representar operaciones de sustracción, magnitudes faltantes, valores que se encuentran por debajo del cero de referencia y demás.
Algunos ejemplos son flujos salientes de dinero, es decir dinero que pagamos y se resta de lo que tenemos; temperaturas bajo cero se expresan como valores negativos de grados centígrados.
Conjunto de Números Racionales (ℚ)
El conjunto de los números racionales surge de hacer divisiones de dos números enteros. Por ejemplo 1 dividido 2 es una operación que da lugar a un número que es más pequeño que 1 pero más grande que 0.
Estos números se utilizan para representar magnitudes no enteras, por ejemplo variables de naturaleza continua como velocidad, peso, corriente eléctrica; expresar cantidades fraccionables por ejemplo medio kilo de harina son 0.5 Kg de harina.
Conjunto de Números Reales (ℝ)
Si al conjunto de los números racionales le agregamos el conjunto de los números irracionales obtenemos el conjunto de los números reales.
Los números irracionales surgen de realizar ciertas operaciones y no es posible expresarlos como el cociente entre dos números enteros. Un ejemplo de este tipo de números es el conocido número Pi que se compone de infinitas cifras decimales.
Conjunto de Números Complejos (ℂ)
Si al conjunto de los números reales agregamos los números imaginarios, obtenemos el conjunto de números complejos. Todo número que elijamos será en términos generales un número complejo.
El número imaginario i es el resultado de la raíz cuadrada de -1.
Los números complejos se componen de una parte real y una parte imaginaria y son muy útiles para el estudio de circuitos eléctricos que involucran elementos capacitivos o inducitvos. También se utilizan en cálculos de transformadas de Fourier.
Cómo CAMBIAR a CUALQUIER escena con BOTÓN en Unity
Descripción del vídeo
En este vídeo vemos una forma simple de cambiar a cualquier escena utilizando botones y el nombre de la escena a la que queremos cambiar. Para ello crearemos un Script con una función que se encargue del trabajo y luego haremos que cada botón ejecute esa función pero pasando como parámetro el nombre de la escena que tiene que cargar. De esta forma logramos cargar cualquier escena al pulsar el botón utilizando un solo Script. Es importante que las escenas estén añadidas en la compilación, sino no podrán cargarse, para esto hay que abrir cada escena, ir a File – Build Settings y pulsar en «Add Open Scenes».
En este video vemos rápidamente cómo unir objetos en Blender y luego como tomar un objeto y separarlo en dos objetos.
Resumen de Cómo UNIR objetos en Blender:
1-Estamos en el modo objeto y tenemos objetos separados.
2-Con SHIFT y Clic Izquierdo seleccionamos todos los objetos que vamos a unir.
3-Hacemos Clic Derecho y elegimos la opción «Join». También podemos usar el acceso directo CTRL+J.
Resumen de Cómo SEPARAR objetos en Blender:
1-Seleccionamos el objeto que queremos separar y entramos en el modo edición.
2-Debemos seleccionar todos los vértices, aristas o caras de la pieza que queremos separar en un segundo objeto. Si existe una separación entre las piezas se puede seleccionar un vértice y luego CTRL+L para seleccionar todos los vértices conectados.
3-Hacemos Clic Derecho, vamos al menú «Separate» y elegimos la forma en la que queremos separar el objeto, en general utilizo «Selection», lo que hace que todos los vértices seleccionados se separen en un segundo objeto. El menú «Separate» se puede acceder rápidamente con la tecla «P».
Descripción del vídeo
Vemos cómo cortar objetos en Blender o como hacer secciones, para eso usamos las herramientas «Cuchillo» y «Bisecar». Con Bisecar podemos seccionar objetos como si fuesen cortados por un plano alineado con la cámara, esto hace que el objeto se divida en dos partes. Con la herramienta cuchillo podemos hacer lo mismo que con bisecar, pero también podemos hacer cortes irregulares sobre la pieza.
En este vídeo vemos cómo crear un material transparente en Blender usando Eevee, vamos a utilizar el Shader Principled BSDF, es el que se crea por defecto de Blender, vamos a configurar sus parámetros transmission y roughness para que el material permita el paso de la luz por su interior. Luego tenemos que configurar algunas cosas en las opciones de renderizado para lograr el efecto de transparencia en el material.
En este vídeo vemos cómo exportar un modelo en formato FBX con las texturas incluídas y poder utilizarlas en Unity, esto me lo habían preguntado en varias ocasiones y no estaba seguro de que se pudiese hacer, hasta que sin querer me topé con una forma de hacerlo. En las opciones de exportación FBX de Blender hay que cambiar el «Path Mode» a «Copy» y luego pulsar el botón «Embed Textures» que se encuentra a la derecha de dicha opción. Esto creará un archivo FBX en el que estarán incluídas las texturas, algo que puede verse si se lo compara con un modelo exportado de manera normal. Al llevarlo a Unity las texturas no aparecen automáticamente, es necesario extraerlas del archivo FBX, para eso seleccionamos el archivo y en el inspector vamos a la pestaña «Materiales», allí nos encontraremos con un botón para extraer las texturas, seleccionamos la carpeta de destino y de esa forma podemos extraer las texturas del archivo FBX, en mi caso las texturas se aplicaron automáticamente al material.
TIMESTAMP
00:00 Seting up the model to export in Blender
00:15 Export FBX WITHOUT the textures
00:35 Export FBX with the textures inside
01:08 Bring the model to Unity
01:18 Extract the textures inside the FBX
Descripción del vídeo
Mix de una hora de rock instrumental ambiental sin interrupciones. Hice este mix de rock para tener música instrumental para programar, en total son 16 canciones de rock.
LISTADO DE CANCIONES CON ARTISTAS
00:00 – 03:32 Without A Sound – Letter Box
03:32 – 06:15 Open Highway – Silent Partner
06:15 – 09:53 Lay It Down – Silent Partner
09:53 – 14:20 Don’t Look – Silent Partner
14:20 – 16:59 Silver – Riot
16:59 – 23:22 1973 – Bruno E.
23:22 – 26:05 Double You – The Mini Vandals
26:05 – 30:28 Town of 24 Bars – Unicorn Heads
30:28 – 34:34 Remembering Her Face – Silent Partner
34:34 – 38:04 Promises – Letter Box
38:04 – 41:03 In the Shadows – Ethan Meixsell
41:03 – 46:09 To the Sun and Back – TrackTribe
46:09 – 48:55 The Big Conference – DJ Williams
48:55 – 53:35 Heading West – Audionautix
53:35 – 57:45 We Could Reach – Freedom Trail Studio
El protagonista de la historia discute con un amigo, el cual termina mandándolo al diablo. Nuestro héroe se toma esas palabras muy en serio y decide cumplir con dicha tarea para que su amigo lo pueda perdonar. Ayúdalo en su misión de descender a las entrañas de la tierra sin morir en el intento.
Cómo jugar
Muévete con las teclas WASD o las flechas de dirección, puedes saltar con ESPACIO, mueve la cámara con el MOUSE. Desciende hasta el fondo del infierno para que tu amigo te perdone.
Desarrollado para la Game Jam Ludum Dare 48 con el tema "Deeper and Deeper" por:
GAMEDEVTRAUM
UNITY DEVELOPER
NORBERT
VOICE ACTOR
Detalles Técnicos
A continuación vamos a repasar un poco de información sobre el funcionamiento interno de este juego y sus mecánicas, en primer lugar es un proyecto 3D desarrollado con el motor Unity.
Estructura de escenas
Este juego está montado en dos escenas, la primera escena es la del menú principal que solo cuenta con dos botones, uno para jugar y otro botón para cerrar el juego. Al pulsar el botón jugar comienza una secuencia de imágenes y sonidos narrando la historia, esta secuencia está implementada en la misma escena del menú principal y se puede saltear al pulsar espacio, cuando la secuencia termina o se saltea, en ese momento se produce el cambio a la escena del juego.
Personaje controlado por el jugador
El jugador controla al personaje utilizando las flechas direccionales o las teclas WASD, la cámara se controla con el mouse. El control en primera persona fue programado desde cero con algo de antelación, estaba haciendo experimentos con plataformas y para que un personaje pueda recibir daño por caída, además de que el salto tenga cierto momentum.
Modelos 3D de la ciudad y el pozo hacia el infierno
Los modelos 3D del escenario son modelos que hice utilizando Blender, algunas texturas fueron hechas con Substance Painter mientras que otras como las texturas de los edificios fueron sacadas del buscador.
Escapa del laberinto
DESCARGA EL CÓDIGO FUENTE DE ESTE PROYECTO
Puedes descargar el código fuente de este proyecto en la tarjeta de más abajo. No es necesario que pagues por él pero si quieres apoyar este proyecto y futuros proyectos puedes pagar el precio sugerido o indicar tu propio precio. Si este producto recibe apoyo voy a actualizarlo con más mecánicas, por ejemplo más niveles y un selector de niveles.
Sinópsis
Un personaje se encuentra atrapado en el interior del laberinto en el que hay solo una puerta para escapar. La salida se encuentra bloqueada y para abrirla hay que encontrar la llave, la cual aparecerá cuando hayamos encontrado un conjunto de objetos.
Cómo jugar
Muévete con las teclas WASD o las flechas de dirección y orienta la cámara con el mouse. Pasa por encima de los objetos para recogerlos.
Desarrollado por:
GAMEDEVTRAUM
UNITY DEVELOPER
Sobre el desarrollo de este juego
Este proyecto comenzó siendo más simple a como se ve en la compilación de Unity WebGL de más arriba, ya que se trataba de un trabajo por encargo con unas consignas claras que hacían énfasis en la lógica y mecánicas del juego mas que en el apartado gráfico.
Detalles técnicos
A continuación vamos a repasar un poco de información sobre el funcionamiento interno de este juego, en primer lugar es un proyecto 3D desarrollado con el motor Unity.
Los modelos 3D del escenario son modelos que hice utilizando Blender y las texturas con Substance Painter, este proceso tomó unas dos horas aproximadamente debido a que ya sabía exactamente lo que tenía que hacer e incluso lo había hecho anteriormente.
Dada la simplicidad del prototipo utilicé una única escena de Unity, por lo que no fue necesario preocuparse por el traspaso de información entre escenas.
Los elementos de la interfaz gráfica del menú principal se encuentran como hijos de un GameObject que está dentro de un Canvas, la interfaz gráfica durante el gameplay también está construida de esa manera, por lo que al iniciar el juego lo que se hace es desactivar el GameObject que contiene los elementos de la interfaz gráfica y activar el GameObject que contiene la interfaz gráfica del juego.
Mecánicas del juego del Laberinto hecho en Unity
Personaje controlado por el jugador
El jugador controla al personaje utilizando las flechas direccionales o las teclas WASD, la cámara se controla con el mouse. No recuerdo bien pero puede que se trate del prefabricado «First Person Controller» de Standard Assets.
Objetos a encontrar en el laberinto
Los seis objetos que hay que encontrar aparecen en el laberinto de manera aleatoria y a una cierta distancia entre ellos. Para lograr esto se creo un sistema de instanciación que tiene en cuenta la forma de las piezas del laberinto y las regiones donde podrían aparecer estas piezas.
Los objetos emiten un sonido cuya intensidad depende de la distancia que esté el jugador, cuanto mas cerca se encuentre del objeto mas fuerte se escuchará el sonido, esto es una pista que permite ubicarlos.
Para detectar que el jugador recoge los objetos se utilizan Colliders y el evento OnTriggerEnter, al recoger un objeto se compruba si se han recogido todos los objetos, si esto es verdad se libera la llave.
La llave para desbloquear la salida
La llave es como un séptimo objeto que se instancia usando el mismo sistema que los objetos anteriores, la diferencia es que al hacerlo inmediatamente se desactiva el GameObject de la llave para que desaparezca del escenario, cuando el jugador encuentra todos los objetos se hace aparecer el GameObject de la llave y un cartel en la interfaz gráfica que indica que la llave fue liberada.
La puerta para escapar del laberinto
La puerta es un modelo 3D dividido en dos partes para que pueda abrirse, además hay un Collider justo adelante para comprobar si el jugador se encuentra frente a ella.
Si el jugador entra en la región frente a la puerta se comprueba si ha recogido la llave, si no es verdad la acción queda sin efecto, pero si el jugador tiene la llave la puerta se abre con una animación de rotación para cada objeto de la puerta.
Introducción
En este artículo aprenderás cómo exportar un archivo de audio en Reaper, vamos a mostrar cómo exportar en formato MP3 y WAV que son dos de los formatos mas populares, pero verás que es muy simple elegir el formato que necesites. Para esto es importante tener en claro cuál es el formato de exportación que se necesita y también su sample rate o profundidad de bits.
Una canción producida por el canal Trepen el Paredón
Cómo hacer un RENDER del proyecto en Reaper
Con nuestro proyecto de Reaper preparado para exportar el primer paso es ir a File > Render o usar el acceso directo CTRL+ALT+R, como se observa en la figura 1.
Se desplegará la ventana “Render to file” en la que podremos configurar todos los parámetros de exportación. En este ventana está todo lo que necesitamos así que vamos a ver en detalle cada sección de la ventana de exportación de Reaper.
Fig. 1: Exportar un proyecto en Reaper.
Fig. 2: Ventana «Render to File» de Reaper.
Renderizar proyecto completo, pistas separadas o tiempo seleccionado en Reaper
En la primera parte de la ventana de Render de Reaper podemos empezar a configurar desde donde queremos exportar nuestro audio, dentro de “Source” la opción predeterminada es “Master mix” y se refiere a la salida desde la pista Master en el DAW, esto quiere decir, todas las pistas que no estén muteadas en ese momento y esten enviando su señal como última instancia al Master.
Fig. 3: Primera parte de la ventana Render de Reaper.
Podemos exportar las pistas de audio por separado con la opción “Selected tracks (stems)”, ver las opciones en la lista de la figura 4.
Fig. 4: Seleccionar qué pistas del proyecto exportar.
En “Bounds” podemos configurar que parte de la línea de tiempo es la que nosotros queremos exportar, si son solo los primeros dos compases, dos minutos, el proyecto entero, regiones, etc.
Fig. 5: Seleccionar qué regiones de tiempo del proyecto exportar.
Sección Output de la ventana de exportación de Reaper
En la sección “Output” escribimos el nombre del archivo o los archivos a exportar y elegimos el directorio donde van a ser exportados. En “Directory” figura la carpeta donde serán enviados nuestros audios, podemos cambiarla haciendo click en “Browse”. En “File name” se escribe el nombre para los archivos. Por último el campo “Render to” nos muestra el resultado final de los parámetros configurados.
Fig. 6: Directorio de exportación y nombre de los archivos finales.
Opciones de exportación de audio en Reaper
Dentro de “Options” podemos configurar el “Sample rate”, cuántos canales queremos (Channels) y otras configuraciones más avanzadas como el “Resample mode” o “Normalize/Limit”. En la imagen 7 se ve que el “Sample rate” está en 44100, que es la calidad estándar que se usaba en los CD. Dependiendo el proyecto que se quiera exportar, estas opciones deberán ser configuradas correctamente ya que podría tener inconvenientes que perjudiquen nuestra exportación o nos lleven a un resultado que no estábamos buscando.
Fig. 7: Primera parte de la ventana Render de Reaper.
En el apartado “Primary output format” (POF) y “Secondary output format” (SOF) podemos elegir dos formatos para exportar nuestro proyecto en Reaper, en este caso nuestro formato primario será WAV con una profundidad de bits (WAV bit depth) de 24 bits PCM.
Fig. 8: Elegir formato primario de exportación de proyecto en Reaper.
Fig. 9: Profundidad de bits para exportar proyecto en Reaper en formato WAV.
Hacemos click en “Secondary output format” (SOF), esta opción nos permite generar un segundo archivo con un formato distinto en el mismo proceso de Render de un proyecto de Reaper. Para el formato secundario elegiremos MP3 (encoder by LAME project), como se observa en la figura 10.
Fig. 10: Selección de un segundo formato para exportar proyecto en Reaper, formato MP3.
Iniciar proceso de exportación del proyecto en Reaper
Una vez que todos los parámetros de Render del proyecto están configurados, hacemos clic en el botón “Render 2 files”, en este caso ya que hemos elegido que se exporten dos archivos distintos en el mismo proceso. Al hacer click empezará el proceso de renderizado.
Fig. 11: Confirmar exportación del proyecto en Reaper.
Se despliega la ventana que se ve en la figura 12 que muestra el proceso de renderizado del proyecto en Reaper. Una vez finalizado el proceso, podremos encontrar nuestros dos archivos en la carpeta que elegimos. La ventana final mostrará el dibujo de la onda de audio donde nos permitirá ver los clips, además Reaper nos proporciona esta misma información en el recuadro de texto inferior: Peak, Clip, RMS, LUFS, etc. Si damos click en “Show in browser” nos llevará directamente al directorio donde se encuentran los archivos.
Fig. 12: Proceso de exportación de audio en Reaper.
Introducción
Commandos Behind the Enemy Lines (detrás de las líneas enemigas) es un juego mítico de estrategia en tiempo real que es perfectamente rejugable a día de hoy gracias a sus mecánicas pulidas. Puedes encontrarlo en Steam.
En este juego tomamos el control de una pequeña tropa de solados de élite para llevar a cabo peligrosas misiones de infiltración.
Passwords de todas las misiones de Commandos Behind Enemy Lines
Con las siguientes claves puedes jugar a cualquier misión de Commandos Behind the Enemy Lines.
Misión 2 NS2B7
Misión 3 BFQBF
Misión 4 YGF1J
Misión 5 FS5TL
Misión 6 BAR4M
Misión 7 Y3YWX
Misión 8 B3WJ0
Misión 9 HIAXT
Misión 10 G4CM3
Misión 11 GD0DW
Misión 12 5MB4M
Misión 13 65UWX
Misión 14 CT34V
Misión 15 YN9PD
Misión 16 BY4MD
Misión 17 YI4PW
Misión 18 8P0J8
Misión 19 8WGJ0
Misión 20 IFU48
La misión de Commandos que me resultó más difícil
Hay que tener en cuenta que cuando jugué a Commandos era un crío de unos 10 años, a esa edad no tenía grandes capacidades de estratega, la misión 15 llamada «El Fin del Carnicero» consistía en infiltrarse en un cuartel general sin que suene la alarma y fue imposible resolverla en ese momento, varios años después cuando volví a jugar a Commandos pude resolverla.
Todas las misiones de Commandos Behind the Enemy Lines
CINEMÁTICA INICIAL
La cinemática inicial nos introduce al contexto histórico en el que se desarrolla Commandos Behind Enemy Lines, a mediados de la segunda guerra mundial.
Misión 1 – Bautismo de Fuego
La misión 1 de Commandos Behind Enemy Lines se desarrolla en Noruega en Febrero de 1941, se nos introducen a los primeros tres soldados, el boina verde, el conductor y el marine, han aterrizado en lugares separados. El objetivo de la misión es destruir una estación de radio ubicada en otra isla, para ello es necesario capturar un bote con el marine para transportar al boina verde a la isla donde se encuentra la estación de radio.
BRIEFING DE LA MISIÓN 1
GAMEPLAY DE LA MISIÓN 1
Misión 2 – Voladura silenciosa
En la misión 2 de Commandos Behind Enemy Lines contamos con el boina verde, el conductor y el marine, de la misión anterior pero también se introducen dos personajes nuevos, el zapador que maneja explosivos y el francotirador. El objetivo es destruir unos depósitos de combustible, pero primero hay que transportar al otro lado de la isla donde comienza la misión, se debe ser cautelosos ya que una lancha de patrullaje vigila la actividad en el río y en la costa.
PASSWORD DE LA MISIÓN 2
NS2B7
BRIEFING DE LA MISIÓN 2 👉
GAMEPLAY DE LA MISIÓN 2 👉
Misión 3 – Ingeniería Inversa
La misión 3 consiste en infiltrarse en una estación transformadora, robar explosivos y volar una represa para cortar el suministro eléctrico, para esta misión contamos con el boinar verde, el zapador, el marine y se introduce un nuevo personaje, el espía, con la capacidad de disfrazarse de un soldado de alto rango enemigo y distraerlos, además de acabar con ellos silenciosamente.
PASSWORD DE LA MISIÓN 3
BFQBF
BRIEFING DE LA MISIÓN 3 👉
GAMEPLAY DE LA MISIÓN 3 👉
Misión 4 – Cuestión de Orgullo
La misión 4 de Commandos Behind Enemy Lines consiste en volar una mansión, en este caso el escenario es bastante grande, está dividido en dos partes conectadas por una puente por donde circula un tren. En esta misión contamos con el boina verde, el marine, el francotirador, el conductor y el zapador. En cierta parte del escenario se depositaron suministros que pueden ser recogidos cada uno por el soldado correspondiente. Una particularidad que tiene esta misión es que en la primera parte del escenario hay un tanque de guerra que puede manejar el conductor, el tanque es prácticamente indestructible y está equipado con ametralladoras, por lo que al conseguirlo la misión se facilita mucho, el tanque solo se puede usar en la primera parte del escenario.
PASSWORD DE LA MISIÓN 4
YGF1J
BRIEFING DE LA MISIÓN 4 👉
GAMEPLAY DE LA MISIÓN 4 👉
Misión 5 – Justicia Ciega
En la misión 5 de Commandos Behind Enemy Lines solo contamos con dos soldados, el boina verde y el espía, el escenario está cubierto completamente de nieve y también está dividido en dos partes, una parte inferior y una parte en la montaña que se encuentran conectadas a través de un teleférico. El objetivo es volar una antena ubicada en la cima de la montaña y escapar pilotando un avión. Una particularidad que se introduce en esta misión que en cierta parte del escenario está minada por lo que hay que tener en cuenta las rutas que recorren los enemigos.
PASSWORD DE LA MISIÓN 5
FS5TL
BRIEFING DE LA MISIÓN 5 👉
GAMEPLAY DE LA MISIÓN 5 👉
Misión 6 – La amenza de Leopoldo
La misión 6 consiste en destruir un enorme cañón de artillería, para esta misión contamos con el boina verde, el francotirador y el zapador. En esta misión se introduce un tanque de guerra comandado por el enemigo, lo que representa una gran amenaza.
PASSWORD DE LA MISIÓN 6
BAR4M
BRIEFING DE LA MISIÓN 6 👉
GAMEPLAY DE LA MISIÓN 6 👉
Misión 7 – La Caza de los Lobos
Esta misión consiste en conseguir unos explosivos y destruir dos submarinos de guerra, contamos con cinco personajes que aparecen divididos en dos partes del escenario, por un lado tenemos al zapador, al conductor y al espía y por otro al boina verde junto con el marine.
PASSWORD DE LA MISIÓN 7
Y3YWX
BRIEFING DE LA MISIÓN 7 👉
GAMEPLAY DE LA MISIÓN 7 👉
Misión 8 – Ejercicio Pirotécnico
En esta misión se introduce una nueva cinemática, los Commandos ahora se trasladan a África, dejamos de ver escenarios de tundra nevada para pasar a zonas mas desérticas, la vestimenta de los Commandos también cambia.
La misión ocho consiste en destruir una serie de depósitos de combustible, contamos con el boina verde y el francotirador.
CINEMÁTICA DE LA MISIÓN 8 👉
PASSWORD DE LA MISIÓN 8
B3WJ0
BRIEFING DE LA MISIÓN 8 👉
GAMEPLAY DE LA MISIÓN 8 👉
Misión 9 – Una Visita de Cortesía
La misión 9 de Commandos Behind Enemy Lines consiste en destruir un par de edificios, en relación a los niveles anteriores, esta misión no presenta mucha dificultad. Contamos con el boina verde, el francotirador, el zapador, el conductor y el espía, este último ya cuenta con su disfraz por lo que rápidamente podemos posicionarlo entre los enemigos.
PASSWORD DE LA MISIÓN 9
HIAXT
BRIEFING DE LA MISIÓN 9 👉
GAMEPLAY DE LA MISIÓN 9 👉
Misión 10 – Operación Ícaro
La misión 10 de Commandos Behind Enemy Lines es la primera misión de rescate, contamos con el boina verde, el francotirador, el zapador, el conductor y un nuevo personaje, el aviador que se encuentra capturado por el enemigo, este personaje es secundario, no tiene habilidades especiales y no lo volvemos a ver mas adelante. Además de liberar al aviador de su prisión debemos destruir unas avionetas y robar un avión de carga para el escape.
PASSWORD DE LA MISIÓN 10
G4CM3
BRIEFING DE LA MISIÓN 10 👉
GAMEPLAY DE LA MISIÓN 10 👉
Misión 11 – Crudo y sin Refinar
La misión 11 de Commandos Behind Enemy Lines consiste en destruir cuatro rigs de perforación de petróleo, en esta misión contamos con el boina verde, el francotirador, el zapador, el conductor y el espía, quien ya cuenta con su uniforme.
PASSWORD DE LA MISIÓN 11
GD0DW
BRIEFING DE LA MISIÓN 11 👉
GAMEPLAY DE LA MISIÓN 11 👉
Misión 12 – Adiós, Túnez
Esta misión se lleva a cabo en una ciudad, el enemigo ha detectado a los Commandos y se ha dado la alarma, por lo que los soldados debieron dispersarse y esconderse entre los edificios. Para esta misión contamos con el boina verde, el francotirador, el espía, que ya se encuentra disfrazado y hay un nuevo personaje secundario que hay que rescatar de la prisión.
PASSWORD DE LA MISIÓN 12
5MB4M
BRIEFING DE LA MISIÓN 12 👉
GAMEPLAY DE LA MISIÓN 12 👉
Misión 13 – David y Goliat
En la misión 13 de Commandos Behind Enemy Lines se nos presenta una nueva cinemática.
La misión consiste en robar un pequeño submarino equipado con torpedos y destruir un gran barco acorazado. Para esta misión contamos con la ayuda del boina verde, el francotirador, el marine, el zapador y el conductor.
CINEMÁTICA DE LA MISIÓN 13 👉
PASSWORD DE LA MISIÓN 13
65UWX
BRIEFING DE LA MISIÓN 13 👉
GAMEPLAY DE LA MISIÓN 13 👉
Misión 14 – Día D: Saque de honor
La misión 14 de Commandos Behind Enemy Lines trata sobre el mítico desembarco de Normandía, los Commandos deben infiltrarse en las instalaciones de la costa y volar ciertos bunkers estratégicos para facilitar la llegada de las tropas del ejército aliado. Para esta misión contamos con el boina verde, el francotirador, el marine, el zapador y el conductor.
PASSWORD DE LA MISIÓN 14
CT34V
BRIEFING DE LA MISIÓN 14 👉
GAMEPLAY DE LA MISIÓN 14 👉
Misión 15 – El Fin del Carnicero
La misión 15 de Commandos Behind Enemy Lines se lleva a cabo en las calles de una ciudad en donde se encuentra un cuartel general enemigo y es una de las misiones mas complejas porque todo el accionar debe ser sigiloso, el objetivo es eliminar un alto mando enemigo que se encuentra en el patio del cuartel general, ante el menor signo de alarma el oficial es evacuado y la misión resulta en fracaso. Contamos con el francotirador, el marine, el conductor y el espía.
PASSWORD DE LA MISIÓN 15
YN9PD
BRIEFING DE LA MISIÓN 15 👉
GAMEPLAY DE LA MISIÓN 15 👉
Misión 16 – Pólvora Mojada
En la misión 16 de Commandos Behind Enemy Lines se introduce una nueva cinemática.
La misión consiste en evitar la demolición de un puente estratégico, para ello hay que eliminar simultáneamente a cuatro ingenieros en explosivos que están encargados de detonar las cargas ante el menor signo de alarma. Para esta misión contamos con el francotirador, el marine y el espía.
CINEMÁTICA DE LA MISIÓN 16 👉
PASSWORD DE LA MISIÓN 16
BY4MD
BRIEFING DE LA MISIÓN 16 👉
GAMEPLAY DE LA MISIÓN 16 👉
Misión 17 – Antes del Amanecer
La misión 17 consiste en rescatar a un grupo de prisioneros que serán ejecutados al amanecer. Contamos con el boina verde, el marine y el espía, el prisionero que hay que rescatar es el mismo de la misión 12.
PASSWORD DE LA MISIÓN 17
YI4PW
BRIEFING DE LA MISIÓN 17 👉
GAMEPLAY DE LA MISIÓN 17 👉
Misión 18 – La Fuerza de las Circunstancias
Esta misión consiste en destruir el mismo puente que se protegió en la misión 16. Contamos con el boina verde, el marine, el zapador y el conductor.
PASSWORD DE LA MISIÓN 18
8P0J8
BRIEFING DE LA MISIÓN 18 👉
GAMEPLAY DE LA MISIÓN 18 👉
Misión 19 – La Hora de la Represalia
La misión 19 consiste en infiltrarse en una base enemiga y destruir una serie de cohetes que podrían cambiar el rumbo de la guerra. Contamos con el boina verde, el francotirador, el marine y el zapador.
PASSWORD DE LA MISIÓN 19
8WGJ0
BRIEFING DE LA MISIÓN 19 👉
GAMEPLAY DE LA MISIÓN 19 👉
Misión 20 – Operación Valhalla
En la última misión de Commandos Behind Enemy Lines están presentes todos los Commandos, la misión consiste en infiltrarse en una fortaleza plagada de enemigos, destruir cohetes que aún están en posesión del enemigo y destruir la fortaleza que es la base de operaciones donde se están produciendo estos misiles.
PASSWORD DE LA MISIÓN 20
IFU48
BRIEFING DE LA MISIÓN 20 👉
GAMEPLAY DE LA MISIÓN 20 👉
Cinemática final de Commandos Behind Enemy Lines
CINEMÁTICA FINAL 👉
Introducción
La clase PlayerPrefs de Unity no tiene un método específico para guardar vectores, sin embargo tiene tres funciones que permiten guardar datos de tipo entero, float y strings, a los tipos de variable int y float se los conoce como variables primitivas y con ellas es posible reconstruir otras estructuras de datos mas complejas, y es que un vector de R2 o R3, si lo pensamos, no es mas que un arreglo de tres variables de tipo float, que cada una ocupa una posición o tiene un significado.
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
Análisis de cómo guardar un Vector3 con PlayerPrefs
La idea es descomponer el vector en sus componentes que son datos de tipo float y guardarlas de manera individual con PlayerPrefs, luego, al momento de hacer la carga de datos, recuperar cada componente de la memoria y crear un nuevo vector usando esas componentes.
En la escena que viene en el paquete de descarga ya se encuentra montada la solución, en la figura 2 vemos cómo está compuesta la jerarquía, tenemos un GameObject llamado «SaveDataScript» que es el que tiene asignado el Script que vamos a analizar (ver figura 3) y este se encarga de hacer el guardado y la carga de datos. Luego tenemos otro GameObject llamado «ObjectToSavePosition» que es un cubo al que le guardaremos su posición para poder cargarla al iniciar la escena. Observen que en el inspector en la figura 3, nuestro Script tiene una referencia a este objeto, esto le permitirá leer y modificar sus variables o ejecutar funciones sobre este GameObject, siempre insisto que entender el concepto de referencia en programación es un pilar muy importante en el desarrollo de aplicaciones con Unity.
Fig. 2: GameObject de la escena que va a contener el script para guardar y cargar un Vector3 en Unity.
Fig. 3: Script para guardar y cargar Vector3 en Unity visto desde el inspector.
Script que se encargar de guardar y cargar el vector
En la figura 4 vemos una parte del Script del guardado de datos que viene en el paquete, vemos que está definida la variable «objectWithSavedPosition» de tipo GameObject que aparece en el inspector de la figura 3 y también vemos los métodos Awake y Start, que son funciones que Unity ejecuta automáticamente en distintos tiempos dentro del ciclo de vida de la aplicación. Dentro se ejecuta una función llamada «LoadData» que es la que se encarga de cargar la información, la vemos mas adelante. La carga de datos es algo que normalmente ocurre al iniciar una escena, a veces pueden surgir problemas dependiendo de dónde se haga la carga de datos, recordemos que las funciones Start se ejecutan una atrás de otra para cada GameObject en un orden que no podemos predecir o que sería tedioso predecir, imaginen que un Script en su función Start utiliza variables de otro Script que aún no ha cargado sus datos!
Fig. 4: Script para guardar y cargar Vector3 en Unity, variables e inicialización.
En los juegos se suelen tener atajos para guardado y carga rápida, en la figura 5 tenemos unas instrucciones que hacen precisamente esto, noten que al presionar F5 se ejecuta una función llamada «SaveData» que se encarga de hacer el guardado, sería conveniente que el guardado de todas las variables necesarias se haga dentro de esa función o que en el interior se llamen a otras funciones que se encarguen de guardar otros datos, de esa forma una vez que ejecutamos la instrucción SaveData estamos seguros de que toda la información se ha guardado, lo mismo para la función «LoadData» que se encarga de leer los datos guardados en la memoria e inicializar las variables con esos datos.
Fig. 5: Funciones para testear el guardado y la carga de un Vector3 en Unity.
Ejemplo de cómo guardar un Vector3 utilizando PlayerPrefs
En la figura 6 se muestra el contenido de la función SaveData que es la que se encarga de guardar los datos del vector que posteriormente nos permitirán reconstruirlo. Observen que primero se hace una descomposición del vector que se quiere guardar en sus variables X, Y y Z, se las almacena en las variables temporales «positionX», «positionY» y «positionZ».
El guardado de datos con PlayerPrefs se hace en las últimas tres instrucciones, observen el nombre que se pasa como etiqueta de esos guardados, estos nombres deberemos usarlos en la carga de datos para poder recuperarlos.
Fig. 6: Instrucciones para GUARDAR un dato tipo Vector3 con PlayerPrefs en Unity.
Ejemplo de cómo cargar un Vector3 utilizando PlayerPrefs
En la figura 7 se muestra el contenido de la función LoadData que es la que se encarga de cargar los datos almacenados en la memoria y hacer una reconstrucción del vector, la carga es el proceso inverso, primero recuperamos los datos de la memoria, esto lo hacemos con las funciones GetFloat de PlayerPrefs, pasando la etiqueta que se usó para cada dato y en este ejemplo incluyo el valor 0 en caso de que no exista información almacenada anteriormente, esto nos permite llamarlo directamente en Start y que no haya conflictos la primera vez que la aplicación se ejecute.
La siguiente instrucción se encarga de crear el Vector3 a partir de los datos recuperados de la memoria, Vector3 y en general la mayoría de las clases tienen constructores que nos permiten crear los datos dándoles valores iniciales.
El problema no termina aquí, ya que hemos leído la información, recuperado el vector pero aún no le hemos dicho a nuestro GameObject que se posicione correctamente, esto se hace en la última instrucción de la figura 7.
Fig. 7: Instrucciones para CARGAR un dato tipo Vector3 con PlayerPrefs en Unity.
Introducción
En este artículo vamos a a ver dos formas de cambiar el color de un material en Unity a través de código. La primera forma consiste en modificar directamente el color del material definido en la carpeta Assets. La otra forma es accediendo a la instancia particular del material asignado a un GameObject específico.
Cómo hacer un material transparente a través de código en Unity
En los comentarios del canal me preguntaron cómo se puede modificar solamente la compontente alfa de un modelo 3D a través de código, es decir la componente de transparencia del color y de esa forma lograr que un objeto se haga transparente, mi respuesta fue el siguiente vídeo:
Elementos de la escena
Para analizar cómo cambiar el color de un material por código en Unity vamos a emplear la escena que se muestra en la siguiente imagen:
Fig. 1: Escena que viene dentro del paquete de Unity
En la jerarquía hay un GameObject que tiene asignado un Script llamado ¨ChangeColorScript¨ que es donde están definidas las variables y funciones necesarias para cambiar el color del material elegido.
Fig. 2: Script asignado para cambiar el color de un material por código.
Script con funciones para cambiar el color de un material
En la figura 3 podemos ver el Script que controla el sistema, en las líneas 7, 8 y 9 están definidas las variables que vamos a utilizar, son las que aparecen en el inspector en la figura 2, es importante que las referencias de los objetos adecuados estén asignadas en estos campos, sino vamos a tener un error de NullReferenceException.
Una forma de elegir colores aleatoriamente es mediante la instrucción «Random.ColorHSV()», observen que en las tres funciones de la figura 3 se utiliza esta instrucción para asignar un color aleatorio al material.
Fig. 3: Cotenido del script con dos métodos para modificar el color de un material en Unity.
En la figura anterior también vemos tres funciones que van a ser ejecutadas al pulsar los botones de la interfaz gráfica que se ven en la figura 1.
La primera función llamada ¨Random Color Material¨ cambia el color directamente al material asignado en la variable, el efecto que esto tiene es que todos los GameObjects que tengan asignado ese material se verán afectados por el cambio de color. Además, si modificamos el color del material de la carpeta assets mientras estamos en el modo juego, al salir del modo juego el material conservará ese color.
Fig. 4: Inspector de un material genérico en Unity.
Las otras dos funciones de la figura 3, «RandomColorCube» y «RandomColorSphere» realizan la misma función solo que una se aplica al cubo y la otra a la esfera. La idea en este caso es acceder a la instancia del material que está aplicada sobre un GameObject específico y a esa instancia modificarle el color. Para ello primero se accede al componente Renderer que está asignado sobre los objetos, en la figura 5 vemos un componente MeshRenderer (que hereda de Renderer), para acceder a esta componente se usa la referencia del GameObject del cubo o la esfera y luego la instrucción GetComponente<T>() donde T es el tipo de componente que queremos obtener, en nuestro caso Renderer (o MeshRenderer). Una vez que tenemos el componente Renderer accedemos al material asignado a través del operador punto, luego accedemos al color asignado a ese material y ese es el campo que escribimos con el color aleatorio.
Como una observación, en este caso se pudo acceder al material del Renderer de esta forma porque se sabía de antemano que el Renderer tenía asignado un solo material (como se observa en la figura 5). En caso de que haya mas materiales asignado hay que acceder al array Materials y pasar el índice del material al que se quiere acceder.
Fig. 5: Componente MeshRendere asignado a un GameObject que se encarga de renderizar un modelo 3D en pantalla.
El resultado de esto es que podemos cambiar el color de cada material individual, lo que desconecta momentáneamente a los GameObjects del material que está definido en la carpeta Assets, al salir del modo juego se restablece la conexión con dicho material.
Fig. 6: El código permite modificar el color de un material individualmente.
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.