Introducción A Unity v1.0 Por César Guerra

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 62

Introducción a Unity

www.cesarguerra.mx V1.0
Ing. En Computación – UNACAR
Mtro. En Dirección de Ingeniería de Software – IEU

Acerca de Fanático de las tecnologías y los nuevos retos:


César Guerra Agente de cambio ágil, diseñador, desarrollador,
project manager y entre ratos gamer.

www.cesarguerra.mx
[email protected]
@warderer
cesar.guerra.mx
www.cesarguerra.mx

 Fundamentos de Unity
Contenido
 Instalación
 Creando nuevos proyectos
 Interfaz
 Programación con C#
Fundamentos de Unity
www.cesarguerra.mx

V1.0
www.cesarguerra.mx

¿Qué es Unity?
Unity es una plataforma
de desarrollo de
videojuegos.
Usada para crear juegos
3D y 2D, desplegarlos a
través de dispositivos
móviles, escritorio,
VR/AR, consolas o la
web.
www.cesarguerra.mx

¿Qué es Unity?
Unity esta disponible
para desarrollar desde
plataformas Windows,
Mac OS y Linux.
www.cesarguerra.mx

Interoperabilidad
de Unity
Unity puede usarse
junto con Blender, 3ds
Max, Maya, Softimage,
Modo, ZBrush, Cinema
4D, Cheetah3D, Adobe
Photoshop, Adobe
Fireworks y
Allegorithmic
Substance.
www.cesarguerra.mx

Proyectos
Destacados
Cup Head
www.cesarguerra.mx

Proyectos
Destacados
FireWatch
www.cesarguerra.mx

Proyectos
Destacados
Super Mario Run
www.cesarguerra.mx

¿Cómo consigo
Unity?
Se descarga a través de
su sitio web, haciendo
clic en el enlace de
“Obtener Unity”.
Nota: Es necesario crear
una cuenta de Unity
para poder utilizar la
herramienta.

https://unity3d.com/es
www.cesarguerra.mx

Licenciamiento
Plan Personal: Gratuito e ideal
para aprender. Podemos usarlo
si facturamos menos de 100 mil
USD anuales.
Plan Plus: Costo mensual, con
más herramientas. Se debe de
facturar anualmente menos de
200 mil USD para poder acceder
a este plan.
Plan Pro: Costo mensual, aún
más herramientas. Si
facturamos más de 200 mil USD,
debemos usar este plan.

www.cesarguerra.mx
www.cesarguerra.mx

Cuenta de Unity
La creación de la cuenta de
Unity puede hacerse desde la
página web de Unity o bien al
abrir por primera vez la
aplicación.

www.cesarguerra.mx
Para ejecutar
www.cesarguerra.mx
Para desarrollo
OS: Windows 7 SP1+, 8, 10, solo versiones de 64 bits; Mac
OS X 10.9+.
juegos de Unity
Por lo general, el contenido desarrollado con Unity
No se han probado las versiones de servidor de Windows puede ejecutarse bastante bien en todas partes.
& OS X. Qué tan bien se ejecuta depende de la complejidad
CPU: Soporte para el conjunto de instrucciones SSE2.

Requerimientos
de su proyecto. Requisitos más detallados:
GPU: Tarjeta de video con capacidad para DX10 (shader Escritorio:
modelo 4.0). OS: Windows Vista SP1+, Mac OS X 10.9+,

Técnicos
El resto depende principalmente de la complejidad de sus Ubuntu 12.04+, SteamOS+.
proyectos. Tarjeta de video con capacidad para DX10
(shader modelo 4.0).
CPU: compatible con el conjunto de
Requisitos adicionales para el instrucciones SSE2.
El reproductor de iOS requiere iOS 7.0 o una versión
desarrollo de plataformas: superior.
Android: OS 4.1 o posterior; ARMv7 CPU con
•iOS: Computadora Mac con sistema operativo versión OS
X 10.9.4 como mínimo y Xcode 7.0 o superior. soporte NEON o CPU Atom; OpenGL ES 2.0 o
•Android: Kit de desarrollo Android SDK y Java (JDK); el posterior.
IL2CPP scripting backend requiere Android NDK. WebGL: Cualquier versión de escritorio reciente de
•Windows Store: Windows 10 (64 bits) y Visual Studio y Firefox, Chrome, Edge o Safari
plataforma SDK correspondiente: Windows Store Apps: Windows 10 y tarjeta de video
•Universal Windows Platform (UWP): Windows 10 con capacidad para DX10 (shader modelo 4.0).
(64 bits), Visual Studio 2015 o posterior y Windows
10 SDK;
•El scripting backend IL2CPP también requiere la
instalación de la función de compilador C++ con
Visual Studio.

