sábado, 13 de febrero de 2016

MI PRIMER SCRIPT EN UNITY

Este texto puede ser difícil. Inténtalo, pero si no puedes con él, prueba con este tutorial.  De todos modos aunque no lo entiendas está bien que lo hagas y lo veas funcionar. Luego irás viendo otros ejemplos y lo irás entendiendo

https://www.youtube.com/watch?v=6LiGV5C5B2s

En los proyectos de scratch los objetos podían tener un programa, es decir, una serie de instrucciones que tenían que seguir. Aquí también. La diferencia es que en scratch las instrucciones se elegían de una lista y se arrastraban. Aquí se escriben. Para eso hace falta otro programa, un editor, que suele venir con el Unity. Normalmente es mono develop o visual studio.

Vamos a volver al proyecto de las bolas. Ábrelo y borra todas las bolas menos una. Haz las paredes más bajas para que se pueda ver el movimiento de la bola, y desplaza la bola hacia abajo a la altura del suelo.

El script se puede escribir en dos lenguajes: javascript o C# (pronunciado C Sharp) Nosotros usaremos C#.

Ve al menú assets y crea un script C# llamado Bola. Arrástralo al objeto bola para asignárselo. Haz doble click sobre el script y se abrirá el editor (tarda un buen rato). Se verá algo así. ¡Es muy importante que se llame public class Bola! Si por defecto no pone es nombre, tienes que ponerlo tú.

using UnityEngine;
using System.Collections;

public class Bola : MonoBehaviour {

       // Use this for initialization
       void Start () {
      
       }
      
       // Update is called once per frame
       void Update () {
      
       }
}

Todo esto que hay escrito aquí es como si en el Scratch hubiera escrito esto:


void Start () {
      
       }

Es una parte del programa que se ejecuta al empezar. Como el primer bucle del scratch que se ejecuta una sola vez al principio.No hay nada escrito entre las llaves, así que por ahora no hace nada.

void Update () {

}

Se ejecuta una y otra vez. Es como el bucle por siempre de scratch:

Otra cosa que debes recordar de Scratch son las variables. En unity hay muchos tipos de variables. Al igual que en Scratch tienes que crear la variable, aquí tienes que declararla, que es lo mismo.

En Scratch la variable podía ser para un solo objeto o para todos. Aquí es igual. Es Public o private. Hay varios tipos: float es un número con decimales, int es un número sin decimales.

Por ejemplo:

using UnityEngine;
using System.Collections;

public class Bola : MonoBehaviour {
public float a;

       // Use this for initialization
       void Start () {
       a = 1;
       }
      
       // Update is called once per frame
       void Update () {
      
       }
a = a +1;
}

Hemos declarado una variable pública que se llama a, y es de tipo float. Al comenzar el programa, a vale 1, y cada vez que se ejecuta el update, cada ciclo, cada frame, aumenta su  valor en 1.
Una variable puede ser un componente. Por ejemplo el rigidbody, el material o el transform. 

En C#, cada vez que aparece un texto que tiene delante estos símbolos // quiere decir que el programa no los lee. Son comentarios. Por ejemplo algo que yo puedo escribir en un programa para que tú entiendas lo que hace una línea. O algo que tú escribes para acordarte después o para poder entender mejor el programa. También puedes poner comentarios entre los signos /* y */Voy a explicar el siguiente programa por medio de comentarios.



using UnityEngine;
using System.Collections;

public class Bola : MonoBehaviour {
             private Rigidbody rigidBody;/*declaro una variable tipo Rigidbody llamada
             rigidbody*/
       // Use this for initialization
       void Start () {
             rigidBody = GetComponent();/*Toma el rigidbody del objeto
             al que pertenece este script (la bola) y lo asigna a la variable
             rigidBody"
       }
      
       // Update is called once per frame
       void Update () {
      
       }
       void FixedUpdate(){/*igual que el update pero para el rigidbody*/
             rigidBody.adForce(0,0,10);/*añadimos una fuerza de 10 en z al rigidbody*/
       }

}

