Jorge Vallejo Blog

Blog del creativo, ilustrador y profesor de videojuegos Jorge Vallejo

Category: unity

Unity crear arrays o matrices

¿Qué es una matriz o array de elementos?

Podemos definir un array como una lista de elementos ordenados, de tal forma que iremos guardando datos en diferentes “cajas” las cuales están ordenadas y numeradas con un indice único que empieza en 0 en csharp y Unity la crearemos definiendo:

Primer el ámbito de aplicación, si es publica o privada

Después el tipo de variable o clase por ejemplo int

Después los corchetes que van a servir para identificar el array o matriz, de tal forma que mientras int numero solo puede contener un número int[] Numeros va a poder contener una cantidad de elementos que debemos dar al crear la matriz, reservando en memoria espacio para esos elementos.

Podemos darle el nombre que queramos, aun que yo aconsejo poner la primera letra en mayúsculas y en plural para que de una forma sencilla distingamos una matriz de otro tipo de variables.

En general determinaremos cuantos elementos va a contener el array ya que necesariamente necesita saberlos para funcionar, si no sabemos el numero de elementos que va a contener hay otras estructuras como los List que lo permiten.

Con new llamamos al constructor del array ya que en csharp los arrays o matrices funcionan como objetos, con sus propias propiedades y métodos , para dar un numero de elementos debemos usarlo, finalmente una matriz de tipo int solo podrá contener int, por eso escribimos int[20], reservando memoria para 20 enteros.

Para acceder a un elemento usaríamos Numeros[indice] , por ejemplo Numeros[0] nos devuelve el elemento que este guardado en la “caja” 0

Si definimos la matriz utilizando el constructor, en este caso al ser números enteros todos los elementos tendrían un valor inicial de 0.

Podemos también definir una matriz de esta otra forma:

En vez de usar el constructor utilizamos una colección de elementos, la cual se define con llave { elementos separados por comas y fin de llave }

Automáticamente la matriz se define con seis elementos como si se hubiese utilizado new int[6]

Numeros[0] , nos devolvería en este caso 1

Recreando iVisual , Escuela de nuevas tecnologías de Valladolid en Unity

Primero se tomaron fotos de referencia.

Después, se recrea la geometría base utilizando Probuilder, el cual nos permite modelar dentro de Unity, colocamos un FPS Controller para movernos por el escenario, en esta fase es fundamental corregir escalas, probar q el personaje se mueve con soltura sin estar demasiado “apretado”, también se colocan cubos simples con los objetos base, que seran convertidos en Prefabs para ser sustituidos después.

Colocamos materiales con texturas, Probuilder va creando las UVs por lo que simplemente seleccionado caras podemos asignar los materiales. También colocamos los primeros modelos.

En este proyecto las luces se apagan y encienden en tiempo de juego, por lo que las pusimos mixed, hay q tener en cuenta que al añadir el postprocesing todo se volverá algo más oscuro.

Las bombillas llevan un material de emisión que se puede desactivar por código, Material.DisableKeyword(“_EMISSION”);

Finalmente añadimos los efectos de postproducción con Postprocesing v2, en esta versión podemos controlar diferentes postprocesing mediante volumen de forma que podemos tener un postprocesing en el pasillo y otro distinto en una habitación.

El efecto Bloom pertime que los materiales emisión se vean más suavizados y con un halo.

La corrección de color, colocamos todo el color en ACES el modo más fílmico y ajustamos la exposición, contraste etc.

Con Screenspace añadimos reflejos en el suelo en aquellos materiales que tienen algo de reflexión.

También metimos reflexion probes para controlar los reflejos del Ironman , los cuadros y las manillas de las puertas.

Unity luces: Recreando Cesta de pan, de Salvador Dalí

Inspirado en el cuadro de Dalí, Cesta de pan, recreo la composición y las luces en Unity, utilizo un spot light para iluminación base y area lights para marcar zonas de brillo, finalmente subo el contraste con postprocesing.
Modelos usados :
Mesa:
https://sketchfab.com/models/e9ef3eadee9d4491b7c59fdbb19c30cd

Cesta de pan:
https://sketchfab.com/models/bb7e9cf4496f420c8d825d2e507f124b

Pan:
https://sketchfab.com/models/35c647c3231b4d7ba3dfdc1d0ba4d036

