
Antes de empezar con el desarrollo de la aplicación de nuestro videojuego; lo primero será entender algunos conceptos básicos por lo que primero revisemos la parte teórica del caso.
Unity
Unity es un motor de videojuegos que de forma sencilla nos permite programar interacción del usuario con un mundo virtual donde podemos escribir nuestro propio universo para el juego de computadora que deseemos desarrollar.
Entorno de Unity
Escena
La escena no es más que un ambiente donde se podrá incorporar todo el diseño, modelo, objetos e interacciones del jugador y el videojuego.
Cámara principal y luz direccional
La cámara principal y dirección de luz son dos componentes, siendo que posiblemente la primera de éstas sea la más importante en una escena, ya que la cámara nos permite movilizarnos visualmente en el entorno; así también la dirección de luz nos da una perspectiva de sombra para dar el efecto más adecuado a los objetos añadidos a la escena.
Assets
Éstos son recursos que podremos agregar a nuestro proyectos para dar interacción con el jugador.
Objetos primitivos
Existen diferentes tipos de objetos, pero para fines prácticos nosotros haremos uso de los objetos 3D de los cuales podremos ver que Unity nos ofrece ciertos componentes ya prediseñados como cubos, cilindros, esferas, etc.
Rigidbody
El rigidbody es una propiedad que aplica física a un objeto, con lo que podemos incorporar un comportamiento más real y acorde a la posible necesidad del tipo de videojuego que estemos desarrollando.
Collider
El collider es una propiedad que nos permite detectar colisiones en un objeto, con lo que podemos dar cierto evento "Reacción" a la interacción de un objeto con algún otro que pueda existir en nuestro entorno virtual.
Ahora que ya se explicó un poco de los conceptos más básicos de Unity, podemos pasar a desarrollar nuestro primero videojuego.
En el video de la parte inferior se encuentra los pasos a seguir para desarrolar nuestro primero videojuegos de naves, un ejemplo realmente sencillo pero funcional para nuestra primera experiencia con esta herramienta.
El video no tiene audio como tal por lo que sólo servirá para guiarse en el procedimiento que se debe realizar y aqui también incorporaremos todos los scripts empleados en ese video.
Avión.cs
En este script se encuentra todo los eventos y comportamiento que se le da a nuestro personaje.
using UnityEngine; public class Avion : MonoBehaviour { private bool _arrowPress; private void Start() { } private void Update() { _arrowPress = false; if (Input.GetKeyDown(KeyCode.LeftControl)) { GameObject p1 = GameObject.CreatePrimitive(PrimitiveType.Sphere); GameObject p2 = GameObject.CreatePrimitive(PrimitiveType.Sphere); p1.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); p2.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f); float xTemp = transform.localPosition.x; float yTemp = transform.localPosition.y; float zTemp = transform.localPosition.z; p1.transform.localPosition = new Vector3(xTemp - 0.87f, yTemp - 0.5f, zTemp - 0.6f); p2.transform.localPosition = new Vector3(xTemp + 0.87f, yTemp - 0.5f, zTemp - 0.6f); p1.AddComponent(); p2.AddComponent(); } if (Input.GetKey(KeyCode.LeftArrow)) { _arrowPress = true; if (transform.rotation.z < 0.25) { transform.Rotate(new Vector3(0, 0, 2)); } if (transform.position.x > -10) { transform.position += new Vector3(-0.3f, 0, 0); } } if (Input.GetKey(KeyCode.RightArrow)) { _arrowPress = true; if (transform.rotation.z > -0.25) { transform.Rotate(new Vector3(0, 0, -2)); } if (transform.position.x < 10) { transform.position += new Vector3(0.3f, 0, 0); } } if (!_arrowPress) { if (transform.rotation.z < 0) { transform.Rotate(new Vector3(0, 0, 2)); } if (transform.rotation.z > 0) { transform.Rotate(new Vector3(0, 0, -2)); } } } }
Init.cs
Aquí inicializamos los obstáculos a los cuales habrá que destruir mediante disparos de nuestro avión.
using UnityEngine; public class Init : MonoBehaviour { private void Start() { for (int i = 0; i < 10; i++) { GameObject metor = GameObject.CreatePrimitive(PrimitiveType.Cube); metor.transform.localScale = new Vector3(1, 1, 1); metor.transform.position = new Vector3(Random.Range(-9.5f, 9.5f), 1.5f, Random.Range(30, 50)); metor.AddComponent(); } } private void Update() { } }
Meteor.cs
Este script dará el comportamiento a los obstáculos que se han inicializado, de tal manera que aquí le damos movimiento, velocidad, giro y demás.
using UnityEngine; public class Meteor : MonoBehaviour { private float _speed; private void Start() { gameObject.AddComponent(); gameObject.GetComponent().useGravity = false; gameObject.GetComponent().isTrigger = true; _speed = Random.Range(-0.25f, -0.1f); } private void Update() { transform.Rotate(new Vector3(Random.Range(1, 5), Random.Range(1, 5), Random.Range(1, 5))); if (transform.localPosition.z <= 0) { transform.position = new Vector3(Random.Range(-9.5f, 9.5f), 1.5f, Random.Range(30, 50)); } transform.position += new Vector3(0, 0, _speed); } private void OnTriggerEnter(Collider other) { Destroy(gameObject); Destroy(other.gameObject); GameObject metor = GameObject.CreatePrimitive(PrimitiveType.Cube); metor.transform.localScale = new Vector3(1, 1, 1); metor.transform.position = new Vector3(Random.Range(-9.5f, 9.5f), 1.5f, Random.Range(30, 50)); metor.AddComponent(); } }
Proyectil.cs
Finalmente incorporamos el script para el comportamiento del proyectil, el cual realmente ya se crea en el script de Avion.cs; sin embargo, aún no se dió niguna interacción en nuestro entorno con respecto a el/los proyectiles creados.
using UnityEngine; public class Proyectil : MonoBehaviour { private void Start() { } private void Update() { if (transform.localPosition.z > 50) { Destroy(gameObject); } transform.Translate(new Vector3(0, 0, 0.4f)); } }
De esta manera finalizamos con los script y para tener más detallado el proceso a llevar, Ud. puede revisar el video de la parte inferior.
Conclusión
Como podemos ver, el script incorporado y revisando aún mejor el video; sabremos que el trabajo con Unity 3D es realmente muy sencillo y de esta manera podemos crear nuestros mundos virtuales, simulaciones y mucho más. Todo dependerá de la creatividad que cada uno pueda tener.

- Debes estar logueado para realizar comentarios