jairogarcíarincón

Nube simple


5.46K

Introducción

Para añadir ahora una nube que aparezca por la izquierda y cuando salga por la derecha se vuelva a recolocar en otra altura y vuelva a salir, duplica la escena Constelacion y llámala NubeSimple.

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

Nube

  • Crea un nuevo 2D Object > Sprite y llámalo Nube.
  • Selecciona Nube y, en la Inspector window, arrastra el sprite nube a la propiedad Sprite del componente Sprite Renderer.
  • Arrastra el material nube a la propiedad Material del componente Sprite Renderer.
  • En el componente Sprite Renderer, selecciona Fondo como Sorting Layer y 5 como Order in Layer.
  • Crea un nuevo script llamado Nube dentro de Assets > Scripts y asócialo al objeto Nube.
  • Ajusta la escala y coloca el objeto Nube a la izquierda pero fuera de la escena.




Script

Ya tenemos la nube creada, vamos ahora a modificar el script Nube para conseguir que:

  • Se mueva de izquierda a derecha a una determinada velocidad
  • Cuando salga por la derecha, cambie de tamaño y de posición en y (altura) y vuelva a salir por la izquierda


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


using UnityEngine;

public class Nube : MonoBehaviour {

[Range(0.5f, 1.5f)]
public float velocidad;
GameObject fondo;
float limiteJuego, posicionInicialX;

void Start () {

//Capturo el objeto del fondo y su límite en x
fondo = GameObject.Find("Fondo");
limiteJuego = fondo.GetComponent<SpriteRenderer>().bounds.extents.x;

//Capturo la posición inicial en x para cuando tenga que recolocar la nube
posicionInicialX = transform.position.x;

}

void Update () {

//Calculo el vector de movimiento en X en base a la velocidad y el deltaTime
Vector2 movimiento = new Vector2(Time.deltaTime * velocidad, 0);

//Muevo la nube con ese vector
transform.Translate(movimiento);

//Si la nube se sale completamente de la escena por la derecha, la recoloco a la izquierda
//con otra altura y otra escala (lo multiplico por 1.25 para asegurarme de que la nube ha salido completamente).
if (transform.position.x > limiteJuego * 1.25f)
{
//Escala aleatoria en x e y (z se queda fija)
transform.localScale = new Vector3(Random.Range(0.2f, 0.4f), Random.Range(0.2f, 0.4f), transform.localScale.z);

//Posición inicial en x y aleatoria en y
transform.position = new Vector2(posicionInicialX, Random.Range(0.5f, 1.5f));
}

}
}


Si ahora ajustas la velocidad de la nube, el resultado debería ser similar al del siguiente video:

Fondos en Unity


Ejercicios propuestos

  • Modifica este ejemplo de modo que se instancien 3 nubes a distintas alturas, con diferentes velocidades y en diferentes momentos (como Prefab, no poniendo 3 nubes en la escena) y que cuando desaparezcan por la derecha se vayan recolocando de nuevo por la izquierda cambiando su escala y su posición en y (altura).
  • Crea una variable pública que permita modificar la dirección del viento (izquierda o derecha) desde la Inspector window.


Publicado el 23 de Noviembre de 2024

unity