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.
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
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