Unity script saber si un número es par o impar

Un script muy sencillo de c# que pongo de ejemplo para usar el operador % modulo , y comprobar su utilidad, el cual devuelve el resto de una división.
Ya que el resto de la división de un numero par entre dos es siempre 0
public int numero;
if(numero%2=0){
print(numero+" es par");
}else{
print(numero+" es impar");
}

Demo de ¿Donde está Lupo?


Se trata de un videojuego sencillo, basado en la realidad de tener un gato y no saber por dónde anda, así q la pregunta ¿Donde está Lupo? Surge cada día.
De este hecho cotidiano decidí darle una vuelta para crear un videojuego pensado para el aprendizaje de idiomas, ya que recuerdo que el tema de las localizaciones me daba quebraderos de cabeza en inglés.
Como últimamente he estado diseñando en pixel art, deci hacerlo con un estilo parecido a las aventuras gráficas tipo Lucas Arts.
El proyecto está en desarrollo, pero ya es funcional.
Si os interesa saber más sobre ¿Donde está Lupo? Dejarme un comentario.

Realidad Virtual Unity abriendo y cerrando un cajón

En Realidad Virtual la interacción lo es todo, es curioso como Oculus provee de un SDK para empezar a desarrollar y que sin embargo traiga sólo ejemplos de agarrar y lanzar objetos y nada sobre elementos que desplazan , giran, mueven etc.
Así que hay que buscarse la vida, en este caso por ejemplo, con un trigger compruebo si la mano entra en la zona del cajón, después paso su velocidad al cajón, el cual tiene un rigybody con y,z frezeadas así como todas las rotaciones, finalmente con un Mathf.Clamp controlo las posiciones maximas y mínimas. El resultado es funcional, aunq me quedaría controlar si está en modo agarrar, es decir con el puño cerrado.

Realidad Virtual Desarrollando para Oculus con Unity

Este año profundizamos en Realidad Virtual con Unity, desarrollando tanto para Cardboard como para Oculus, una vez instalado el SDK de Oculus , podemos empezar a testear con las gafas, simplemente conectándolas y dándole al Play.
Hay que afinar mucho mas tanto los modelos como las texturas, así como las sombras , los objetos deben estar perfectamente colados, cualquier error es muchísimo mas evidente que en un videojuego normal.
Aun estamos experimentando con todas las posibilidades que la interacción y la inmersión que proporcionan las Oculus nos ofrecen, pero realmente es sumamente interesante.

Realidad Virtual en Unity

IMG_20180616_092841_522
Hasta ahora venía considerando la realidad virtual como la utilización de un simple periférico, es decir, pasar el control de la cámara a un dispositivo como por ejemplo el giroscopio del móvil, sin embargo este año hemos profundizado más en Realidad Virtual en clase, permitiendo realizar diferentes experiencias, una pasiva de terror, una visita virtual, y una montaña rusa, lo que es muy significativo es que la experiencia es muy diferente de verla en el ordenador a con las gafas puestas, la capacidad de nuestro cerebro para admitir la nueva realidad es extraordinaria , en unos segundos nos sumergimos en ese nuevo mundo virtual, y las sensaciones que nos provoca el movimiento y el vértigo son reales, creo q aún hay mucho que descubrir en realidad virtual y me parece muy interesante poder hacerlo de forma relativamente sencilla con Unity. La implementación para cardboard es fácil si uno sigue el esquema que Google ofrece con su cardboard SDK.

Blender fluids a Unity

Crear animaciones realistas de fluidos en Unity puede ser muy complicado, lo más común es que se utilice el Particle System para tratar de emular el comportamiento, pero queda lejos de la interacción con el entorno y la física aplicada a los fluidos.
Por eso podemos acudir a soluciones externas como es utilizar Blender y su sistema de fluidos.
Pros:
Podemos crear animaciones de fluidos complejas que intercacionan con el entorno, y que generan un mesh complejo.
Contras:
No podemos importar directamente el fluido resultante en Blender, tenemos que exportar el resultado de la simulación, podemos hacerlo como una secuencia de objs o como un alembic .
Aquí os dejo un video de una simulación creada en blender exportada alembic e importada en Unity.

Muy pronto creare un vídeo tutorial para explicar el proceso.