Jorge Vallejo Blog

Blog del creativo, ilustrador y profesor de videojuegos Jorge Vallejo

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

Despistados portada desarrollada en Unity


Portada del videojuego Despistados, he utilizado la nueva herramienta integrada en Unity Textmeshpro , q ahora viene para descargarse dentro del sistema de paquetes, con ella se puede crear un text con más opciones de formateo, me ha parecido especialmente interesante la opción de poder darle una textura al color, en la imagen casi no se aprecia pero hay una textura de cartón junto con el color rojo.

Unity Destruir después de hacer animación

Supongamos que queremos crear un animación en un GameObject que tras ejecutarse se destruya asimismo, tendriamos varias opciones la mas sencilla es contar el tiempo en segundos y simplemente usar la funcion Destroy(gameObject,segundos_animacion); si embargo este codigo requiere ajustes y no es universal.
El codigo para que un GameObject se destruya tras ejecutar una animación seria:
public class Destruye : MonoBehaviour {

Animator animator;
float tiempo;
void Awake(){
animator = GetComponent ();
}

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
//Que la animación coincida con el tiempo
if (animator.GetCurrentAnimatorClipInfo(0).Length != 0)
{
AnimatorClipInfo[] AuxClipInfo = animator.GetCurrentAnimatorClipInfo(0);
tiempo = animator.GetCurrentAnimatorStateInfo(0).normalizedTime * AuxClipInfo[0].clip.length;

if (tiempo > AuxClipInfo[0].clip.length)
{
print (tiempo + " " + AuxClipInfo [0].clip.length);
Destroy (gameObject);
}
}

}
}

Tendremos que asignarlo al GameObject que tenga el Animator y ademas quitar el loop de la animación, este código es universal, ya que recoje el tiempo que dura el clip y lo compara con ese tiempo multiplicado por el tiempo normalizado es decir, en base 1, funcionando como un porcentaje .
Cuando tiempo sea mayor que la duración del clip, es un poco mayor por la multiplicación y el numero de decimales, destruye el gameObject que lleva este script asociado.
Respecto al 0 de animator.GetCurrentAnimatorClipInfo(0); se trata del LayerAnimation que si no hemos creado ninguno mas sera la Base Layer y por tanto valdrá 0.

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.