Contenido

Constelación

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):

Ver vídeo

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.