jairogarcíarincón

Constelación


5.46K

Introducción

Para añadir una serie de estrellas a nuestro fondo, duplica la escena FondoMovil y llámala Constelacion.

Si no lo habías añadido antes, arrastra el sprite estrella.png dentro de Assets > Sprites y crea un nuevo material llamado estrella de tipo Sprites > Default.

Constelación

Como vamos a crear un grupo de estrellas (similar a la Osa Mayor), primero crearemos un Empty object dentro de la escena, resetearemos su posición y le llamaremos Constelacion.

Dentro de él:

  • Crea un nuevo 2D Object > Sprite y llámalo Estrella.
  • Selecciona Estrella y, en la Inspector window, arrastra el sprite estrella a la propiedad Sprite del componente Sprite Renderer.
  • Arrastra el material estrella a la propiedad Material del componente Sprite Renderer.
  • En el componente Sprite Renderer, selecciona Fondo como Sorting Layer y 4 como Order in Layer.
  • Crea un nuevo script llamado Estrella dentro de Assets > Scripts y asócialo al objeto Estrella.
  • Ajusta la escala y coloca el objeto Estrella en la posición que más te convenga.
  • Duplica el objeto Estrella y cambia su posición hasta formar algo parecido a la constelación de la Osa Mayor.




Script

Ya tenemos la constelación creada, pero para darle un poco más de juego vamos a aplicarle un pequeño cambio de opacidad continuo de modo que parezca que la estrellas están titilando. Además, ajustaremos velocidades diferentes para cada estrella para mejorar el efecto.

Modifica el script Estrella con el siguiente código y fíjate en los comentarios para entender el código:


using System.Collections;
using UnityEngine;

public class Estrella : MonoBehaviour {

//Declaro las variables necesarias
[Range(5f, 15f)]
public float velocidad;
Material material;

void Start () {

//Capturo el material de la estrella
material = GetComponent<SpriteRenderer>().material;

}

void Update () {

//Llamo a la rutina que cambia la opacidad de forma continua
StartCoroutine(Opacidad(1, 0.5f));

}

//Cambio opacidad con fade in/out
private IEnumerator Opacidad(float opacidadIn, float opacidadOut)
{
//Fade out
material.color = new Color(material.color.r, material.color.g, material.color.b, opacidadIn); //opacidad inicial
while (material.color.a >= opacidadOut)
{
//Voy decrementando la opacidad hasta llegar a opacidad final
material.color = new Color(material.color.r, material.color.g, material.color.b, material.color.a - velocidad * Time.deltaTime);
yield return null;
}


//Fade in
material.color = new Color(material.color.r, material.color.g, material.color.b, opacidadOut); //opacidad final
while (material.color.a <= opacidadIn)
{
//Voy incrementando la opacidad hasta llegar a opacidad inicial
material.color = new Color(material.color.r, material.color.g, material.color.b, material.color.a + velocidad * Time.deltaTime);
yield return null;
}


}
}


Si ahora ajustas velocidades diferentes para cada estrella, el resultado debería ser similar al del siguiente video (las nubes no tienen que salir, esas pertenecen a la siguiente clase):

Fondos en Unity


Ejercicios propuestos

  • Modifica el ejemplo para que todo el cielo esté lleno de estrellas que titilan (generadas de forma aleatoria).
  • Modifica el ejemplo para que las estrellas sean de diferentes colores.


Publicado el 23 de Noviembre de 2024

unity