C#

Unity 3D – Empezando nuestro proyecto.

Como Neowedge no está seré yo el encargado de hacer esta semana este episodio de Desarróllame, ya conocemos un poco el entorno de trabajo así que ahora vamos a trabajar de verdad, para ello hoy trataremos de hacer que un cilindro se mueva sobre un plano en 3 dimensiones, añadir físicas y que la luz siga a nuestro personaje.

Tras abrir Unity 3D vamos a File -> New Project…

Hay que darle en New Project...

Entonces nos pedirá la localización del proyecto donde pondremos lo que queramos, lo que si es importante es Importar el paquete de Scripts.

Tras seleccionar Scripts.unity le damos a Create, bueno después de unos instantes nos saldrá el editor para que empecemos a jugar.

Primero vamos a crear lo que sería nuestro suelo para ello vamos a crear un plano, esto se hace así GameObject -> Create Other -> Plane y luego haremos lo mismo pero creando un Cilindro (Cylinder).

Luego en Hierarchy vamos al Plano (Plane) y en el inspector le pondremos en el componente Transform lo siguiente: Posición X = 0, Y = 0, Z = 0.
Con el Cilindro pondremos de posición X = 0, Y = 0.5 y Z = 0 y en Scale X = 0.5, Y = 0.5, Z = 0.5, el cilindro quedará como en la foto.

Tras estos primeros retoques la escena quedará ya realizada, pero sin luz por lo que al tocar «Play» no veremos sino algo oscuro, así que vamos a crear una luz para poder ver algo, como siempre vamos a GameObject -> Create Other -> SpotLight y finalmente la pondremos en el X=0, Y = 6, Z = -5, en la rotación (Rotation) con X=45, Y=0, Z=0 y en el componente de Light le aumentaremos la intesidad a 3.

Ahora le pondremos a la cámara un script de los que Unity trae por defecto se trata en la Zona de Project abrir Standard Assets -> Scripts -> Camera Scripts y arrastrar ahí el script SmoothFollow a Main Camera del Hierarchy, miramos que en Main Camera tenemos un componente llamado Smooth Follow y en Target le arrastramos el Cylinder desde el Hierarchy, ese script lo que hace es seguir a un target (Objetivo) en nuestro caso ha sido el cilindro podríamos haber puesto cualquier otro elemento, pero nuestro «personaje» hoy será el cilindro.

Con esta cámara tenemos un efecto de juego en 2.5D como las cámaras de NewSuper Mario o Donkey Kong, evidentemente salvado las distancias, aunque con los parámetros que nos dejan modificar desde el Inspector podemos acercar o alejar la camara y algunas cosas más que hacen que merezca la pena usar un script creado antes que crearlo nosotros para este ejemplo.

El siguiente paso será que nuestro cilindro se mueva para ello tendremos que crear un nuevo script, en Project-> Create -> C Sharp Script, le cambiamos el nombre haciendo click a la derecha del nombre tras seleccionarlo y lo llamamos Controller, puede ser cualquier nombre pero nosotros vamos a usar ese, ahora lo abrimos haciendo doble click.

Ahora borramos todo lo que hay en el código y ponemos esto:

using UnityEngine;
using System.Collections;

public class Controller : MonoBehaviour {

// Constructor
void Start () {

}

// En cada frame se llama a esta función
void Update () {

//Al pulsar el botón A cambiamos la posición de nuestro personaje hacia la izquierda
if(Input.GetKey(KeyCode.A))
transform.position -= Vector3.right * Time.deltaTime;
//Al pulsar el botón D cambiamos la posición de nuestro personaje hacia la izquierda
if(Input.GetKey(KeyCode.D))
transform.position += Vector3.right * Time.deltaTime;
//Al pulsar el boton S iremos hacia adelante
if(Input.GetKey(KeyCode.S))
transform.position -= Vector3.forward * Time.deltaTime;
//Al pulsar el boton W iremos hacia atrás
if(Input.GetKey(KeyCode.W))
transform.position += Vector3.forward * Time.deltaTime;

}
}

Este código es bastante sencillo lo único que hace es que al pulsar una de las teclas A,S,D,W mueve el cilindro cambiando la posición en el eje X o Z, en una unidad por el tiempo que ha pasado entre frames, esto se hace para que si una CPU calcula mucho frames y otra pocos al final el espacio recorrido en 3 segundos sea el mismo.

Ahora vamos a hacer que al cilindro le afecten las físicas, gracias a Physix de NVIDA que viene con Unity esto se hace con un par de clicks, con el cilindro seleccionado vamos a añadir un nuevo componente, este está en Components -> Physics -> RigidBody si ahora le damos a PLAY el cilindro se caerá, ¿por qué? porque el plano no tiene una superficie con la que chocar es invisible para las físicas así que seleccionamos el plano y en el Inspector le damos en el componente Mesh Collider a Smooth Sphere Collision a Convex.

Si le damos a Play ahora el cilindro se caerá así que tenemos que cambiar en la componente de RigidBody las Constantes (Constraints) y poner en la rotación Freeze Rotation en todos los ejes.

En el código después de hacer que se mueva hacia atrás ponemos la siguiente línea:

//Al pulsar el boton espacio saltaremos
if(Input.GetKeyDown(KeyCode.Space))
rigidbody.AddForce(Vector3.up * 200);

Como el código es tan simple si tocamos varias veces espacio haremos dobles saltos y hasta N saltos en el aire.
Ahora vamos a crear un nuevo script llamado Follow para que la luz siga a nuestro personaje

using UnityEngine;
using System.Collections;

public class Follow : MonoBehaviour {

//El objetivo que vamos a seguir
public GameObject objetivo;

void Update () {
//La posición de la luz será la misma que la que habíamos dicho antes, pero ahora estará vinculada con la posición del personaje para que lo siga.
transform.position = new Vector3 (objetivo.transform.position.x, objetivo.transform.position.y + 5, objetivo.transform.position.z – 5);
}
}

Se lo añadimos a nuestra SpotLight y luego en objetivo le ponemos el cilindro y con esto ya tenemos que la luz siga al personaje.

Si te has quedado sin entender algo puedes preguntarnos en los comentarios, además de descargar el proyecto del tutorial aquí