Creando el terreno:
En esta parte voy a crear una especide de caja donde irán cayendo los objetos. La caja tiene cuatro paredes bajas y un suelo. Para crear el suelo voy al menú, y busco GameObject | Create Other | Cube. Para ir rápido lo voy a situar en el (0,0,0), y lo voy a poner de unos 20x20 con una altura (en unity, por defecto la altura siempre es la 'y') de 0,2.
Luego ajustamos las paredes una a una:
Las paredes son a ojo pero con uno de grosor y 21 de ancho (en unos casos será Z y en otros X) y con una altura de 3 debería valer.
En el momento de ejecutarlo lo vas a ver muy negro asi que pongo 3 - 4 luces. Una direccional, y el resto de tipo spot, que hacer un radio de luz. Puedes experimentar, si quieres y cambiar el color, intensidad, numero de luces, etc.
Creando el Prefab.
Ahora tenemos que ver el objeto que irá creandose en la fuente. Vamos a diseñar uno. Cuando tengamos lo que queremos, haremos un prefab, que es algo asi como un modelo o molde para poder crear copias idénticas.
Nota: Si rotamos un poco el cubo, unos 5-45 grados cada componente, el cubo no caerá plano y botará de manera realista.
Guardamos el proyecto (File | Save Project) y preparamos nuestros deditos de programador. Vamos a hacer algunos scripts. La idea es que al cabo de un tiempo los cubos vayan desapareciendo para que no se acumulen muchos. Para ello vamos a usar un Destroyer. Le diremos que se destruya a sí mismo al cabo de 5 segundos.
Debemos ir al panel project, crear primero un folder llamado scripts y despues un script, que en mi caso se llamará AutoDestroyer y será en C#. Cuando se crea viene con 2 funciones sin codigo, update y start. Yo le añado el código a start para que quede asi:
public class AutoDestroy : MonoBehaviour { // Use this for initialization void Start() { Destroy(gameObject, 5); } }
Para probar el prefab podemos arrastrar unas cuantas veces el prefab al hierarchy o a la escena, para ver como van apareciendo cubos. Si se superponen, podemos moverlos y situarlos donde queramos.
Creando la fuente de los cubos.
La fuente de los cubos es simplemente un punto en el espacio. Se pueden crear GameObjects vacios. Lo único que tienen es una posición + rotación + escala, o sea una transformación. Lo situamos en 0,5,0. Le añadimos un script que cada segundo lance un cubo. El script seria este:
Asi que si le arrastramos el objeto FallingBouncyCube sera exactamente eso lo que cree. Cada cuanto lo creará? Cada segundo. Time.deltaTime guarda el tiempo que pasa entre cada frame, con lo que sumando tiempos conseguimos un reloj rudimentario. Para limitar el número de objetos, contamos en m_objectCounter y como maximo serán 300. Lo probamos y vemos que cada segundo cae un cubo, que tarda 5 segundos en desaparecer. Asi que solo veremos 5 cubos en pantalla.
Pero funciona!!! En un post futuro, flexibilizare todo esto que he creado para que sea mas cómodo configurarlo. Si tienes alguna duda, escribe un post!!!
public GameObject thePrefab; private float m_timeCounter; private int m_objectCounter; // Use this for initialization void Start () { m_timeCounter = 0.0f; m_objectCounter = 0; } // Update is called once per frame void Update () { m_timeCounter += Time.deltaTime; if(m_timeCounter > 1 && m_objectCounter < 300) { m_timeCounter = 0; Instantiate(thePrefab,transform.position, transform.rotation); m_objectCounter++; } }Por partes. El start es un constructor. Alli inicializamos objetos. Si te fijas tenemos 3 miembros, dos privados y uno publico. El public es visible desde fuera, pero que quiere decir esto? Al arrastrar el script al objeto vacio vemos que aparece esto:
Pero funciona!!! En un post futuro, flexibilizare todo esto que he creado para que sea mas cómodo configurarlo. Si tienes alguna duda, escribe un post!!!
No hay comentarios:
Publicar un comentario