https://unity3d.com/es/unity/system-requirements
Instalación
www.cesarguerra.mx
www.cesarguerra.mx

Unity Download
Assistant
Es la herramienta que nos
permitirá descargar e instalar
Unity y sus componentes.
Debemos seleccionar aquellos
componentes que tengan
sentido para la plataforma que
planeamos desarrollar.
www.cesarguerra.mx

Unity Download
Assistant
Podemos elegir si queremos
descargar el instalador de Unity
de manera temporal y borrarlo
después de instalarlo.
O bien:
Que guarde una copia del
instalador en el disco duro.
www.cesarguerra.mx

Unity Download
Assistant
Archivos descargados en nuestro disco
duro.
www.cesarguerra.mx

Activación de
Unity
Después de instalar Unity, la
primera vez que lo usemos
nos pedirá activación,
bastara con entrar con la
cuenta previamente creada y
elegir que usaremos la
licencia personal.
Este proceso requiere
conexión a internet. En caso
contrario podemos optar por
una activación Manual
(offline)
Creando nuevos proyectos
www.cesarguerra.mx
www.cesarguerra.mx

Creación de un
nuevo Proyecto
Es importante especificar
la ruta donde se guardará
físicamente el proyecto e
indicar si lo que haremos
será de tipo 2D o 3D.
Es recomendable no usar
espacios en blanco en el
nombre del proyecto.
www.cesarguerra.mx

Proyecto

Esquema de
Trabajo de Unity
Un proyecto puede
contener varias escenas.
La lógica del juego nos
Escena 1 Escena 2 Escena N
permitirá movernos entre
diferentes escenas (o
niveles).
Los materiales, scripts de
programación y
elementos del ambiente
forman parte de una
escena.
Materiales Scripts Ambiente
Interfaz
Primeros Pasos y Opciones Habituales
Interfaz General de Unity
www.cesarguerra.mx

Toolbar: Acceso a herramientas básicas como manipular la


scene view y los objetos dentro de esta; los controles de
reproducción, pausa, y pasos; capas, cuenta etc.
Scene View: Escenario virtual donde colocaremos los
objetos.
Interfaz Project Window: Muestra assets de librería que están
disponibles para ser usados en una o más Escenas. Son
Principales Elementos
archivos físicos.
Hierarchy Window: Es una representación jerárquica de cada
objeto en la escena. Podria decirse que son “las instancias” de
lo que tenemos en el Project Window.
Inspector Window: Panel que muestra todas las propiedades
del objeto actualmente seleccionado. Ya que diferentes
objetos tienen diferentes propiedades, el layout (diseño) y
contenido de la ventana del inspector puede variar.
www.cesarguerra.mx

Escena (Scene)
Nuestro escenario virtual donde
colocaremos los objetos visuales.
www.cesarguerra.mx

Movimiento en
Escena (Scene)
Paneo (Click Central)
Rotación (Click Izq. +
Mov. Raton)
Zoom (Scroll del Raton,
Arriba y Abajo)
www.cesarguerra.mx

Escena (Scene)
Vistas
• Perspectiva: Con noción de
profundidad.
• Isográfica: Sin noción de
profundidad.
www.cesarguerra.mx

Juego (Game)
Es el modo de “Ejecución” de
nuestra aplicación.
En este modo podremos
previsualizar como “corre”
nuestra aplicación para probar.
También se ejecutan los scripts
y entran en juegos los hilos de
ejecución en Unity.
www.cesarguerra.mx

Game Objects
Los GameObjects son objetos
fundamentales en Unity que
representan personajes, props,
y el escenario.
Estos no logran nada por sí
mismos pero funcionan como
contenedoras para
Components, que implementan
la verdadera funcionalidad.
www.cesarguerra.mx

Game Objects
(Primitivas 3D)
Son los objetos básicos
tridimensionales en Unity.

Contiene elementos como cubos,


esferas, cilindros, capsulas, planos, etc.
www.cesarguerra.mx

Camera
Sirven para mostrar el mundo
que hemos creado al
espectador o jugador.
Siempre debemos tener al
menos una cámara. Aunque
podemos tener más de una e ir
alternando vistas o mostrando 2
diferentes (ejemplo: pantalla
compartida en juegos
cooperativos).
www.cesarguerra.mx