1. Proyecto bola que bota con una fuerza

Haz una bola que bota en una caja y añádele una fuerza como en el ejemplo anterior.

2. Proyecto empujando la bola con las teclas

La función input.GetAxis("Horizontal") vale cero si no has pulsado la tecla predefinida para horizontal. Puedes ver la tecla definida, o cambiarla en edit, project settings, input.

Un Vector3 es un conjunto de valores (x,y,z) que pueden ser las coordenadas de un punto, una velocidad o una fuerza. Aquí lo vamos a usar como fuerza.

void FixedUpdate()
    {
        float movimientox = Input.GetAxis("Horizontal");
        float movimientoz = Input.GetAxis("Vertical");
     
        Vector3 fuerza =new Vector3(movimientox 0, movimientoz);
        rigidBody.AddForce(fuerza);
    }

3. Proyecto disparos

Vamos a hacer un objeto que dispara otros objetos. Un cubo que escupe otros cubos. Luego podrás modificar esto para hacer un personaje que dispara, unos marcianos o algo similar.

Lo explico por escrito, pero el tutorial que voy a seguir es este:

https://www.youtube.com/watch?v=XErqdGOxMKA

Vamos paso a paso:

1, Crea un nuevo objeto prefab dentro de la pestaña project y arrástralo a la pestaña hierarchy, crea un objeto cubo y arrástralo dentro de prefab. Ahí lo que estás haciendo es creando una clase de objetos (cubos) de manera que cuando digas de crear uno nuevo, puedas decirle al programa qué tipo de objeto será, en este caso cubo. Oculta el objeto pulsando en la casilla de selección junto a su nombre en el transform. Crea un componente physics con gravedad en el prefab.

2. Crea un nuevo objeto empty en las coordenadas (0,0,0). Este va a ser el objeto que cree (instancie) los cubos, así que lo llamaremos Creator. Oculta el objeto pulsando en la casilla de selección junto a su nombre en el transform.

3. Crea un nuevo script llamado Creator y arrástralo hacia el objeto Creator para asignárselo. Si no te deja es porque el nombre no es adecuado. Entonces ábrelo y cambialo, de manera que ponga

public class Creator : MonoBehaviour {

Algunos editores de programa hacen esto automáticamente y otros no, tendrás que comprobarlo.

4. Creamos una variable tipo objeto. Ponemos la siguiente instrucción justo antes del start 

public GameObject Prefab;

5. Dentro del start introducimos: 

Instantiate(Prefab, transform.position, transform.rotation);

Instantiate es una instrucción que crea un objeto, o una instancia. Una instancia es lo mismo que un objeto, pero la palabra instancia quiere decir algo así como un individuo de una clase. Por ejemplo, definimos la clase bola, con las características de la bola, y cuando creamos una bola, decimos que estamos creando una instancia de la clase bola. Un individuo.

Los parámetros que necesita la función Instantiate son en primer lugar un prefab, que dirá qué tipo de objeto estamos creando (instanciando). En este caso será el prefab que hemos creado, y por lo tanto será un cubo. El segundo parámetro será la posición donde lo vamos a crear. Que en este caso será la misma del objeto creator, que es el objeto que está ejecutando el programa, de manera que será el propio transform.position, y lo mismo ocurre con el siguiente parámetro que es la rotación del objeto que vamos a crear.

6. Ahora la escena está vacía, pero al ejecutarse el programa y crearse la instancia aparecerá un objeto cubo. Ejecuta el programa.

Aunque parezca simple lo que hemos hecho, hemos aprendido a crear objetos desde el programa. Esto es importante.

7. Si metes la instrucción en el update, debe crear muchos cubos que irán cayendo


PROCESSING

Puedes seguir aprendiendo a programar viendo vídeos sobre Unity, o puedes aprender processing en este enlace 

0 comentarios: