Programación con Unity Para dummies

Fernando Quinteros Gutierrez

  • Estudiante de secundaria
  • Programador Full stack
  • Participante de GGJ 2018
  • Freelancer

Programación Con unity

¿Que necesito?

  1. Ganas
  2. Unity
  3. Visual Studio (editor de codigo)
  4. Matematicas y fisica

Spiderman 1

Spiderman ps4

Tranquilos, para lo basico se necesitan conocimientos basicos de las siguientes materias:

  • Matematicas
    • Suma,Resta,Multiplicacion y Divicion
    • Algebra (basica - ecuaciones)
  • Fisica
    • Vectores
    • Friccion (opcional)

Un poco de Unity

Vocabulario

  • GameObject (Abreviatura GO)
    • Es cualquier elemento el cual tiene propiedades en unity
  • Componente
    • Es una propiedad de un GameObject
  • script
    • Es un archivo de tipo codigo
  • Scene
    • Es el lugar donde podremos todos los GO

Algunos Componentes

  • Collider: Es un componente el cual hace que el GO se vuelva solida
  • RigidBody: Es un componente el cual hace que el GO tenga propiedades Fisicas como Gravedad y Peso

El flujo de trabajo en Unity

Variables

// Variables del lenguaje
//public = variables, son variables que se puden acceder desde cualquier lado
public int numero; //1 , 3 , 5
public float miDecimal; //1.5 , 6.8
public string palabra; // "palabra", "soy una oracion"
public bool boleano; // true, false
public int[] conjunto; // [1,5,8,8,7]
//private = variables privadas, tienen un cierto nivel de acceso
private string nombre;

//variables de Unity 
public GameObject personaje;
private Transform personajePosition;
public BoxColider caja;

Funciones

"Divide y venceras"

// funcion simple
public void saludo () {
    //las varaibles que creo dentro de funciones no puedo acceder desde otro lugar
    string saludo = "Hola"
    Debug.Log (saludo);
}

    saludo ();
    // Consola: Hola

    //mandando valores    
    public void saludoPersonalizado (string name) {
        Debug.Log ("Hola ",name);
}

saludoPersonalizado ("Fernando");
//consola: Hola Fernando

//retornando valores
public void saludoPersonalizado (string nombre) {
    return ("Hola ",nombre);
}
public string saludo = saludoPersonalizado ("Fernando");
// Funciones Propias de Unity
void Update () {
//se llama cada momento
}
void Start () {
    // se llama cuando comienza el programa
}
void Awake () {
    //se llama cuando damos a play
}
void OnEnable () {
    //se llama cuando el GO esta activado
}
void OnDisable () {
    //se llama cuando el GO esta desactivado
}
    //Funciones con Colliders
void OnMouseDown () {
    // se llama cuando el mouse hace click en el GO
}
void OnMouseOver() {
    //Cuando el mouse esta encima del GO
}

GameObjects

Existen Dos Tipos de GameObjects

El gameObject

El GameObject

Y

El gameObject

Hace referencia a si mismo, se usa para poder acceder a propiedades primitivas de un GO

void Start () {
    //imprimir el nombre
    Debug.Log (gameObject.name);
    //impirmir la poscicion x
    Debug.Log (gameObject.transform.position.x);
    //desactivar el GO
    gameObject.SetActive(false);
}

El GameObject

Es un objeto que contiene todos los GO de la escena. El cual nos sirve para poder localizar estos mismos.

public GameObject miCamara;
 void Start () {
    // Obtener el GO, mediante el Nombre
    miCamara = GameObject.Find("main camera");
    // Imprimir la posicion en el eje X
    Debug.Log(miCamara.transform.position.x);
}

Componentes

Unity Components

En Unity tenemos una buena cantidad de componentes para facilitarnos el desarrollo de un videojuego, los componentes nos pueden ayudar en diferentes usos como ser:

  • Aplicaciones de la fisica
  • Para el uso de audio

"Las propiedades de los Componentes son accecibles medidante codigo"

Tip: Es mejor siempre obtener componentes en la funcion Start

public BoxCollider miCaja;
private Transform positionBox = null;
void Start () {
    boxCollider = GetComponent<BoxCollider>();
    postionBox = GetComponent<Transform>();
    // llamar un vector 3d
    // new Vector (x,y,z)
    positionBox.position = new Vector3 (2,2,2);
}

Comunicación entre scripts

La comunicación entre scripts es una de las cosas más importantes en un videojuego, un ejemplo:

¿cómo podemos saber si el jugador choco contra una moneda?

Para poder comunicarnos lo que debemos hacer es lo siguiente

Script 1

Script 2

public class script1: MonoBehaviour {
    private contador script;
    private GameObject contador;
    void Start(){
        contador = GameObject.Find("contador");
        script = contador.GetComponent<contador>();
        script.aumentarMonedas();
    }
}
public class Contador: MonoBehaviour {
    public int monedas = 0;
    aumentarMonedas () {
        monedas++;
    }
}

Moviendo GameObjects

It´s simple

Pero estamos sumando cada vez que se refresca la imagen, lo que merma los FPS, en conclusión podemos decir que no esta bien optimizado.

public class Movimiento : MonoBehaviour {
    private Transform miTransform;
    public float speed;
    void Start() {
        miTransform = GetComponent <Transform>();
    }
    void Update() {
        miTransform.position += new Vector3 (0,0,1*speed * Time.deltaTime);
    }  
}
public class Movimiento : MonoBehaviour {
    private Transform miTransform;
    public float speed;
    void Start() {
        miTransform = GetComponent <Transform>();
    }
    void Update() {
         miTransform.Translate(Vector3.forward * speed * Time.deltaTime);
         miTransform.Rotate(Vector3.up * speed * Time.deltaTime);
    }  
}

funciones de Colliders

public class energia : MonoBehaviour {
    private void OnTriggerEnter(Collider other)
    {

        if (other.GetComponent<jugador>() != null)
        {
            Debug.Log(other.name);
        }
    }
    private void OnTriggerStay(Collider other)
    {
        if (other.GetComponent<jugador>() != null)
        {
            Debug.Log(other.name);
        }
    }
    private void OnTriggerExit(Collider other)
    {
        if (other.GetComponent<jugador>() != null)
        {
            Debug.Log(other.name);
        }
    }
}
Made with Slides.com