Clipping Planes
en Camaras
Los Clipping Planes en las Camaras
tienen que ver con la Distancia de
Visión.

En Near configuramos que tan cerca


puede estar un objeto de la cámara
antes que desaparezca.

En Far configuramos que tan lejos


puede ver objetos nuestra cámara.

La correcta configuración de los


Clipping Planes influyen tanto en la
experiencia de juego/usuario así como
en el rendimiento del mismo.
www.cesarguerra.mx

Pivotes
Manteniendo pulsada la tecla V
movemos temporalmente el Pivote.

Los pivotes de los objetos se suelen


colocar en la parte de abajo (piso)

Los pivotes se definen desde el


programa de modelado, no
directamente en Unity.

Si queremos ajustar el Pivote en Unity,


es necesario colocar el objeto dentro
de un Empty (contenedor) y
manipularlo desde el contenedor.
www.cesarguerra.mx

Sección Proyecto
(Project)
Contiene toda la información
“física” de nuestro proyecto.
PRECAUCIÓN: SI
BORRAMOS UN ASSET, LO
BORRAMOS DEL DISCO
DURO.

Por defecto todos los


elementos se colocan dentro
de la carpeta “Assets”.
www.cesarguerra.mx

Sección Proyecto
(Project)
La información de Project
puede ser utilizado en uno o
más escenarios.

Es recomendable usar
carpetas y archivos con
nombres en inglés y
convención CamelCase.
www.cesarguerra.mx

Assets
Un asset es una
representación de cualquier
item que puede ser utilizado
en un proyecto de Unity.
Un asset podría venir de un
archivo creado afuera de
Unity, tal como un modelo
3D, un archivo de audio, una
imagen, o cualquiera de los
otros tipos de archivos que
Unity soporta.
www.cesarguerra.mx

Prefabs
Es un asset que almacena un objeto
GameObject con componentes y
propiedades.

El prefab actúa como una plantilla a


partir de la cual se pueden crear
nuevas instancias del objeto en la
escena.

Cualquier edición hecha a un prefab


asset será inmediatamente reflejado
en todas las instancias producidas por
él, pero, también se puede anular
componentes y ajustes para cada
instancia individualmente.
Prefab con ajuste personalizado.
www.cesarguerra.mx

Jerarquía
(Hierarchy)
Es donde podremos visualizar en
formato de texto todos los elementos
presentes en nuestro Escenario actual.
www.cesarguerra.mx

Sección
Jerarquía
(Hierarchy)
Una buena práctica consiste en tener
una jerarquía estandarizada y
entendible para organizar nuestra
jerarquía. Cámaras de nuestra escena.
Objetos creados en ejecución.
Hacerlo nos permitirá trabajar mejor Interfaz de Usuario.
con proyectos complejos.
Scripts
Adicionalmente nos permitirá Luces
compartir el proyecto y que sea más Objetos del mundo
fácilmente entendible por otra
persona. Estructuras
Objetos
Tierra/Superficies
www.cesarguerra.mx

Materiales
(Materials)
Los materiales contienen la
información de color/textura e
iluminación.

Pueden ser reutilizados y reaplicados a


varios objetos en el proyecto.

Para crearlos, en nuestra ventana de


proyecto, hacer clic derecho,
seleccionar la opción Create y
posteriormente Material.
www.cesarguerra.mx

Materiales
(Materials)
En un Material de Shader Standard:

Albedo nos dará el color del material o


bien la textura base.

Metallic indicará la reflectividad de la


superficie y puede tomar el color del
Albedo.
www.cesarguerra.mx

Iluminación
(Illumination)
Terminología
Surface: Todos los triangulos que
component todas las mallas en la
escena, son llamadas Superfie
(surface).
Emitted Light: Es la luz emitida
directamente en la superficie de la
escena.
Direct Light: Es la luz emitida que llega
a una superficie de la escena y es
reflejada hacia un sensor (ejemplo: la
retina del ojo o una camara).
Indirect Light: Es una luz emitida, que
llega a una superficie de la escena al
menos 2 veces y es reflejada al sensor.
www.cesarguerra.mx

