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?
- Ganas
- Unity
- Visual Studio (editor de codigo)
- 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);
}
}
}
Programación con Unity Para dummies
By fernando quinteros gutierrez
Programación con Unity Para dummies
- 123