Introducción a Unity
Transcripción
Introducción a Unity
VIDEOJUEGOS 2 Introducción a Unity Introducción a Unity V2 Puntos a tratar • • • • • • • Entorno Unity Assets Escena Objetos y componentes Unity Script Eventos de entrada Adaptación a dispositivos móviles Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !2 V2 Introducción a Unity Motor Unity • Motor genérico para la creación de videojuegos • Enfocado hacia el desarrollo casual • Permite un desarrollo rápido de videojuegos http://unity3d.com • Se puede crear un videojuego sin escribir código • Cuenta con su propia herramienta de edición integrada • Dos tipos de licencia: Free (limitada) y Pro ($1.500) • Soporta gran cantidad de plataformas Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !3 V2 Introducción a Unity El editor Escena / Juego Inspector Árbol de la escena Assets Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !4 V2 Introducción a Unity Assets • Dentro del proyecto tenemos una serie de assets (recursos) • Algunos tipos de assets utilizados son • Escenas del juego: Es el tipo principal de asset. Cada nivel del juego se guarda en un asset de tipo escena. • Mayas: Geometría 3D que podemos añadir a la escena. Podemos importar modelos con animaciones (FBX, OBJ, 3DS, etc). • Materiales: Definen el aspecto que le podemos dar a una maya (textura, color, sombreado, etc). • Scripts: Permiten personalizar el comportamiento de los objetos del juego mediante programación. • Clips de audio: Músicas y efectos de sonido. • Podemos importar paquetes de assets predefinidos Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !5 V2 Introducción a Unity Escena • Cada nivel del juego se almacena en un asset de tipo escena • La escena contiene un árbol de objetos (Game Objects) • Unity sigue una arquitectura basada en componentes • • • • • • Dentro de la escena tenemos únicamente Game Objects Los objetos no se definen por su tipo (todos son Game Objects) Lo que define a los objetos son los componentes que contienen Podemos añadir varios componentes a cada Game Object Los componentes definen la forma de actuar del objeto Ejemplos: Una cámara es un Game Object con un componente Camera Un Game Object con un componente Light ser comportará como una fuente de luz Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !6 V2 Introducción a Unity Añadir objetos • Podemos crear distintos tipos de Game Objects predefinidos en el menú GameObject • Llevan ya una serie de componentes ! • Si creamos un Empty Game Object sólo tendremos un componente Transform • Útil para agrupar objetos ! • Podemos agrupar objetos bajo un mismo nodo arrastrando y soltando ! • Podemos renombrar Game Objects en la vista Hierarchy (click sobre el nombre) Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !7 V2 Introducción a Unity Formas básicas • Podemos crear nodos con formas geométricas básicas • • • • Planos Cubos Esferas Cilindros ! • Estos objetos incorporan una serie de componentes • • • • Transform (posición y orientación) Renderer (material) Mesh (maya geométrica) Collider (geometría de colisión) Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !8 V2 Introducción a Unity HUD • Podemos añadir capas 2D a la pantalla • Para ello contamos con los componentes • GUITexture • GUIText ! • En estos casos la posición del objeto en el que se encuentran se da en coordenadas 2D relativas de pantalla • (x,y) entre (0,0) y (1,1) • (0,0) representa la esquina superior izquierda • (1,1) representa la esquina inferior derecha Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !9 V2 Introducción a Unity Cámara • Objeto con componente Camera • Permite configurar los parámetros de la cámara • Podemos definir varias cámaras en la escena • Podemos añadir un componente Camera a nuestro personaje (FPS) • Al seleccionar una cámara vemos el preview • Componentes comunes en la cámara GUI Layer La interfaz se dibuja sobre la vista de la cámara Flare Layer Se muestra un destello sobre la imagen Audio Listener Escucha las fuentes de audio de la escena y reproduce el sonido a través de los altavoces, sólo debe haber uno en la escena Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !10 V2 Introducción a Unity Audio • Para reproducir audio necesitaremos un Game Object con un componente Audio Source • Podemos añadirlo a la cámara para oirlo siempre igual • Podemos añadirlo a objetos del escenario para que el volumen cambie según la distancia ! • Añadiremos el clip de audio a reproducir como asset del proyecto • Especificaremos dicho asset en el componente Audio Source Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Las fuentes de audio serán “escuchadas” desde el Audio Listener de la escena. Esto será lo que oiremos a través de los altavoces Introducción a Unity !11 V2 Introducción a Unity Luces • Objeto con componente Light • Encontramos distintos tipos de luces predefinidas ! ! ! ! ! • Podemos configurar diferentes parámetros • Color • Intensidad • Distancia Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !12 V2 Introducción a Unity Opciones globales de render • En el menú Edit > Render Settings • Permite configurar por ejemplo la luz ambiente de la escena Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !13 V2 Introducción a Unity Navegar por la escena • Podemos utilizar diferentes combinaciones de teclado para navegar por la escena 3D en el editor • • • • Seleccionamos el icono Desplazamiento lateral: Click y arrastrar Zoom: Ctrl + Click y arrastrar / Rueda del ratón Rotación: Alt + Click y arrastrar. Podemos usar el gizmo ! • Iconos • Seleccionar un objeto: Click sobre el objeto Podemos ver sus propiedades en el inspector • Mover, rotar o escalar el objeto: Click sobre el objeto y arrastrar Podemos aplicar la transformación sólo sobre un eje Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !14 V2 Introducción a Unity Prefabs • Los prefabs son un tipo de asset • Definen un prototipo de game object • Podemos crear varios game objects de dicho tipo arrastrando el prefab sobre la escena ! • Crearemos un prefab con Assets > Create > Prefab • Arrastramos un game object existente sobre el prefab para utilizarlo como prototipo • Todos los objetos de la escena creados a partir del prefab aparecen en azul • Indica que están vinculados a él • Si cambiamos el prefab, todos cambian Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !15 V2 Introducción a Unity Scripts • Los scripts son un tipo de assets • Permiten personalizar el comportamiento de los objetos mediante programación ! • Se añaden como componente a los objetos • Cuando un Game Object tiene un componente script, este código se ejecuta sobre el objeto ! • Se pueden utilizar diferentes lenguajes • UnityScript (basado en Javascript) • C# • Boo Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !16 V2 Introducción a Unity Paquetes de assets • Podemos importar paquetes de assets • Unity incorpora una serie de assets predefinidos • Menú Assets > Import Package ! • Algunos ejemplos: Scripts Smooth Camera Character Controllers Seguimiento de cámara en tercera persona Scripts para manejo de personajes Render Vegetación Videojuegos II Agua © 2013-2014 Depto. Ciencia de la Computación e IA Skyboxes Introducción a Unity !17 V2 Introducción a Unity Controlador de personajes predefinido • Importamos assets del paquete Character Controller • Añadimos sobre un nodo el componente Third Person Controller • Es configurable desde el inspector • Podremos manejar el personaje con • W,A,S,D: Moverse • Espacio: Saltar • Shift: Correr • Existen otros tipos de controladores • FPS Input Controller • Platform Input Controller Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !18 V2 Introducción a Unity Creación de scripts • Se crean como assets de tipo script ! • Podemos editarlos con la herramienta integrada MonoDevelop ! ! ! ! ! ! ! • La herramienta a utilizar se puede configurar en Preferences … > External Tools Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !19 V2 Introducción a Unity Añadir un script a un objeto • Una vez creado un script, podemos añadirlo como componente a un Game Object ! ! ! ! ! ! ! • Tras esto, lo veremos en la lista de componentes del Game Object Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !20 V2 Introducción a Unity Estructura de un script • La estructura básica de un script UnityScript es ! #pragma strict ! ! function Start () { ! ! } ! ! function Update () { ! ! } ! • Start() nos permite inicializar el nodo • Awake() se ejecuta justo antes (útil para dependencias) • Update() actualiza el nodo (su frecuencia depende del framerate) • LateUpdate() se ejecuta justo después (para dependencias) Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !21 V2 Introducción a Unity Acceso a las propiedades el objeto • Desde el código del script se accede a propiedades del Game Object al que pertenece • Encontramos estas propiedades como variables implícitas • Si el objeto no dispone del componente correspondiente, la variable tendrá valor null transform renderer audio camera light Transformación del nodo en la escena Permite cambiar el material del objeto Acceso al componente Audio Source Permite configurar la cámara Permite configurar una fuente de luz function Start () { transform.position = Vector3(0,0,5); } Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Inicializa el nodo en una posición Introducción a Unity !22 V2 Introducción a Unity Interfaz del script • Podemos definir variables globales en el script ! #pragma strict ! ! var posicionInicial : Vector3; ! ! function Start () { transform.position = posicionInicial; } ! ! ! • Estas variables aparecen como parámetros en el entorno • Hacen el script reutilizable Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !23 V2 Introducción a Unity Polimorfismo en Unity • Si creamos una variable cuyo tipo corresponde a un componente, podremos asignar a ella cualquier Game Object que incorpore dicho componente ! • Por ejemplo, creamos una variable pública target de tipo Transform ! var target : Transform; ! • Podremos asignar a ella cualquier Game Object con un componente Transform Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !24 V2 Introducción a Unity Acceso a los componentes • Podemos acceder a otros componentes que no se encuentran entre los objetos implícitos del script • Utilizamos GetComponent(TipoComponente) ! var t : Transform; t = GetComponent(Transform); var s : OtroScript; s = GetComponent(OtroScript); Equivalente a utilizar la variable implícita transform Nuestros scripts son considerados componentes ! ! • Atributos @script • Permiten definir cómo se utilizará el script en el entorno @script RequireComponent(OtroScript) Obliga a añadir OtroScript al objeto @script AddComponentMenu("Controlador/Cube Script") Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !25 V2 Introducción a Unity Buscar objetos • Los objetos tienen nombre y etiqueta • Propiedades name y tag ! • Podemos realizar búsquedas de objetos • Búsqueda por nombre ! var techo : GameObject = Find("Techo"); ! • Búsqueda por etiqueta var enemigo : GameObject = FindWithTag("enemigo"); var enemigos = FindGameObjectsWithTag("enemigo"); for(var enemigo : GameObject in enemigos) { ... } Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !26 V2 Introducción a Unity Creación y destrucción de objetos • Podemos instanciar un nuevo objeto • Se instancia mediante la clonación del objeto proporcionado • Útil para la creación de proyectiles ! ! var clone : Proyectil; clone = Instantiate(proyectil); • Destrucción de objetos • El objeto se destruye y se elimina de la escena ! ! Destroy(enemigo); Destroy(this); ! • Puede aplicarte a cualquier tipo de objetos (Game Objects, componentes, etc) Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !27 V2 Introducción a Unity Eventos de entrada (I) • El objeto Input nos permite acceder a la entrada • Está preparado para entrada en dispositivos móviles • En Input Manager definimos controles virtuales • Se accede mediante Edit > Project Settings > Input • Cada control tiene una tecla por defecto • El usuario podrá configurarlo if(Input.GetButton("Fire1")) { // ¡Disparar! } Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !28 V2 Introducción a Unity Eventos de entrada (II) • Podemos leer un eje y actualizar la posición del personaje ! ! ! function Update () { var delta : float = Input.GetAxis("Horizontal") * Time.deltaTime; transform.Translate(Vector3(0,delta,0)); } • Posición del ratón ! Input.mousePosition • Botones del ratón ! Input.GetMouseButton(0 | 1 | 2) • Teclado Input.GetKey(KeyCode.LeftArrow) Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !29 V2 Introducción a Unity Interfaz de usuario • La GUI se crea de forma programada en el método OnGUI() • El objeto sobre el que se aplica debe incorporar GUILayer • Suele ser la cámara ! • En dicho método al mismo tiempo se crean los objetos de la interfaz y se programa su respuesta function OnGUI() { if(GUI.Button(Rect(10,10,150,50), "Start")) { Debug.Log("Se ha pulsado el boton"); } } Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !30 V2 Introducción a Unity Dispositivos móviles • Unity permite desplegar el juego en plataformas móviles ! • Deberemos adaptar la interfaz a estos dispositivos ! • Detectamos el tipo de dispositivo utilizado if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.BB10Player || Application.platform == RuntimePlatform.WP8Player) { // Activar controles táctiles } Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !31 V2 Introducción a Unity Entrada de usuario en móviles • Podemos añadir entrada de la pantalla táctil y acelerómetro ! ! ! Aceleración en (x,y,z) Input.acceleration Lista de contactos en la pantalla Input.touches ! ! • Podemos recorrer la lista de contactos • Comprobar su estado • Leer sus coordenadas for (var touch : Touch in Input.touches) { if (touch.phase != TouchPhase.Began) { var pos : Vector2 = touch.position; } } Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !32 V2 Introducción a Unity Controles en pantalla • Importamos el paquete Standard Assets (Mobile) • Añadimos el prefab Dual Joysticks a la escena • Se trata de objetos GUITexture vinculados a un script (tipo Joystick) • Definiremos una variable de entrada Joystick en el script de nuestro personaje ! var moveJoystick : Joystick; • Vinculamos uno de los joysticks con dicha variable ! ! • Leemos la entrada de él al actualizar la escena function Update () { var delta : float = moveJoystick.position.y * Time.deltaTime; transform.Translate(Vector3(0,delta,0)); } Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !33 V2 Introducción a Unity Desplegar en móvil • Abrimos la pantalla Build Settings • File > Build Settings ! • Seleccionamos la plataforma y pulsamos Switch Platform ! • Añadimos las escenas que queramos desplegar en el cuadro superior ! • Pulsamos Build para generar el proyecto Videojuegos II Necesitaremos abrir el proyecto en el entorno correspondiente (Xcode, Eclipse, …) © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !34 V2 Introducción a Unity Unity Remote • La aplicación Unity Remote nos permite probar en móviles vía streaming de forma cómoda • Podemos descargarla de forma gratuita en cualquier plataforma • El móvil deberá estar en la misma red que el ordenador con Unity ! • Cargamos la aplicación Unity Remote en el móvil • Detectará los ordenadores con Unity activo • Seleccionamos el ordenador al que conectar • En ese ordenador pulsamos Play para reproducir el juego en el móvil Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !35 V2 Introducción a Unity ¿Preguntas...? Videojuegos II © 2013-2014 Depto. Ciencia de la Computación e IA Introducción a Unity !36