Iluminación
(Illumination)
La iluminación puede darse en 2
modos:
Realtime: Iluminación que se
genera en tiempo real en
ejecución de la aplicación.
Baked: Se precalcula la
iluminación antes de la
ejecución en tiempo real. Útil
para mejorar el rendimiento e
iluminar ciertas regiones. Como
desventaja no genera sombras
en tiempo real ni tiene specular.
www.cesarguerra.mx

Iluminación
(Illumination)
Existen 4 tipos fundamentales de Directional Spot
iluminación:

Directional

Spot

Point

Área (Baked)
Point Area (Baked)
www.cesarguerra.mx

Iluminación
(Illumination)
Podemos modificar el
Material del cielo (e
información de iluminación)
de la escena desde la
ventana:
Window -> Lighting ->
Settings
Programación con C#
www.cesarguerra.mx
www.cesarguerra.mx

Cambiando el
editor por
defecto
Es recomendable usar MonoDevelop
como editor de código por defecto
para Unity.

Para cambiar este comportamiento,


hay que ir al menú Edit, luego a
Preferences.

En la ventana de Unity Preferences, ir


a la sección de External Tools y elegir
MonoDevelop (built-in) en la opción
de External Script Editor.
www.cesarguerra.mx

MonoDevelop
MonoDevelop es un entorno de
desarrollo integrado (IDE) libre y
gratuito.

Nos permite trabajar con el lenguaje


C#, que es el por defecto usado en
Unity.

Viene incluido dentro de las opciones


a instalar en Unity.

Resulta más ligero y práctico que


utilizar Visual Studio.
www.cesarguerra.mx

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyFirstScript : MonoBehaviour {
Script Vacío // Use this for initialization
Cuando en Unity creamos un nuevo
Script, el archivo viene con un
void Start () {
contenido base como el siguiente.
}
// Update is called once per frame
void Update () {
}
}
www.cesarguerra.mx

:MonoBehavior
La clase MonoBehaviour es una de
las principales de las API de Unity.

Todos los scripts vinculados a objetos


(en el caso de Unity son GameObjects)
deben derivar de esta clase para poder
aprovechar eventos y funciones útiles
para la manipulación de elementos de
nuestro proyecto.

Si quitamos
MonoBehavior, ya no
podemos acceder a
transform.
www.cesarguerra.mx
// Se ejecuta una vez. Ocurre en el frame en que el script es
habilitado. Se ejecuta ANTES de cualquier UPDATE. Útil para
inicializar variables.
void Start () {
Hilos de
}
Ejecución en
// Se ejecuta cada frame. Esto ocurre después del renderizado
Unity de los objetos. Es útil para realizar la mayoría del código de
comportamiento (movimientos, vida, controles, etc. ), ya que
Principales: puede comprobar o realizar acciones hasta que cierto criterio se
cumpla.
• Start void Update () {
• Update }
• Awake // Se ejecuta una vez. Ocurre justo después de instanciar un
prefab y antes de cualquier Start. Aunque este deshabilitado el
Script en el inspector de objetos, la ejecución de Awake ocurre.
void Awake () {

}
www.cesarguerra.mx

Adjuntando
scripts a
GameObjects
Un Script puede ser adjuntado a un
GameObject y este aparecerá en el
Inspector.

Para hacerlo, simplemente hay que


arrastrar y soltar el script hacia el
Inspector con el elemento deseado (ya
sea visualmente en Scene View,
textualmente en Hierarchy Window o
Inspector Window).
www.cesarguerra.mx
using UnityEngine;
using System.Collections;

Probando Hilos public class AwakeAndStart : MonoBehaviour {


de Ejecución
Start y Awake void Awake ()
{
Debug.Log("Aquí se llama a Awake."); Script activado
Mediante el siguiente código }
podemos comprobar cuando es
llamado cada elemento y en void Start ()
que orden. {
Debug.Log("Aquí se llama a Start.");
Podemos darnos cuenta que al }
deshabilitar el script en el
inspector, ya no se ejecuta Start, void Update (){
sin embargo Awake si que se Script desactivado
}
ejecuta.
}
www.cesarguerra.mx
using UnityEngine;
using System.Collections;

Probando Hilos public class AwakeAndStart : MonoBehaviour {


de Ejecución private float m_Counter;
Update void Awake ()
{
Modificaremos ligeramente el Debug.Log("Aquí se llama a Awake.");
Script para demostrar la }
ejecución de Update.
void Start ()
{
Debug.Log("Aquí se llama a Start.");
}
void Update (){
m_Counter = m_Counter + 1;
Debug.Log("Contador: " + m_Counter);
}
}
www.cesarguerra.mx

