En este video te explicamos en detalle todo el proceso para publicar una Aplicación Android…
Proyecto Unity 3D: ambientación escena
6.
Proyecto Unity 3D: ambientación escena
Hemos ido describiendo diversos GameObjects y componentes de Unity 3D a los largo de anteriores publicaciones. En ésta, vamos a recopilar varios de ellos en un proyecto, lo que nos servirá de ejemplo para explicar su implementación y el resultado que podemos obtener. Nuestro objetivo será crear una mayor ambientación para una escena de un videojuego.
Vamos pues a añadir los siguientes elementos al proyecto:
- Agua (Component Water Plane Mesh).
- Sonidos (Component Audio Source).
- Enemigo (GameObject Capsule).
- Límites del mapa: Final Mapa 1, Final Mapa 2, Final Mapa 3, Final Mapa 4 y Fondo Lago (GameObject Cube).
- Dirección luz (GameObject Directional Light).
En esta publicación, vamos a presentar una descripción general de la estructura, componentes y scripts utilizados. Puedes descargar el proyecto completo (usuarios Premium) al final de este tutorial, incluyendo una versión para Android.
Esta presentación la completaremos con el video que publicaremos en la siguiente entrega, donde explicaremos en detalle la creación de este videojuego. Aquí tienes no obstante un adelanto del resultado final, para hacerte una mejor idea:
Estructura del proyecto y descripción de sus componentes
Agua (Component Water Plane Mesh)
A partir de un elemento situado en la ruta «Assets > Standard Assets > Water (Basic) > Daylight Simpler Water», podemos simular la creación de ríos, mares o lagos en nuestros escenarios. Una vez seleccionado, bastará con arrastrarlo dentro del mapa, y configurar su posición y el tamaño.
Configuración:
Sonidos (Component Audio Source)
Para este componente, nos centraremos en implementar un script escrito en C#, que permita reproducir un sonido de pasos al mover el personaje. Para ello, dentro del objeto «Jugador», añadiremos un componente «Audio Source», a través del menú «Component > Audio > Audio Source».
Configuración:
Por último añadimos un script que describimos a continuación:
Script PasosPersonaje.cs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class PasosPersonaje : MonoBehaviour { //Declaramos nuestras variables para establecer los parámetros de reproducción del sonido para los pasos del personaje. public AudioClip pasos_personaje_android; public GUITexture controlPersonaje; //Función que sera llamada por cada frame del juego. Esta función se encargará de reproducir el sonido de pasos del personaje //al pulsar sobre los componentes de tipo GUI Texture. void Update() { //Comprobamos si el número de toques en la pantalla es superior a 0. if(Input.touchCount > 0) { //Recorremos el total de toques realizados. foreach(Touch touch in Input.touches) { GUILayer layer = Camera.current.GetComponent(typeof(GUILayer)) as GUILayer; GUIElement seleccion = layer.HitTest(touch.position); //Comprobamos si el componente de tipo GUI Texture ha sido seleccionado. if(seleccion == controlPersonaje) { audio.PlayOneShot(pasos_personaje_android); } } } } } |
Enemigo (GameObject Capsule)
Se implementa un GameObject pre-construido, a modo de enemigo, que nos perseguirá a lo largo del mapa. Para ello simplemente establecemos la siguiente configuración:
Aspecto visual del enemigo:
Script IA_Enemigo.cs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
//Clase IA_Enemigo que hereda de la clase base MonoBehaviour (toda clase debe heredar de MonBehaviour). public class IA_Enemigo : MonoBehaviour { //Declaramos nuestras variables para establecer los parámetros de detección del enemigo. Se establecen de tipo public para que puedan ser modificadas desde el editor de Unity. public float distancia; public Transform objetivo; public float deteccionEnemigo = 25.0f; public float rangoAtaque = 15.0f; public float velocidad = 5.0f; public float muelle = 6.0f; //Función que será llamada por cada frame del juego. Esta función se encargará de //dibujar las texturas del objeto enemigo, dependiendo de la distancia que lo separe de nuestro personaje. void Update () { distancia = Vector3.Distance(objetivo.position,transform.position); if(distancia < deteccionEnemigo) { renderer.material.color = Color.yellow; soloMirar(); } if (distancia > deteccionEnemigo) { renderer.material.color = Color.green; } if (distancia < rangoAtaque) { renderer.material.color = Color.red; atacarPersonaje(); } } //Función que permite al enemigo orientarse hacia nuestro personaje cuando traspasa la distancia de detección. void soloMirar() { var rotacion = Quaternion.LookRotation(objetivo.position - transform.position); transform.rotation = Quaternion.Slerp(transform.rotation,rotacion,Time.deltaTime * muelle); } //Función que permite al enemigo acercarse a nuestro personaje, cuando este traspasa la distancia de rango de ataque. void atacarPersonaje () { transform.Translate(Vector3.forward * velocidad * Time.deltaTime); } } |
Límites del mapa y fondo agua (5 GameObject Cube)
Se añaden 4 cubos simples, que se escalan para utilizar como paredes del final del mapa, y así el personaje no pueda salirse del mismo. Además, se utiliza otro elemento de tipo Cube para añadir al fondo del lago, y así el personaje se mantiene por encima del fondo del mismo (no se produce el efecto de hundimiento). Es muy importante, desactivar la opción «Mesh Renderer», para que no se visualicen.
Configuración:
En la imagen anterior, se puede apreciar tanto las paredes a modo de límites del mapa, como el fondo del lago con el borde de color verde (se activa la opción «Mesh Renderer» para visualizar los elementos que estamos describiendo).
Dirección luz (GameObject Directional Light)
En este GameObject, la propiedad Flare nos permitirá crear un ambiente de luz más realista, al simular el destello que genera el sol al mirar en su dirección. Nos proporciona cinco opciones de selección:
- None (Ninguno).
- 35mm Aliens.
- 50mm Zoom.
- Small Flare.
- Sun
Mostraremos este elemento así como el resto del proyecto en el video que publicaremos en la siguiente entrega de esta serie.
Descarga Proyecto
Aquí puedes descargar el proyecto Unity. Al abrirlo en tu equipo puedes moverte por la escena con las flechas de dirección y apuntar la cámara con el ratón.
También incluye una versión APK para Android. En esa versión solo puedes mover la cámara para ver en las diferentes direcciones
DownloadEsta entrada tiene un comentario
Los comentarios están cerrados.
[…] 6.Proyecto Unity 3D: ambientación escena […]