Hilos de
Ejecución en
Unity
Diagrama más completo de hilos de
ejecución.
www.cesarguerra.mx

Buenas prácticas
de
nomenclatura
de Variables
Como buena practica, usaremos un
prefijo para nombrar una variable:
m_
Seguido del nombre de la variable en
CamelCase:
MiVariable
Para al final obtener:
m_MiVariable
Si es variable publica, al ser colocado
en el Inspector, Unity omitirá el prefijo
y colocara los espacios al nombre de la
variable.
www.cesarguerra.mx

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Variables : MonoBehaviour {
Declaración de public string m_MiMensaje;
Variables private string m_VariablePrivada;
Principalmente usaremos
estos 2 tipos de variables: // Use this for initialization
void Start () {
Privada (Private): Donde la m_VariablePrivada = " solo Accesible dentro de la clase";
variable sólo puede ser Debug.Log(m_MiMensaje + m_VariablePrivada);
usada dentro de nuestra }
clase.
// Update is called once per frame
Pública (Public): Donde el void Update () {
valor de la variable puede
ser establecido desde el }
inspector del objeto que }
tiene el Script.
www.cesarguerra.mx
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateObject : MonoBehaviour {
Ejemplo: Script //Public Fields
de Rotación public float m_Velocity;
public Vector3 m_Direction;
Script que realiza la rotación de
un objeto, controlando gracias a // Use this for initialization
variables publicas la velocidad y void Start () {
dirección de la rotación.
}
// Update is called once per frame
void Update () {
transform.Rotate (m_Direction * m_Velocity * Time.deltaTime);
}
}
www.cesarguerra.mx
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TranslateObject : MonoBehaviour {
//public fields
public float m_Velocity;
public float m_MaxDistance;

Ejemplo: Script
public Vector3 m_Direction;
public bool m_GlobalOrientation;
//private fields
de Traslación private Vector3 m_Origin;
private bool m_isGoing;
// Use this for initialization
Script que realiza la traslación void Start () {
m_isGoing = true;
(desplazamiento) de un objeto }
m_Origin = transform.position;
en orientación global o local,
// Update is called once per frame
controlando la velocidad, void Update () {
dirección inicial del if (Vector3.Distance (m_Origin, transform.position) < m_MaxDistance) {
desplazamiento y distancia transform.Translate (
(m_Direction * (m_isGoing ? 1 : -1)) * m_Velocity * Time.deltaTime,
máxima, para al alcanzarla, (m_GlobalOrientation ? Space.World : Space.Self));
} else {
regresar hacia el punto de m_Origin = transform.position;
m_isGoing = !m_isGoing;
origen. }
}
}
www.cesarguerra.mx
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScaleObject : MonoBehaviour {
//public
public float m_MaxScale;

Ejemplo: Script
public float m_MinScale;
public float m_Velocity;
public bool m_ScaleX;
de Escala public bool m_ScaleY;
public bool m_ScaleZ;
// Use this for initialization
Incremento y decremento entre void Start () {
un rango de valores, a velocidad }
variable, multiplicando Time.tim
// Update is called once per frame
e por la variable m_Velocity y co void Update () {
ntrolando en que ejes se escala. //Tiempo que lleva ejecutandose el juego -> Time.time
float newScale = Mathf.PingPong (Time.time*m_Velocity, m_MaxScale -
m_MinScale) + m_MinScale;
// Uso de operadores ternarios, para validar en que ejes se incrementa.
float newScaleX = m_ScaleX ? newScale : transform.localScale.x;
float newScaleY = m_ScaleY ? newScale : transform.localScale.y;
float newScaleZ = m_ScaleZ ? newScale : transform.localScale.z;
transform.localScale = new Vector3 (newScaleX,newScaleY,newScaleZ);
}
}
Referencias
Unity3D: Awake and Start https://docs.unity3d.com/es/current/Manual/
CreatingComponents.html
https://unity3d.com/es/learn/tutorials/topics/
scripting/awake-and-start https://docs.unity3d.com/Manual/LightMode-
Baked.html
https://www.relaxate.com/tutorial-
documentacion-manual-programacion-
videojuegos-unity-2d-parte-2
https://www.deustoformacion.com/blog/dise
no-produccion-audiovisual/6-mejores-juegos-
3d-hechos-con-unity
https://docs.unity3d.com/es/current/Manual/
class-GameObject.html

También podría gustarte