You are on page 1of 548

Manual de Unity 3D

Trabajando con Unity

-1-
ndice de contenido
Manual de Unity.................................................................................................................................15
Fuentes adicionales de informacin..........................................................................................15
Problemas conocidos.................................................................................................................15
Versiones del manual..........................................................................................................................16
Versiones anteriores de la documentacin de Unity 5:.............................................................16
Versiones anteriores de la documentacin de Unity 4:.............................................................16
Versiones anteriores de la documentacin de Unity 3:.............................................................17
Nuevo en 5.3.......................................................................................................................................18
Documentacin para las nuevas caractersticas en 5.3:............................................................18
Trabajando con Unity.........................................................................................................................20
Bases de Unity....................................................................................................................................22
Descargando e Instalando Unity.........................................................................................................23
Asistente de Descarga de Unity.....................................................................................................23
Instalando Unity sin el Asistente de Descarga...............................................................................24
Instalando Unity en Windows desde lnea de comandos..........................................................24
Instalacin del Editor de Unity.................................................................................................24
Desinstalador del Editor de Unity........................................................................................24
Instalacin del Web Player...................................................................................................25
Instalacin de Assets Estndar.............................................................................................25
Instalacin de Proyecto Ejemplo..........................................................................................25
Instalando Unity en OS X desde la lnea de comando..............................................................25
Instalacin del Editor de Unity.................................................................................................25
Instalacin del Web Player...................................................................................................25
Instalacin de Assets Estndar.............................................................................................25
Instalacin de Proyecto Ejemplo..........................................................................................25
Descarga Torrent............................................................................................................................26
Proyectos 2D o 3D..............................................................................................................................27
3D Completo.............................................................................................................................27
3D Ortogrfico..........................................................................................................................28
2D Completo.............................................................................................................................28
Gameplay 2D con grficas 3D..................................................................................................29
Gameplay 3D y grficas, con una cmara perspectiva.............................................................29
Otros estilos...............................................................................................................................30
Informacin til de proyectos 2D..................................................................................................30
Comenzando con Unity.............................................................................................................30
Visin general 2D......................................................................................................................30
Empezando.........................................................................................................................................31
Iniciando Unity por primera vez....................................................................................................31
Creando un Proyecto......................................................................................................................31
Abriendo un Proyecto....................................................................................................................34
Aprendiendo la Interfaz......................................................................................................................36
La ventana del Proyecto.................................................................................................................37
La Scene View (vista de escena)....................................................................................................38
La ventana de Jerarqua.................................................................................................................39
Flujo de trabajo de los Assets (Asset Workflow)................................................................................40
Objetos Primitivos..............................................................................................................................41
Cubo...............................................................................................................................................41
Esfera.............................................................................................................................................42
Cpsula...........................................................................................................................................42
Cilindro..........................................................................................................................................43
Plano..............................................................................................................................................43
Quad...............................................................................................................................................44
Importando Assets..............................................................................................................................45
Algunos tipos comunes de Asset...................................................................................................47
Archivos de Imagen..................................................................................................................47
Archivos de modelos 3D...........................................................................................................47
Meshes & Animaciones............................................................................................................47
Archivos de Audio....................................................................................................................48
Otros tipos de Asset...................................................................................................................48
Import Settings (Ajustes de Importacin)..........................................................................................50
Importando desde la Asset Store........................................................................................................52
Acceso a la Asset Store y Navegacin...............................................................................................52
Ubicacin del archivo Asset descargado........................................................................................54
Asset Packages (Paquetes de assets)..................................................................................................56
Import Package..............................................................................................................................56
Standard Asset Packages...........................................................................................................57
Custom Packages......................................................................................................................58
Export Package..............................................................................................................................59
Assets Estndar...................................................................................................................................60
Importando Assets Estndar...........................................................................................................60
Los Assets Estndar No se Actualizan Automticamente....................................................60
Las ventanas principales.....................................................................................................................62
La ventana Project..............................................................................................................................63
Buscando........................................................................................................................................65
Navegacin del Scene View...............................................................................................................68
Movimiento de Flecha(Arrow Movement)....................................................................................68
Enfocarse(Focusing)......................................................................................................................68
Moverse,Orbitar y Acercarse (Move,Orbit y Zoom).....................................................................68
Usando el Hand Tool.................................................................................................................68
Claves de Acceso Rpido Sin usar la Hand Tool......................................................................69
Modo Flythrough...........................................................................................................................69
Scene Gizmo..................................................................................................................................69
Posicionando GameObjects................................................................................................................72
Transladar(Translate), Rotar(Rotate), y Escalar(Scale).................................................................72
Palanca de Visualizacin de Gizmo(Gizmo Display Toggles)......................................................73
Snapping por Unidades..................................................................................................................74
Snapping de superficies.................................................................................................................74
Look-At Rotation...........................................................................................................................74
Vertex Snapping.............................................................................................................................74
Shading Mode...........................................................................................................................76
Miscellaneous............................................................................................................................76
Deferred....................................................................................................................................76
Global Illumination...................................................................................................................77
La Vista del Juego (Game View)........................................................................................................80
Modo de Juego ( Play Mode).........................................................................................................80
Barra de Control del Game View...................................................................................................80
La ventana de Jerarqua (Hierarchy)..................................................................................................83
Parentesco (Parenting)...................................................................................................................83
Ordenacin Alfanumrica..............................................................................................................84
Edicin Multi-Escena....................................................................................................................84

-3-
Usando el Inspector............................................................................................................................85
Inspecting Game Objects...............................................................................................................86
Inspecting Script Variables............................................................................................................87
Inspecting Assets............................................................................................................................88
Project Settings..............................................................................................................................91
Editando Propiedades(Properties)......................................................................................................92
Referencias(References)................................................................................................................92
Valores(Values)..............................................................................................................................93
Colores(Colors).........................................................................................................................93
Gradientes(Gradients)...............................................................................................................96
Curvas(Curves).........................................................................................................................97
Matrices(Arrays).......................................................................................................................97
Editando Varios Objetos a la Vez...................................................................................................98
Libreras Predefinidas.......................................................................................................................100
Cmo crear un preset de un color:...............................................................................................100
Opciones del Inspector.....................................................................................................................103
Bloquear(Lock)............................................................................................................................103
Modo Depurar/Normal(Debug/Normal Mode)...........................................................................103
La Barra de Herramientas.................................................................................................................105
Buscando..........................................................................................................................................106
Bsqueda de Escena.....................................................................................................................106
Bsqueda de Proyecto y Etiquetas...............................................................................................107
Otras Vistas.......................................................................................................................................108
Personalizando El Espacio de Trabajo.........................................................................................109
Teclas de Acceso Rpido de Unity...................................................................................................112
Creacin de Juego.............................................................................................................................115
Escena...............................................................................................................................................116
Guardando Escenas......................................................................................................................116
Abriendo Escenas.........................................................................................................................117
Edicin Multi-escena...................................................................................................................117
GameObjects.....................................................................................................................................118
Qu son los GameObjects?........................................................................................................118
GameObject......................................................................................................................................120
Detalles........................................................................................................................................121
Introduccin a los componentes.......................................................................................................122
El Transform Component.............................................................................................................122
Otros Components.......................................................................................................................122
Usando Components.........................................................................................................................124
Agregando Components..............................................................................................................124
Editando Components..................................................................................................................126
Los comandos del men de contexto del Component.................................................................129
Reset........................................................................................................................................129
Eliminar(Remove)...................................................................................................................129
Moverse Arriba/Abajo.............................................................................................................129
Copiar/Pegar............................................................................................................................129
Probando las Propiedades............................................................................................................130
Transform.........................................................................................................................................131
Propiedades..................................................................................................................................131
Creando Componentes......................................................................................................................132
Desactivando GameObjects..............................................................................................................133

-4-
Efectos de desactivar un parent GameObject..............................................................................133
Etiquetas(Tags).................................................................................................................................135
Applicando una Etiqueta(Tag).....................................................................................................136
Creando nuevas Etiquetas............................................................................................................136
Recomendaciones........................................................................................................................136
GameObjects Estticos.....................................................................................................................138
Ajustes Estticos..........................................................................................................................138
Prefabs..............................................................................................................................................139
Usando Prefabs............................................................................................................................139
Editando un Prefab desde sus Instancias.....................................................................................140
Guardando Su Trabajo......................................................................................................................141
Guardar cambios de la escena actual (Save Scene)..................................................................141
Guardar cambios a todo el proyecto (Save Project)......................................................................142
Toda la Project Settings (Configuracin del proyecto):......................................................142
Los Build Settings (Configuracin del build).....................................................................144
Cambios a los assets en la Project Window (ventana de proyecto)........................................144
Cambios que se escriben inmediatamente al disco (no necesitan ser guardados):......................145
Cambios a cualquier configuracin de importacin que requiera que el usuario pulse un botn
apply....................................................................................................................................145
Otros cambios que se guardan inmediatamente:..........................................................................145
Instanciando Prefabs en tiempo de ejecucin...................................................................................147
Escenarios Comunes....................................................................................................................147
Construyendo una pared..........................................................................................................148
Instanciando cohetes & explosiones.......................................................................................150
Sustituir un personaje con un mueco de trapo o una ruina...................................................151
Poniendo un montn de objetos en un patrn especfico........................................................153
Input..................................................................................................................................................156
Input Convencional de Juego...........................................................................................................157
Virtual Axes (Ejes Virtuales).......................................................................................................158
Agregando nuevos ejes de Input (Input Axes).............................................................................158
Usando Ejes de Input (Input Axes) desde los Scripts..................................................................160
Nombres de Botones....................................................................................................................160
Teclas...........................................................................................................................................160
Input de Dispositivo Mvil...............................................................................................................162
Pantalla Multi-Touch...............................................................................................................162
Simulacin de Mouse..............................................................................................................163
Acelermetro...........................................................................................................................163
Filtro de Paso Bajo(Low-Pass Filter)......................................................................................164
Quisiera la mayor precisin posible al leer el acelermetro. Qu debo hacer?.....................164
Teclado mvil...................................................................................................................................166
Elementos GUI............................................................................................................................166
Manejo del teclado manual..........................................................................................................166
Opciones de distribucin del teclado...........................................................................................166
Vista Preliminar de Texto.............................................................................................................166
Visibilidad y tamao del teclado..................................................................................................167
Input Seguro de Texto..................................................................................................................167
Teclado de Alerta.........................................................................................................................168
Transforms........................................................................................................................................170
Editando Transforms....................................................................................................................170
Parentesco....................................................................................................................................172

-5-
Limitaciones con Escalado No Uniforme....................................................................................173
La Importancia de la Escala.........................................................................................................173
Tips para Trabajar con Transforms..............................................................................................174
Agregando Aleatoriamente Elementos de Juego..............................................................................175
Escogiendo un elemento aleatorio de una matriz........................................................................175
Escogiendo Elementos con Diferentes Probabilidades................................................................175
Ponderando valores continuos aleatorios.....................................................................................177
Barajar una Lista..........................................................................................................................180
Escogiendo de un conjunto de elementos sin repeticin.............................................................180
Puntos Aleatorios en el Espacio...................................................................................................182
Rotation and Orientation in Unity....................................................................................................183
Summary......................................................................................................................................183
The Difference Between Euler Angles and Quaternions.............................................................183
Euler Angles............................................................................................................................183
Quaternions.............................................................................................................................183
Implications for Scripting............................................................................................................185
Creating and Manipulating Quaternions Directly...................................................................185
Implications for Animation..........................................................................................................186
Unitys Animation Window....................................................................................................186
External Animation Sources....................................................................................................187
Solucin de Problemas(TroubleShooting)........................................................................................188
Solucin de Problemas de la Plataforma..........................................................................................188
Geforce 7300GT en OSX 10.6.4..................................................................................................188
En Windows x64, Unity falla cuando mi script lanza un NullReferenceException....................188
Edicin de Scripts........................................................................................................................188
Hay una manera de quitar la pgina de inicio en MonoDevelop?..........................................188
Por qu mi script abre en MonoDevelop cuando yo tengo seleccionado Visual Studio como mi
editor de scripts?.....................................................................................................................188
Grficas........................................................................................................................................188
Velocidad de cuadros y/o artefactos visuales lentos...............................................................188
Sombras.......................................................................................................................................189
Algunos de mis objetos, no proyectan o reciben sombras......................................................189
Luces (Lights)...................................................................................................................................190
Rendering paths...........................................................................................................................193
Ms informacin..........................................................................................................................193
Cmaras............................................................................................................................................194
Consideraciones Multi-plataforma...................................................................................................195
Entrada.........................................................................................................................................195
Teclado y joypad.....................................................................................................................195
Toques y Clics.........................................................................................................................196
Acelermetro, brjula, giroscopio y GPS...............................................................................197
Memoria, almacenamiento y desempeo de CPU.......................................................................197
Reproduccin de pelculas......................................................................................................197
Requerimientos de almacenamiento.......................................................................................198
Gestin automtica de memoria..............................................................................................198
Potencia de la CPU.................................................................................................................198
Publicando Construcciones (Publishing Builds)..............................................................................200
Construyendo reproductores independientes (Building standalone players)...............................202
Dentro del proceso de construccin.............................................................................................202
Precarga........................................................................................................................................203

-6-
Est listo para construir juegos....................................................................................................203
Caractersticas del Editor..................................................................................................................204
Ajustes del Modo 2D y 3D...............................................................................................................205
Cambiar entre modos 3D y 2D....................................................................................................205
Diferencias entre modo 2D y el modo 3D...................................................................................205
En modo de Proyecto 2D:.......................................................................................................205
En modo de proyecto 3D:.......................................................................................................206
Preferencias......................................................................................................................................207
General.........................................................................................................................................207
Herramientas Externas.................................................................................................................208
Colores.........................................................................................................................................209
Teclas...........................................................................................................................................210
Cach GI......................................................................................................................................211
2D.................................................................................................................................................212
Servidor de Cach........................................................................................................................213
Build Settings...................................................................................................................................214
Escenas en el Build (construccin)..............................................................................................214
Lista de Plataforma......................................................................................................................215
Web Player (Reproductor Web)..............................................................................................215
PC, Mac & Linux Standalone.................................................................................................215
iOS..........................................................................................................................................216
Android...................................................................................................................................216
Tizen........................................................................................................................................216
WebGL (Pre-visualizacin).....................................................................................................216
Samsumg TV...........................................................................................................................217
Windows Store........................................................................................................................217
Windows Phone 8....................................................................................................................217
Otras plataformas....................................................................................................................217
Items genricos de los builds..................................................................................................217
Las Configuraciones de Administradores(Settings Managers)........................................................218
Audio Manager (Administrador de Audio)......................................................................................219
Propiedades..................................................................................................................................219
Detalles........................................................................................................................................220
Administrador de Input (Input Manager).........................................................................................223
Propiedades..................................................................................................................................223
Detalles........................................................................................................................................224
Administrador de Red (Network Manager)......................................................................................226
Propiedades..................................................................................................................................226
Detalles........................................................................................................................................226
Administrador de Fsica (Physics Manager)....................................................................................228
Propiedades..................................................................................................................................228
Detalles........................................................................................................................................229
Player Settings..................................................................................................................................232
Ajustes Generales........................................................................................................................232
Splash Screen....................................................................................................................................234
Personal Edition...........................................................................................................................234
Pro Edition...................................................................................................................................235
Graphics Settings..............................................................................................................................243
Built-in shader settings............................................................................................................243
Always-included Shaders........................................................................................................244

-7-
Shader stripping......................................................................................................................244
Shader preloading...................................................................................................................244
Vase tambin..............................................................................................................................244
Ajustes del Orden de Ejecucin de Scripts(Script Execution Order Settings).................................245
Etiquetas y Capas(Tags & Layers)...................................................................................................247
Detalles........................................................................................................................................247
Emulacin de Red.............................................................................................................................250
Detalles tcnicos..........................................................................................................................250
Integracin en Visual Studio C#.......................................................................................................252
Qu me aporta esta caracterstica?.............................................................................................252
Cul es la diferencia entre Express y Pro?.................................................................................252
Tengo Visual Studio Express, cmo lo uso?..............................................................................252
Tengo Visual Studio Profesional, cmo lo uso?.........................................................................252
Un par de cosas a tener en cuenta:...............................................................................................252
RenderDoc Integration.....................................................................................................................254
Loading RenderDoc.....................................................................................................................254
Capturing a frame with RenderDoc.............................................................................................254
Including shader debug information............................................................................................255
Alternative graphics debugging techniques.................................................................................256
Analiticas del Editor.........................................................................................................................257
Ejemplos de datos recolectados...................................................................................................257
Desactivando las Analticas del Editor........................................................................................257
Buscar Actualizaciones.....................................................................................................................259
La Frecuencia de la Comprobacin de la Actualizacin..............................................................260
Omitiendo Actualizaciones..........................................................................................................260
Desactivando la Comprobacin de Actualizacin.......................................................................260
IME en Unity....................................................................................................................................261
Qu es Input Method Editor (IME)?............................................................................................261
IME y Unity......................................................................................................................................261
iOS...............................................................................................................................................262
Android........................................................................................................................................262
Nombres de carpetas de especiales...................................................................................................263
Assets...........................................................................................................................................263
Editor...........................................................................................................................................263
Recursos predeterminados del Editor..........................................................................................263
Gizmos.........................................................................................................................................264
Plugins.........................................................................................................................................264
Resources.....................................................................................................................................264
Standard Assets............................................................................................................................264
StreamingAssets...........................................................................................................................265
WebPlayerTemplates....................................................................................................................265
Hidden Assets (Assets ocultos)....................................................................................................265
Exporting Packages..........................................................................................................................267
Exporting New Packages........................................................................................................267
Exporting Updated Packages..................................................................................................268
Control de Versiones.........................................................................................................................269
Integracin con control de versiones (solo Licencias de Equipo)....................................................270
Por qu debera usar control de versiones?................................................................................270
Configurando su control de versiones en Unity...........................................................................270
Usando Version Control...............................................................................................................271

-8-
Ventana del Version Control........................................................................................................272
Iconos...........................................................................................................................................273
Reversin automtica de los archivos no modificados enviados.................................................274
Modo Sin Conexin.....................................................................................................................274
Solucin de Problemas(Troubleshooting)....................................................................................274
Trabajando con el Asset Server....................................................................................................275
Trabajando con otros sistemas de control de versiones...............................................................275
Integracin Perforce.........................................................................................................................276
Configurando Perforce.................................................................................................................276
Trabajando sin conexin con Perforce.........................................................................................276
Solucin de Problemas(Troubleshooting)....................................................................................276
Reversin automtica de archivos no modificados en enviar(submit)........................................276
Integracin de Plastic SCM..............................................................................................................277
Configurando Plastic SCM..........................................................................................................277
Checking out archivos con Plastic SCM......................................................................................277
Resolviendo Conflictos y fusionando con Plastic SCM..............................................................277
Bloquear Archivos con Plastic SCM...........................................................................................278
Trabajando sin conexin con Plastic SCM..................................................................................278
Usando Sistemas de Control de Versiones Externos con Unity.......................................................280
Ejemplo: Crear un nuevo proyecto e importarlo a un repositorio de subversion........................280
Smart Merge.....................................................................................................................................282
Setting Up Smart Merging in Unity.............................................................................................282
Setting up UnityYAMLMerge for Use with Third Party Tools...................................................282
P4V..........................................................................................................................................283
Git............................................................................................................................................283
Mercurial.................................................................................................................................283
SVN.........................................................................................................................................283
TortoiseGit...............................................................................................................................284
PlasticSCM..............................................................................................................................284
SourceTree..............................................................................................................................284
Solucin de Problemas (Troubleshooting) del Editor......................................................................285
Versiones......................................................................................................................................285
Activacin....................................................................................................................................285
Fallo al Arranque.........................................................................................................................286
Fuentes....................................................................................................................................286
Proyecto o Instalacin Corrupta..............................................................................................287
Rendimiento y Fallas...................................................................................................................287
Perdida del Proyecto....................................................................................................................288
Re-instalacin..............................................................................................................................288
Desarrollo Avanzado.........................................................................................................................289
La ventana del Profiler (perfilador)..................................................................................................290
Ver tambin..................................................................................................................................290
Webplayer (Reproductor Web)....................................................................................................290
iOS...............................................................................................................................................291
Android........................................................................................................................................291
Ventana del Perfilador(Profiler window)..........................................................................................293
Adjuntando a Reproductores de Unity.........................................................................................293
Controles del Profiler...................................................................................................................294
Perfilamiento Profundo (Deep Profiling)................................................................................294
Mirar el Tiempo de Sincronizacin.........................................................................................295

-9-
Linea de Tiempo del Perfilador...................................................................................................295
rea de Uso del CPU(CPU Usage Area).........................................................................................297
Seleccionando Items Individuales...............................................................................................298
Physics Markers (Marcadores de fsica)......................................................................................299
Advertencias de Rendimiento......................................................................................................300
rea de Renderizacin(Rendering Area)..........................................................................................302
rea de Memoria(Memory Area).....................................................................................................303
Vista Simple(Simple View)..........................................................................................................303
Vista detallada(Detailed View)....................................................................................................304
rea de Audio(Audio Area)..............................................................................................................306
Perfilador de Fsica(Physics Profiler)...............................................................................................309
rea de Fsica (Physics Area)......................................................................................................309
rea GPU (GPU Area).....................................................................................................................310
Multi Scene Editing (Edicin de varias escenas).............................................................................311
En el Editor..................................................................................................................................311
The Scene Divider Menu For Loaded Scenes:...................................................................313
The Scene Divider Menu For Unloaded Scenes:...............................................................314
Baking Lightmaps with Multiple Scenes.....................................................................................314
Baking Navmesh data with Multiple Scenes...............................................................................314
Playmode.....................................................................................................................................315
Scene-specific settings.................................................................................................................315
Scripting.......................................................................................................................................315
Editor Scripting.......................................................................................................................315
Runtime Scripting...................................................................................................................316
Notes............................................................................................................................................316
Tips and Tricks.............................................................................................................................317
Problemas conocidos:..................................................................................................................317
Cargando recursos en tiempo de ejecucin......................................................................................318
Asset Bundles..............................................................................................................................318
Resource Folders (Carpetas de Recursos)...................................................................................318
Tenga en cuenta:......................................................................................................................319
Descarga de Recursos..................................................................................................................319
Plugins..............................................................................................................................................321
Inspector de Plugins.........................................................................................................................322
Ajustes Predeterminados....................................................................................................324
Device-specific settings...............................................................................................................324
Ajustes del Editor...............................................................................................................324
Ajustes Standalone.............................................................................................................325
Windows Store Apps..........................................................................................................325
iOS......................................................................................................................................325
iOS......................................................................................................................................325
Managed Plugins..............................................................................................................................326
Creando un DLL..........................................................................................................................326
Usando la DLL.............................................................................................................................327
Gua paso a paso para MonoDevelop y Visual Studio.................................................................327
Configurando el proyecto........................................................................................................327
Usando la DLL en Unity.........................................................................................................328
Preparando una sesin de depuracin para la DLL.................................................................329
Cdigo.....................................................................................................................................329
Plugins Nativos.................................................................................................................................330

- 10 -
Ejemplo........................................................................................................................................330
Creando un Plugin Nativo............................................................................................................331
Ms Informacin..........................................................................................................................331
Construyendo Plugins para Plataformas de Escritorio.....................................................................332
Construyendo un Plugin para Mac OS X.....................................................................................332
Construyendo un Plugin para windows.......................................................................................332
Construyendo un Plugin para Linux............................................................................................332
Libreras de 32 y 64 bits..............................................................................................................332
Windows y Linux....................................................................................................................333
Mac OS X................................................................................................................................333
Utilizando su plugin de C#..........................................................................................................333
Implementacin...........................................................................................................................333
Ejemplos......................................................................................................................................334
Plugins Ms Simple................................................................................................................334
Renderizando desde cdigo C++............................................................................................334
Interfaz de Plugin Nativo de Bajo Nivel..........................................................................................335
Interface Registry.........................................................................................................................335
Acceso al Dispositivo de Grficas...............................................................................................335
Callbacks del Plugin en el hilo renderizando...............................................................................336
Ejemplo........................................................................................................................................337
AssetBundles....................................................................................................................................338
Construyendo Asset Bundles............................................................................................................340
Exportando AssetBundles............................................................................................................341
Shader stripping......................................................................................................................343
Herramientas de Edicin del AssetBundle...................................................................................344
Obteniendo nombres de AssetBundles....................................................................................344
Decirme cuando un asset cambia AssetBundle.......................................................................344
Variantes de AssetBundle.............................................................................................................344
Consejos de Scripting..................................................................................................................345
API para marcar el asset a un AssetBundle.............................................................................345
Construyendo Asset Bundles............................................................................................................345
APIs para manipular los nombres de AssetBundle en la base de datos de assets...................346
BuildAssetBundleOptions.......................................................................................................346
BuildAssetBundleOptions.......................................................................................................346
Archivo Manifest....................................................................................................................346
Un solo archivo manifest........................................................................................................347
Un solo manifest AssetBundle................................................................................................347
El APIs para cargar AssetBundles ha cambiado.....................................................................347
Typetrees (TiposDerboles)...................................................................................................348
Compresin de Asset Bundles..........................................................................................................349
Formato LZMA.......................................................................................................................349
Formato LZ4...........................................................................................................................349
Formato sin comprimir............................................................................................................349
El almacenamiento en Cach de Bundles Comprimidos.............................................................349
Visin general del API de la carga (load) de AssetBundles.........................................................350
Compatibilidad.............................................................................................................................351
Estructura Interna de Asset Bundle..................................................................................................352
La estructura normal del AssetBundle....................................................................................352
Estructura de un AssetBundle de escena por streaming..........................................................352
Compresin de AssetBundles......................................................................................................352

- 11 -
Descargar AssetBundles...............................................................................................................354
Poniendo todo junto................................................................................................................355
Cargar AssetBundles en el Editor...........................................................................................356
Cargar y quitar objetos desde un AssetBundle............................................................................358
Cargar objetos desde un AssetBundle de forma asncrona..........................................................358
Llevar un Seguimiento de los AssetBundles cargados................................................................360
Almacenando y cargando datos binarios en un AssetBundle...........................................................363
Protegiendo contenido......................................................................................................................364
Incluyendo scripts en AssetBundles.................................................................................................367
AssetBundles PF (Preguntas Frecuentes).........................................................................................368
Cmo uso un AssetBundle?.......................................................................................................368
Cmo uso AssetBundles en el editor?........................................................................................369
Cmo puedo almacenar en cach los AssetBundles?..................................................................371
Los AssetBundles son multi-plataforma?....................................................................................371
Cmo son los assets en AssetBundles identificados?..................................................................372
Puedo yo re-utilizar mis AssetBundles en otro juego?................................................................372
Un AssetBundle construido ahora puede ser utilizable con versiones futuras de Unity?............373
Cmo puedo listar los objetos en un AssetBundle?.....................................................................373
Cmo los AssetBundles pueden referenciar otros assets en otros AssetBundles........................373
Reduciendo el Tamao del Archivo de la Construccin...................................................................374
Sugerencias para Reducir el Tamao de Construccin................................................................375
Texturas...................................................................................................................................375
Meshes y Animaciones............................................................................................................378
DLLs.......................................................................................................................................378
Reduciendo El tamao de la Librera Mvil .NET.................................................................379
Social API (API Social)....................................................................................................................381
Serializacin JSON...........................................................................................................................384
Su simple uso...............................................................................................................................384
Sobre-escribiendo objetos con JSON..........................................................................................385
Tipos Soportados.........................................................................................................................385
Rendimiento.................................................................................................................................385
Controlando el output de ToJson()...............................................................................................386
Utilizando FromJson() cuando el tipo no es conocido con tiempo..............................................386
El Streaming de Assets.....................................................................................................................387
ScriptableObject...............................................................................................................................389
Temas Avanzados del Editor.............................................................................................................391
Construir el Pipeline de un Reproductor..........................................................................................392
Atributo de PostProcessBuild......................................................................................................393
Argumentos de la lnea de comandos...............................................................................................394
Activando Unity Silenciosamente...............................................................................................394
Ejemplo de uso.............................................................................................................................396
Argumentos de lnea de comandos especiales para el Editor de Unity.......................................397
Argumentos de lnea de comandos para un Reproductor Standalone de Unity...........................397
Argumentos de lnea de comandos para Windows Store.............................................................398
Opciones......................................................................................................................................399
Detras de Escenas.............................................................................................................................400
Qu sucede cuando Unity importa un Asset?..............................................................................400
1. Un ID nico es asignado.....................................................................................................400
2. Un archivo .meta es creado.................................................................................................400
3. El asset fuente es procesado................................................................................................401

- 12 -
A veces hay mltiplos assets creados desde una importacin.................................................402
Los ajustes de importacin pueden alterar el procesamiento del asset...................................402
AssetDatabase...................................................................................................................................404
Importar un Asset.........................................................................................................................404
Cargar un Asset............................................................................................................................404
Operaciones de Archivo usando AssetDatabase..........................................................................405
Utilizar AssetDatabase.Refresh...................................................................................................406
Archivos de escena basados en texto................................................................................................407
Descripcin del formato...................................................................................................................408
Un ejemplo de un archivo de Escena YAML...................................................................................410
YAML Class ID Reference (Referencia del ID de la clase YAML).................................................415
Clases ordenadas por nmero de ID............................................................................................415
Clases Ordenadas Alfabticamente..............................................................................................422
Cache Server (Server de Cache) (Licencia de Equipo)....................................................................430
Como configurar la Cach del Servidor (usuario).......................................................................431
Como configurar la Cach del Servidor (usuario).......................................................................431
Instalando el Cache Server como un servicio..............................................................................433
Configuracin del Cache Server..................................................................................................433
Requerimientos para la maquina alojando el Cache Server........................................................434
Cache Server FAQ (Preguntas Frecuentes)..................................................................................434
Ser que el tamao de la base de datos de mi Cache Server puede crecer indefinidamente a
medida que ms y ms recursos son importados y almacenados?..........................................434
El cache server funciona solamente con el asset server?........................................................434
Qu cambios van a causar que el archivo importado sea re-generado?..................................434
Cmo trabajo con Asset dependencies?..................................................................................435
Hay algunos problemas cuando se trabaje con materiales?....................................................435
Hay algunos tipos de assets que no sern puestos en cache por el servidor?..........................436
Modificando Assets Fuentes a travs del Scripting..........................................................................437
Instanciacin Automtica.............................................................................................................437
Modificacin Directa...................................................................................................................437
NOTA IMPORTANTE............................................................................................................437
Miembros de Clase Aplicables....................................................................................................438
Asignacin Directa......................................................................................................................438
Assets que no son instanciados automticamente........................................................................438
Notas de iOS y Android...............................................................................................................438
Extendiendo el Editor.......................................................................................................................440
Ventanas del Editor...........................................................................................................................441
Derivada de la Ventana del Editor...........................................................................................441
Mostrando la ventana..............................................................................................................442
Implementando el GUI de Su Ventana....................................................................................443
Property Drawers..............................................................................................................................445
Personalizar el GUI de miembros de script utilizando Atributos de Propiedad(Property
Attributes)....................................................................................................................................445
Personalizar el GUI de una clase Serializable.............................................................................445
Personalizar el GUI de miembros de script utilizando Atributos de Propiedad(Property
Attributes)....................................................................................................................................449
Editores Personalizados....................................................................................................................452
Haciendo un Editor Personalizado..........................................................................................453
Adiciones al Scene View.........................................................................................................456
Corriendo Cdigo Script del Editor en la Ejecucin........................................................................458

- 13 -
Licencias y Activacin.....................................................................................................................460
Activacin en linea...........................................................................................................................461
Activacin fuera de linea/ Manual....................................................................................................464
Manejando su Licencia de Unity......................................................................................................471
Mi mquina ya no es accesible:..............................................................................................471
Mi mquina todava est accesible:.........................................................................................471
Preguntas frecuentes de activacin...................................................................................................473
Guas de Actualizacin.....................................................................................................................476
Usando la Actualizacin Automtica del API..................................................................................477
Por qu mi cdigo necesita ser actualizado?..............................................................................477
The automatic updater.................................................................................................................477
Solucin de Problemas.................................................................................................................480
Limitaciones.................................................................................................................................481
Actualizarse a Unity 5.3...................................................................................................................482
Global Illumination (GI - Iluminacin Global)...........................................................................482
Shuriken.......................................................................................................................................482
Edicin Multi Escena (Multi Scene Editing)...............................................................................483
Assets Shader Pre-compilados.....................................................................................................484
Soporte OpenGL 4.x en desktop..................................................................................................484
AssetBundles...............................................................................................................................485
GetComponent(s)InChildren.......................................................................................................485
UI/default shaders ( Shaders UI/Predeterminados).....................................................................485
Luces Point y Spot que emiten sombras......................................................................................485
Matemtica de Quaternions.........................................................................................................486
JointDriveMode flags..................................................................................................................486
Legacy Light Animation..............................................................................................................486
Editor Extensions.........................................................................................................................487
Camera Depth Texture shader variable........................................................................................487
Actualizndose a Unity 5.2...............................................................................................................488
Global Illumination......................................................................................................................488
Shaders.........................................................................................................................................488
Reflection Probes.........................................................................................................................489
Shuriken.......................................................................................................................................490
UI (Interfaz de Usuario)...............................................................................................................491
Multiplayer...................................................................................................................................491
Actualizando a Unity 5.0..................................................................................................................493
AI (Inteligencia artificial) en Unity 5.0.......................................................................................494
Script Ejemplo para Rebake....................................................................................................494
Animacin en Unity 5.0...............................................................................................................496
API de Creacin de Asset........................................................................................................496
Audio en Unity 5.0.......................................................................................................................497
AudioClips (Clips de Audio)...................................................................................................497
Formato...................................................................................................................................497
Precargando y cargando datos de audio en el fondo...............................................................497
Multi-edicin...........................................................................................................................498
Force to Mono (Pasar a Mono)...............................................................................................498
GetData/SetData (ObtenerDatos/ConfigurarDatos)................................................................498
Comportamiento de pausa del AudioSource...........................................................................498
Audio Mixer (Mezclador de Audio)........................................................................................498
AudioSettings (Configuraciones de Audio)............................................................................499

- 14 -
Datos Baked en Unity 5.0............................................................................................................501
Plugins en Unity 5.0.........................................................................................................................502
Plugins Nativos en el Editor....................................................................................................502
Plugins de Audio Nativos........................................................................................................502
Fsica en Unity 5.0.......................................................................................................................504
Panorama general las actualizaciones.....................................................................................504
Cambios que probablemente afectan los proyectos:...............................................................504
La fuerza Adaptive ahora es apagada por defecto..............................................................504
Las Colisiones Suaves de Esferas son quitadas de ambos los terrenos y meshes..............504
Los Springs exponen mayores amplitudes con PhysX3.....................................................504
La configuracin del Material de Terreno de Fsica ha cambiado.....................................504
El Shape Casting y sweeping ha cambiado:.......................................................................505
Eventos del Compound Collider:.......................................................................................505
Los Triggers deben ser convexos:......................................................................................505
Los cuerpos dinmicos deben ser convexos:......................................................................505
Ragdoll joints (Articulaciones Ragdoll):............................................................................505
Las restricciones del Rigidbodys son aplicados en espacio local.....................................506
WheelCollider....................................................................................................................506
Cloth...................................................................................................................................507
Shaders en Unity 5.0.........................................................................................................................508
Los Shaders ya no aplican un multiplicador de 2x de intensidad de luz.................................508
El aumento de counts (cuentas) del interpolator y de instruccin para algunos surface shaders
.................................................................................................................................................508
La Non-uniform mesh scale (escala no-uniforme mesh) debe ser tenida en cuenta en los
shaders.....................................................................................................................................508
El manejo de Fog (niebla) fue cambiado................................................................................509
El canal Alpha de los Surface Shaders ha cambiado...............................................................509
El Sorting ( clasificacin) por indice de material ha sido quitado..........................................509
Fixed function TexGen (la funcin fija TexGen), texture matrices (matrices de textura) y
algunos SetTexture combiner modes (modos del combinador SetTexture) fueron quitados..509
Mezclar partes del fixed function shader y shaders progamables ya no es permitido............510
El compilador D3D9 shade fue cambiado de Cg 2.2 a HLSL................................................510
Las variables del shader unity_Scale han sido quitadas......................................................510
Passes de Shadows, Depth Textures y ShadowCollector........................................................511
Otras notas de actualizacin para Unity 5.0.....................................................................................512
Bloqueando / Ocultando el Cursor...................................................................................................512
Linux............................................................................................................................................512
Windows Phone 8........................................................................................................................512
Windows Store Apps....................................................................................................................513
Otros cambios del script API no pueden ser actualizados automticamente...............................513
Cambios en el Unity Package (Paquete de Unity).......................................................................513
Gua de Actualizacin de Unity 3.5 a 4.0.........................................................................................515
Estado Activo del GameObject....................................................................................................515
El comportamiento viejo:........................................................................................................515
El nuevo comportamiento:......................................................................................................515
Ejemplo:..................................................................................................................................516
El nuevo estado activo en el editor.........................................................................................516
Cmo esto afecta a proyectos existentes:................................................................................517
Cambios al pipeline de procesamiento de assets.........................................................................517
Ejemplo de una referencia siendo perdida ya que no son persistentes todava.......................518

- 15 -
Ejemplo de una referencia a unos assets previamente importados siento descartados...........518
Opcin de Lectura/Escritura del Mesh........................................................................................519
Optimizacin de Mesh.................................................................................................................519
Input Mvil..................................................................................................................................519
Actualizando a Unity 3.5..................................................................................................................521

- 16 -
Manual de Unity
El Unity Editor le permite a usted crear juegos 2D y 3D, apps y experiencias. El Manual
de Unity le ayuda a usted a aprender a cmo utilizar el Editor de Unity y sus servicios
asociados. Usted puede leer el Manual desde el inicio hasta el final o utilizarlo como
una referencia.
Para la documentacin acerca de las nuevas caractersticas introducidas en 5.3,
ver qu hay de nuevo en 5.3
Para informacin acerca de cmo actualizar sus proyectos de Unity de versiones
anteriores, ver la Gua de actualizacin.
Fuentes adicionales de informacin
Para guas adicionales, por favor ver:
Unity Answers o Unity Forums; aqu usted puede preguntar y buscar sus dudas.
La Unity Knowledge Base; una coleccin de respuestas a preguntas hechas a los
equipos de Soporte de Unity.
Tutorials; guas paso por paso en video y escritas para utilizar el Editor de Unity.
Unity Ads Knowledge Base; una gua para incluir ads (publicidad) en su juego.
Documentacin Everyplay; una gua para la plataforma de replay de juegos mviles
Everyplay.
Ayuda de la Asset Store; ayuda acerca del compartimiento de contenido en la Asset
Store.
Problemas conocidos
Hay una caracterstica que no est funcionando como usted espera que lo haga?
Puede que sea un Known Issue (problema conocido). Por favor revise el Issue
Tracker en issuetracker.unity3d.com.

- 17 -
Versiones del manual
A medida que continuamente mejoramos Unity, nuevas caractersticas son agregadas,
mejoradas - y a veces algunas caractersticas viejas son quitadas. Con cada
lanzamiento, el Manual y la Referencia de Script cambia para reflejar esto, y usted
entonces debera asegurarse de que est utilizando la versin correcta del manual
para que coincida con la versin de Unity que est utilizando.

La ltima versin de la documentacin siempre est disponible en linea


en docs.unity3d.com

Adicionalmente al manual en linea, la documentacin puede instalarse localmente en


su computador cuando usted instale el software de Unity. Antes de Unity 5.3, la
documentacin siempre estuvo instalada junto con el software. Desde la versin 5.3
para adelante, el Unity Download Assistant le permite a usted incluir opcionalmente la
documentacin para una instalacin local.

Para la mayora de usuarios, usted va a utilizar la ltima versin de Unity, y por lo


tanto la ltima versin de la documentacin.

Algunos usuarios va a necesitar utilizar versiones previas de Unity. Este podra ser el
caso para usted si est manteniendo un proyecto de legado, o si usted se ha
encerrado a una versin en particular de Unity durante un desarrollo de largo plazo
de un proyecto.

Si usted est utilizando una versin ms vieja de Unity, la documentacin instalada


locamente va a coincidir con la versin de Unity. Sin embargo, si usted escoge no
instalar la documentacin de manera local, las versiones ms viejas de la
documentacin de Unity estn disponibles en linea en las siguientes ubicaciones:

Versiones anteriores de la documentacin de Unity 5:


Versin 5.2: docs.unity3d.com/520

Versin 5.1: docs.unity3d.com/510

Versin 5.0: docs.unity3d.com/500

Versiones anteriores de la documentacin de Unity 4:


Versin 4.6: docs.unity3d.com/460

- 18 -
Versin 4.5: docs.unity3d.com/450

Versin 4.3: docs.unity3d.com/430

Versin 4.2: docs.unity3d.com/420

Versin 4.1: docs.unity3d.com/410

Versin 4.0: docs.unity3d.com/400

Versiones anteriores de la documentacin de Unity 3:


Versin 3.5.5: docs.unity3d.com/355

Versin 3.5.3: docs.unity3d.com/353

Versin 3.5.2: docs.unity3d.com/352

Versin 3.5.1: docs.unity3d.com/351

- 19 -
Nuevo en 5.3
Cada nuevo lanzamiento de Unity tiene ms caractersticas, mejoras a caractersticas
existentes, cambios, y arreglos. Esta pgina es una gua rpida a algunas de las nuevas
caractersticas principales o actualizaciones en el manual. Para una lista completa, ver
los Unity 5.3 release notes.

Documentacin para las nuevas caractersticas en 5.3:


Multi-Scene Editing (Edicin de mltiples escenas): Abra y edite mltiples escenas
al mismo tiempo. Nuevas caractersticas en la ventana de jerarqua le permite a usted
manejar mltiples escenas, para que usted pueda separar su trabajo en trozos
manejables individualmente-cargables.

Nuevos 2D Joints, Buoyancy Effector & Sprite Creator: Nuevos tipos de joints
(articulaciones) han sido agregados, adems de un Buoyancy Effector que le permite a
usted simular volumen liquido, y un Sprite Creator, dndole a usted un marcador de
posicin de estilo primitivo" para utilizar cuando trabaje en 2D.

OpenGL Core Support: OpenGL Core es el OpenGL equivalente a DirectX 11, y abre
las mismas caractersticas avanzadas de shader en plataformas OpenGL que DirectX
11 ofrece.

Euler Curve Animation Import: Por defecto, las curvas de rotacin son re-
muestradas como quaternions durante importacin, sin embargo, a veces esto puede
ser no deseable y causa diferencias de su animacin original. Usted puede escoger
mantener sus curvas de rotacin como valores Euler.

Compresin LZ4 de Asset Bundle: Una nueva opcin de compresin para asset
bundles que permite una descompresin parcial de solamente la porcin requerida
del bundle. Esto evita tiempos de espera que sucedan anteriormente de tener que
descomprimir el bundle completo.

Sprite Flipping: Voltear sprites en los planos X o Y al marcar una casilla, en vez de la
necesidad de utilizar escalas del transform negativas.

Mejoras en el Particle System: Todas las propiedades ahora accesibles va script!


Tambin, nuevas caractersticas como 3D Rotation & Emission from Skinned Mesh
surfaces. Muchas pequeas actualizaciones tambin, ver 5.3 release notes para ms

- 20 -
informacin.

In-App Purchases (Compras dentro de la aplicacin)

Hace que sea fcil la implementacin de in-app Purchases (compras dentro de la


aplicacin) en su aplicacin a travs de las tiendas ms populares de aplicaciones,
incluyendo iOS App Store, Mac App Store, Google Play y Windows Store.

Soporte Multi-Display

Muestre hasta 8 diferentes vistas de cmara en 8 diferentes monitores al mismo


tiempo. Excelente para una simulacin de rigs multi-display, instalaciones public kiosk,
etc.

Network Host Migration

Permite que uno de los clientes del juego se vuelva el nuevo anfitrin, si la conexin
existente al anfitrin existente se pierde.

Asynchronous Texture Upload

Permite la carga de tiempo en rodajas de datos de textura al GPU, el cual reduce el


tiempo de espera en el hilo principal del juego.

Mejoras en Speedtree

Mejoras en el procesamiento por lotes de varios ncleos ahora dan un mejor


rendimiento para billboard trees (rboles).

Serializacin JSON

Le permite a usted una fcil conversin de objetos serializables de Unity a JSON y


devuelta.

- 21 -
Trabajando con Unity
Esta seccin sirve como una introduccin completa al software de Unity.

Contenido en esta seccin estn los siguientes captulos:

Lo bsico Descargar e instalar Unity, comenzando para iniciar su primer proyecto, y


un tour rpido del editor.

Flujo de trabajo de Assets Cmo hacer que assets de una variedad de distintas
fuentes lleguen a Unity, incluyendo grficos, arte y sonido de programas externos,
archivos Package de otros desarrolladores, y assets ya hechos de nuestra Asset Store
y los assets estndar incluidos con Unity.

Las ventanas principales Una mirada ms profunda en cada una de las ventanas
principales que usted utilizar cada da en Unity, incluyendo accesos directos y teclas
de acceso rpido.

Creando Gameplay Cmo iniciar hacer escenas, Game Objects, Componentes, leer
input y agregar gameplay o interactividad a su proyecto.

Caractersticas del Editor Informacin acerca de las muchas caractersticas poderosas


del Editor, que le ayudarn a personalizar su flujo de trabajo, integrar con

- 22 -
herramientas externas, y extender el editor en s.

Desarrollo Avanzado Informacin para aquellos que no son nuevos al desarrollo,


quines quieren tomar los proyectos aun ms lejos utilizando Plugins, Asset Bundles,
y otras tcnicas de desarrollo ms avanzadas.

Temas Avanzados del Editor Tome el control completo del editor, entrese de cmo
funciona debajo del capote y aprenda a programar y personalizar el pipeline de assets
en el Editor en s.

Licencia y Activacin Entendiendo cmo activar Unity y manejar sus licencias.

Guas de Actualizacin Notas importantes para actualizar proyectos que fueron


hechos con versiones previas de Unity.

- 23 -
Bases de Unity

Esta seccin es clave para empezar a utilizar Unity. Se explicar la interfaz de Unity, los
elementos del men, el uso de assets, la creacin de escenas, y la publicacin de lo
construido.

Cuando haya terminado de leer esta seccin, entender cmo funciona Unity, cmo
usarlo de manera efectiva, y los pasos para poner un juego bsico junto.

- 24 -
Descargando e Instalando Unity
Usted puede descargar e instalar el editor de Unity del sitio web de
Unity; unity3d.com/download.

El instalador utiliza un Asistente de Descarga y tiene instrucciones detalladas paso a


paso. (Si quiere descargar el editor Unity utilizando un torrent o instalando varias
versiones de Unity simultneamente, puede encontrar informacin sobre cmo
hacerlo va Descarga Torent ms abajo.)

Asistente de Descarga de Unity


Desde la versin 5.0 de Unity en adelante, el Asistente de Descarga de Unity, un
pequeo ejecutable (de aproximadamente 1 MB de tamao), le permite seleccionar
qu componentes del editor Unity quiere descargar e instalar. Si usted no est seguro
qu componentes quiere instalar, deje las selecciones predeterminadas y
oprima Continue, siguiendo las instrucciones del instalador.

Asistente de
Descarga de Unity - Deje los valores por defecto si no est seguro de qu elegir

Tenga en cuenta que en PC hay un Microsoft Visual Studio Community 2015.

- 25 -
Instalando Unity sin el Asistente de Descarga
Si lo prefiere, puede descargar e instalar todos los componentes por separado, sin
utilizar el Asistente de Descarga. Los componente son programas ejecutables y
paquetes instaladores normales, con lo que puede que le resulte ms sencillo,
especialmente si es un nuevo usuario de Unity, emplear el Asistente de Descarga.
Algunos usuarios, como aquellos que desean automatizar el despliegue de Unity en
una organizacin, pueden preferir una instalacin desde lnea de comando.

Instalando Unity en Windows desde lnea de comandos


Las siguientes opciones se pueden utilizar cuando se est instalando el Editor de
Unity y otros componentes desde la lnea de comandos de Windows. Tenga en cuenta
que los argumentos del instalador por lnea de comandos distinguen entre
maysculas y minsculas.

Instalacin del Editor de Unity

/S

/D=PATH

Ejemplo:
UnitySetup64.exe /S /D=E:\Development\Unity

Instala Unity en modo silencioso en el directorio E:\Development\Unity, que ser la


raz de la instalacin de Unity. El ejecutable del Editor de Unity se instalar en este
caso en E:\Development\Unity\Editor\Unity.exe. El argumento /D tiene que ser el
ltimo y sin comillas, incluso si la ruta contiene espacios.

Desinstalador del Editor de Unity


La Desinstalacin silenciosa se puede realizar siguiendo los siguientes pasos:

1.Ejecute Uninstall.exe /S por ejemplo desde la lnea de comandos o mediante


un script.

Tenga en cuenta que aunque el proceso termine de inmediato, se tarda unos pocos
segundos antes de que los archivos hayan sido eliminados. La razn de esto es que el
desinstalador se copia en una ubicacin temporal con el fin de poder eliminarse a s
mismo. Tambin asegrese que el directorio de trabajo no est dentro de la ubicacin

- 26 -
de la instalacin de Unity, ya que no se podr eliminar la carpeta en dicho caso.

Instalacin del Web Player


Instalacin silenciosa del Web Player (No se puede especificar el directorio de
instalacin):
UnityWebPlayer.exe /S

Instalacin de Assets Estndar


De manera silenciosa instala los Assets Estndar. Si se especifica la carpeta, utilice la
carpeta raz de Unity, p.e. la carpeta que contiene la carpeta Editor y no dnde
Unity.exe est instalado.
UnityStandardAssetsSetup.exe /S /D=E:\Development\Unity

Instalacin de Proyecto Ejemplo


De manera silenciosa se instala el Proyecto Ejemplo. La carpeta por defecto es
C:\Users\Public\Documentation\Unity Projects\Standard Assets Example Project
UnityExampleProjectSetup.exe /S /D=E:\Development\Unity

Instalando Unity en OS X desde la lnea de comando


Los instaladores individuales de Unity son proporcionados como archivos .pkg, los
cuales pueden ser instalados utilizando installer como se describe abajo.

Instalacin del Editor de Unity


Instala a la carpeta /Applications/Unity en el volumen destino especificado:
sudo installer [-dumplog] -package Unity.pkg -target /

Instalacin del Web Player


El Reproductor Web de Unity est instalado en /Library/Internet Plug-
ins/Unity Web Player.plugin en Mac.
sudo installer [-dumplog] -package WebPlayer.pkg -target /

Instalacin de Assets Estndar


Instala a la carpeta /Applications/Unity/Standard Assets en el volumen
especificado:
sudo installer [-dumplog] -package StandardAssets.pkg -target /

- 27 -
Instalacin de Proyecto Ejemplo
Instala a la carpeta /Users/Shared/Unity/Standard-Assets en el volumen
especificado:
sudo installer [-dumplog] -package Examples.pkg -target /

Descarga Torrent
Si usted prefiere descargar Unity va un cliente BitTorrent, usted puede obtener un
link Torrent de descarga de nuestra download archive page. No toda las versiones
tienen una descarga torrent. Si una versin est disponible de ser descargado como
un torrent, la opcin estar presente en el men desplegable downloads.

- 28 -
Proyectos 2D o 3D
Unity est igualmente equipado para crear juegos 2D y 3D. Pero, cul es la
diferencia? Cuando crea un nuevo proyecto en Unity, usted tiene la opcin de
empezar en modo 2D o 3D. Probablemente usted ya sabe qu quiere crear, pero
puede haber algunos delicados puntos que pueden afectar qu modo usar.

La decisin entre comenzar en modo 2D o 3D determina algunos ajustes para el


Editor de Unity - tal como si las imgenes son importadas como texturas o sprites. No
se preocupe de tomar la decisin equivocada, usted puede cambiar entre el modo 2D
o 3D en cualquier momento sin importar el modo que usted configure cuando usted
creo el proyecto. (Ver los 2D and 3D Mode Settings.) Aqu hay unas pautas que lo
deberan ayudar a escoger.

3D Completo

Algunas escenas 3D de los proyectos ejemplo de Unity en el Asset Store

Los juegos 3D usualmente hacer uso de geometra de tres dimensiones con


materiales y texturas renderizadas en las superficies de estos objetos para hacerlos
parecer como entornos slidos, personajes y objetos que componen su juego del
mundo. La cmara puede moverse alrededor de la escena libremente, con una luz y
sombras emitindose de manera realista en el mundo. Los juegos 3D usualmente
renderizan la escena utilizando perspectiva, por lo que los objetos parecen ms
grande en la pantalla a medida que se acercan a la cmara. Para todos los juegos que
encajen en esta descripcin, escoja el modo 3D.

- 29 -
3D Ortogrfico

Algunos juegos 3D utilizando una vista Ortogrfica

A veces los juegos utilizan geometra 3D, pero utilizan una cmara ortogrfica en vez
de una perspectiva. Esto es una tcnica comn utilizada en juegos que le dan a usted
una vista panormica de la accin, y a veces se llama 2.5D. Si usted est haciendo un
juego as, usted debera tambin utilizar el editor en modo 3D, ya que aunque no haya
una perspectiva, usted va a comenzar a trabajar con modelos 3D y assets. Usted va a
necesitar cambiar su [cmara(CamerasOverview) y vista de escena a ortogrfico sin
embargo. (escenas de arriba de Synty Studios y BITGEM)

2D Completo

Algunos ejemplos de tipos de juego 2D tpicos

Muchos juegos 3D utilizan grficas planas, a veces llamadas sprites, las cuales no
tienen geometra en tres dimensiones en absoluto. Estas son dibujadas a la pantalla
como imgenes planas, y la cmara del juego no tiene perspectiva. Para este tipo de
juego, usted debera iniciar el editor en modo 2D.

- 30 -
Gameplay 2D con grficas 3D

Un gameplay de un juego 2D de desplazamiento lateral, pero con grficas 3D

Algunos juegos 3D utilizan geometra 3D para el entorno y personajes, pero se limita


el gameplay a dos dimensiones. Por ejemplo, la cmara puede mostrarse como una
vista de desplazamiento lateral y el jugador puede solamente moverse en dos
dimensiones, pero el juego todava utiliza modelos 3D para los obstculos y un
perspectiva 3D para la cmara. Para estos juegos, el efecto 3D puede servir como algo
de estilo en vez de un propsito funcional. Este tipo de juego tambin es a veces
referido como 2.5D. Aunque el gameplay es en 2D, usted estar manipulando
modelos 3D para construir el juego por lo que usted debera comenzar el editor en
modo 3D.

Gameplay 3D y grficas, con una cmara perspectiva

Un estilo de juego 2D de teatro de cartn, dando un efecto de movimiento de


paralaje

Este es otro estilo popular de un juego 2D, utilizando grficos 2D pero con una cmara
de perspectiva para obtener un efecto de scroll parallax. Esta es un estilo de escena
de teatro de cartn, dnde todos los grficos son planos, pero arreglados en

- 31 -
diferentes distancias de la cmara. En este caso, es bien probable que el
modo 2D encajar con su desarrollo. Sin embargo, usted querr cambiar el modo de
proyeccin de la cmara de su juego a Perspective y el modo del scene
view a 3D. (escena de arriba de One Point Six Studio)

Otros estilos
Usted podr tener planes para un proyecto que encaje con las descripciones de
arriba, o podra tener algo completamente diferente o nico en mente! Cualquier que
sea sus planes, ojal que lo de arriba le pueda dar una idea en qu modo comenzar el
editor, y recuerde que usted puede cambiar de modos en cualquier momento.

Usted puede leer ms acerca de cmo cambiar entre los modos 2D y 3D y encontrar
en ms detalle cmo los modos difieren aqu: Ajustes del modo 2D y 3D.

Informacin til de proyectos 2D


En cualquier tipo de proyecto en que usted est trabajando, 2D o 3D, hay algunas
pginas tiles para ayudarlo a comenzar. Tambin hay muchas pginas especficas
para caractersticas 2D.(Ver tambin la seccin de Unity 2D del Manual.)

Comenzando con Unity


Unity Basics

Creando escenas

Creando Gameplay

Visin general 2D
Gameplay en 2D

- 32 -
Empezando

Iniciando Unity por primera vez


Siempre que lance el editor de Unity, se muestra la Pantalla de Inicio. Si no existe
ningn proyecto de Unity en su ordenador, o Unity no sabe dnde se encuentran,
pedir que se cree un proyecto.

Para comenzar, puede hacer clic en New project lo que le llevar a la vista Crear
Proyecto de la Pantalla de Inicio. Para averiguar ms, vea la seccin sobre esto
en Creando un Proyecto. Alternativamente, si ya tiene un proyecto Unity en su
ordenador, puede abrirlo desde esta pantalla. Vea Abrir un Proyecto para averiguar
ms.

La Pantalla de Inicio se muestra al comenzar, haga clic en Nuevo proyecto para


empezar

Creando un Proyecto
Cada vez que inicie el editor de Unity. la Pantalla de Inicio se mostrar. Desde ah,
puede seleccionar NEW en la esquina superior derecha para cambiar a la vista Crear
Proyecto.

- 33 -
En la esquina superior derecha de la Pantalla de Inicio, seleccione Nuevo para abrir la
vista Crear Proyecto

Para mostrar la vista Crear Proyecto de la Pantalla de Inicio cuando ya est en el


editor de Unity, seleccione New Project desde el men File.

Archivo>Nuevo Proyecto - Muestra la vista Crear Proyecto de la Pantalla de Inicio


dentro del editor de Unity

Desde la vista Crear Proyecto de la Pantalla de Inicio, puede nombrar, establecer


opciones, y especificar la localizacin de su nuevo proyecto.

- 34 -
La vista Crear Proyecto de la Pantalla de Inicio

Para crear un nuevo proyecto:

1.El nombre por defecto para New Unity Project pero puede cambiarlo siempre que
quiera. Escriba el nombre con el que quiere llamar a su proyecto en el campo Project
name.

2.La localizacin por defecto para su carpeta personal en su ordenador, pero puede
cambiarla. BIEN POR (a) Escriba aqu dnde quiere almacenar su proyecto en su
ordenador en el campo Location. O (b) Haga clic en los tres puntos azules . Esto
mostrar el Finder de su ordenador (Mac OS X) o el Explorador de Archivos (Windows).

3.Entonces, en el Finder o en el Explorador de Archivos, seleccione la carpeta de


proyecto en la que quiera guardar su nuevo proyecto, y seleccione Elegir.

4.Seleccione 3D o 2D para su tipo de proyecto. Por defecto es 3D, resaltado en rojo


para mostrar que est seleccionado. (La opcin 2D hace que el editor de Unity
muestre sus caractersticas, y la opcin 3D muestra las caractersticas 3D. Si no est
seguro de qu elegir, djelo en 3D; puede cambiar esta configuracin ms tarde.)

5.Hay una opcin para seleccionar Asset packages para incluir en su proyecto. Los
paquetes de Assets son contenido pre-elaborado, como imgenes, estilos, efectos de

- 35 -
iluminacin y y controles de personaje en juego, entre otras tiles herramientas de
creacin del juego y contenidos. Los paquetes de assets ofrecidos aqu son gratuitos,
empaquetados con Unity, y puede usarlos para comenzar con su proyecto. BIEN
PUEDE: si no quiere importar esos assets empaquetados, o no est seguro,
simplemente ignore esta opcin; puede aadir estos assets y muchos otros
posteriormente va el editor de Unity. O: Si no quiere importar esos assets
empaquetados ahora, seleccione Asset packages_ para mostrar la lista de assets
disponible, marque los que desee, y haga clic en Done__.

6.Ahora seleccione Create project y todo estar listo!

opciones de paquetes de Assets - puede


elegir aadirlas ahora o ignorar esta opcin y aadirlas ms adelante

Abriendo un Proyecto
Cuando usted inicie el editor de Unity, se muestra y abre la vista del Project de la
pantalla de inicio. De aqu usted puede escoger el proyecto que usted desea abrir.
Para mostrar la vista de Abrir Proyecto de la Pantalla de Inicio cuando ya est en el
editor de Unity, seleccione Open Project desde el men File.

- 36 -
- 37 -
Aprendiendo la Interfaz
Tome su tiempo parar mirar la interfaz del editor y vulvase familiar con esta. La
ventana principal del editor se compone de ventanas con pestaas que pueden se re-
arregladas, agrupadas o des-adjuntadas y minimizadas.

Esto significa que el aspecto del editor puede ser diferente de un proyecto al otro, y
de un desarrollador al siguiente, dependiendo en la preferencia personal y qu tipo
de trabajo est haciendo.

El arreglo predeterminado de las ventanas le da a usted un acceso prctico a las


ventanas ms comunes. Si usted no est familiarizado todava con las ventanas
diferentes en Unity, usted puede identificarlas por su nombre en la pestaa. Las
ventanas ms comunes y tiles se muestran en sus posiciones por defecto, abajo:

- 38 -
La ventana del Proyecto

The Project Window (ventana del proyecto) muestra sus assets de librera que estn
disponibles para ser usados. Cuando usted importe sus assets a su proyecto, estos
aparecen aqu. Averigue ms acerca de la ventana Project (proyecto).

- 39 -
La Scene View (vista de escena)

La Scene View le permite a usted una navegacin visual y editar su escena. La scene
view puede mostrar una perspectiva 2D o 3D dependiendo en el tipo de proyecto en
el que est trabajando. Averigue ms acerca de la Scene View y la Game View.

- 40 -
La ventana de Jerarqua

- 41 -
Flujo de trabajo de los Assets (Asset
Workflow)
Estos pasos le darn a usted una visin general acerca de los principios bsicos de
trabajar con assets en Unity.

Un asset es una representacin de cualquier item que puede ser utilizado en su juego
o proyecto. Un asset podra 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. Tambin hay otros tipos de asset que pueden ser creados
dentro de Unity, tal como un Animator Controller, un Audio Mixer o una Render
Texture.

Algunos de los tipos de Asset que pueden ser importados a Unity

- 42 -
Objetos Primitivos
Unity puede trabajar con modelos 3D de cualquier forma que puedan ser creados con
un software de modelado. Sin embargo, hay un nmero de tipos de objetos primitivos
que pueden ser creados directamente dentro de Unity,
principalmente Cube, Sphere, Capsule, Cylinder, Plane and Quad. Estos objetos son
tiles de vez en cuando en su propio derecho (un plano es utilizado comnmente
como una superficie de suelo plana, por ejemplo) pero estos tambin ofrecen una
manera rpida de crear marcadores de posicin y prototipos para propsitos de
pruebas. Cualquiera de las primitivas pueden agregarse a la escena utilizando el item
apropiado en el men GameObject > 3D Object.

Cubo

Este es un cubo simple con lados de una unidad de largo, texturizado para que la
imagen se repita en cada una de las seis caras. Como es, un cubo no es un objeto muy
comn en la mayora de los juegos pero una vez es escalado, es muy til para
paredes, postes, cajas, pasos, y otros items similares. Tambin es un objeto que sirve
como marcador de posicin para programadores para utilizar durante el desarrollo
cuando un modelo finalizado todava no est disponible. Por ejemplo, el cuerpo de
carro puede ser burdamente modelado utilizando una caja alargada con las
dimensiones correctas. Aunque esto no es til para el juego terminado, es bueno
como una representacin simple del objeto para probar el cdigo de control del carro.
Ya que los bordes de un cubo son de una sola unidad de grandes, usted puede revisar

- 43 -
las proporciones de un mesh importado a la escena agregando un cubo cerca de este
y comprando tamaos.

Esfera

Esta es una esfera de un dimetro de una unidad (ie, un radio de 0.5 unidad - media
unidad), texturizada para que la imagen entera se envuelva alrededor una vez con la
parte de arriba y abajo pellizcado-aplastado en los polos. Las esferas son
obviamente muy tiles para representar pelotas, planetas y proyectiles pero una
esfera semi-transparente puede tambin hacer un bonito dispositivo GUI para
representar el radio de un efecto.

Cpsula

Una cpsula es un cilndrico con unas tapas hemisfricas al final. El objeto es una
unidad en dimetro y dos unidades de alto (El cuerpo es una unidad y dos tapas son

- 44 -
media unidad cada una). Es texturizada para que la imagen se envuelva exactamente
una vez, pellizcada-apretada en el pice de cada hemisferio. En particular, la fsica de
un objeto redondo es a veces mejor que aquellos de una caja para ciertas tareas.

Cilindro

Este es un cilindro simple que es dos unidades de alto y una unidad de dimetro,
texturizado para que la imagen se envuelva una vez alrededor de la forma del tubo
del cuerpo pero tambin aparece separadamente en dos planos, con terminaciones
circulares. Los cilindros son muy tiles para crear postes, varillas y llantas pero usted
debera tener en cuenta que la forma del collider es de verdad una cpsula (no hay un
collider cilindro primitivo en Unity). Usted debera crear un mesh de la forma
apropiada en el programa de modelado y adjuntar un mesh collider si usted necesita
un collider cilndrico preciso para propsitos de fsica.

- 45 -
Plano

Este es un cuadrado plano con bordes con diez unidades de largo orientado en el
plano XZ del espacio de coordenada local. Es texturizado para que la imagen completa
aparezca exactamente una vez dentro del cuadrado. Un plano es til para la mayora
de tipos de superficies planas, como lo son los pisos y las paredes. Un superficie
tambin se necesita a veces para mostrar imagenes o pelculas en GUI y efectos
especiales. Aunque un plano puedeser utilizado para cosas como esto, la primitiva
simple quad es a veces un ajuste ms natural para la tarea.

Quad

- 46 -
Importando Assets
Los Assets creados afuera de Unity deben ser trados a Unity al tener el archivo ya sea
guardado directamente a la carpeta Assets de su proyecto, o copiado a esa carpeta.
Para muchos formatos comunes, usted puede guardar su archivo fuente
directamente a la carpeta Assets de su proyecto y Unity ser capaz de leerlo. Unity va
a notar cuando usted ha guardado nuevos cambios al archivo y va a re-importarlo si
es necesario.

Cuando usted cree un proyecto de Unity, usted est creando una carpeta - llamada
por su proyecto - que contiene las siguientes sub-carpetas:

La estructura bsica de archivos de un proyecto de Unity

La carpeta Assets es dnde usted debera guardar o copiar los archivos que usted
quiere utilizar en su proyecto.

Los contenidos de la Project Window en Unity muestra los items en su carpeta de


Assets. Por lo que si usted guarda o copia un archivo a su carpeta de Assets, este ser
importado y ser visible en su Project Window.

Unity detectar archivos automticamente a medida que son agregados a la


carpeta Assets, o si son modificados. Cuando coloque cualquier asset en la carpeta
Assets, vers al asset aparecer en su Project View.

- 47 -
La Project Window muestra assets que han sido importados a su proyecto

Si usted arrastra un archivo a la Project Window de Unity desde su computador (ej,


desde el Finder on Mac, o el Explore en Windows), este ser copiado a su carpeta
Assets, y va a aparecer en al Project Window.

Los items que usted ve en la Project Window representan (en la mayora de casos)
archivos actuales en su computador, y si usted los borra dentro de Unity, usted est
borrndolos de su computador tambin.

La relacin entre la carpeta Assets en su proyecto de Unity en su computador, y la


Project Window dentro de Unity

La imagen de arriba muestra un ejemplo de unos cuantos archivos y carpetas dentro


de la carpeta Assets del proyecto de Unity. Usted puede crear tantas carpetas como
usted quiera y utilizarlas para organizar sus Assets.

Usted se dar cuenta en la imagen de arriba que archivos .meta listados en el sistema
de archivos, pero no son visibles en la Project Window de Unity. Unity crea estos

- 48 -
archivos .meta para cada asset y carpeta, pero esto estn ocultos por defecto, por lo
que nos podra ver en su Finder/Explorer tampoco.

Estos contienen informacin importante acerca de cmo el asset es utilizado en el


proyecto y estos deben quedarse con el archivo asset con el cual se relacionan, por lo
que si usted mueve o re-nombra un archivo asset en el Explorer/Finder, usted
tambin debe mover/re-nombrar el archivo meta para que coincida.

La manera ms simple de mover o re-nombrar sus assets es siempre hacerlo dentro


de la carpeta de proyecto de Unity. De esta manera, Unity va a automticamente
mover o re-nombrar el archivo meta correspondiente. Si usted quiere, usted puede
leer ms acerca de archivos .meta y qu sucede detrs de escenas del proceso de
importacin.

Si usted quiere traer colecciones de assets a su proyecto, usted puede utilizar


los Asset Packages. Ver Asset Packages para ms detalles.

Algunos tipos comunes de Asset


Archivos de Imagen
La mayora de tipos de archivo de imagen son soportados, tal como BMP, TIF, TGA,
JPG, y PSD. Si usted guarda sus archivos layered de Photoshop (.psd) a su carpeta de
Assets, estos sern importados como imgenes aplanadas. Usted puede averiguar
ms acerca de importar imgenes con canales alpha de photoshop, o importando
imgenes como sprites.

Archivos de modelos 3D
Si usted guarda sus archivos 3D de la mayora del software de paquetes 3D en su
formato nativo (ej, .max, .blend, .mb, .ma) a su carpeta de Assets, estos sern
importados al llamar de vuelta a su plugin(*) de exportacin de paquetes 3D FBX. De
manera alternativa usted puede exporta como FBX de su app 3D a su proyecto de
Unity. Lea ms acerca de importar archivos 3D de su app 3D.

Meshes & Animaciones


Con cualquier software de 3D que ests usando, Unity importar los meshes y
animaciones desde cada archivo. Para ver una lista de aplicaciones que son
soportadas por Unity, favor ir a esta pgina.

- 49 -
Su archivo mesh no necesita tener una animacin para ser importada. Si usted utiliza
animaciones, usted tiene la decisin de importar todas las animaciones de un solo
archivo, o importarlas en archivos separados, cada una con una animacin. Para ms
informacin acerca de importar animaciones, por favor ver importando animaciones.

Archivos de Audio
Si usted tiene archivos de audio sin comprimir a su carpeta de Assets, estos sern
importados de acuerdo a los ajustes de compresin especificados. Lea ms acerca de
la importacin de archivos de audio.

Otros tipos de Asset


En la mayora de casos, su archivo fuente original nunca es modificado por Unity,
incluso a travs dentro de Unity usted puede a menudo escoger entre varias maneras
de comprimir, modificar, o de procesar el asset. El proceso de importacin lee su
archivo fuente, y crea una representacin lista de para el juego de su asset
internamente, al coincidir con sus ajustes de importacin. Si usted modifica los
ajustes de importacin para un asset, o hace un cambio al archivo fuente en la
carpeta Asset, esto va a causar que Unity re-importe el asset nuevamente para reflejar
los nuevos cambios.

Tenga en cuenta: Importar formatos 3D nativos requiere que la aplicacin 3D sea


instalada en el mismo computador que en Unity. Esto se debe a que Unity utiliza el plug in
del exportador FB de la aplicacin 3D para leer el archivo. Alternativamente, usted puede
exportar directamente como FBX desde su aplicacin y guardarlo a su carpeta de Projects.

Ver tambin:

Asset Packages

Importing Meshes

Formatos 3D

Animation Import

Materials and Shaders

Textures and Videos

Sprite Editor

Sprite Packer

- 50 -
Procedural Materials

Audio Files

Tracker Modules

- 51 -
Import Settings (Ajustes de Importacin)
Cada tipo de asset que Unity soporta tiene un conjunto de Import Settings (ajustes de
importacin), que afectan cmo el asset aparece o se comporta. Para ver los import
settings de un asset, seleccione el asset en el Project View. Los import settings para
este asset van a aparecer en el Inspector. Las opciones que son mostradas van a
variar dependiendo en el tipo de asset que fue seleccionado.

Por ejemplo los import settings para una imagen le va a permitirle a usted escoger si
es importada como una textura, un 2D sprite, o un normal map. Los import settings
de un archivo FBX le permite a usted ajustar la escala, generar normales, o
coordenadas de lightmap, y separar y cortar clips de animacin definidos en el
archivo.

Haciendo click en un asset de imagen en la ventana del Proyecto muestra los import
settings para ese asset en el Inspector

Para otros tipos de asset, los import settings se vern diferente. Los diferentes tipos
de ajustes que usted ver se relacionan al tipo de asset seleccionado. Aqu hay un
ejemplo de un asset de Audio, con sus import settings (ajustes de importacin)
mostradas en el inspector.

- 52 -
Un asset de audio seleccionado en la ventana del Proyecto muestra los import
settings del audio para ese asset en el Inspector

Si usted est desarrollando un proyecto multo-plataforma, usted puede anular los


ajustes default (predeterminados) y asignar unos import settings diferentes en una
base por plataforma.

- 53 -
Importando desde la Asset Store
El Asset Store de Unity es el hogar de una creciente biblioteca de assets comerciales y
gratuitos creados por Unity Technologies y miembros de la comunidad. Hay una gran
cantidad de assets disponibles, desde texturas, modelos y animaciones hasta
ejemplos de proyectos completos, tutoriales y extensiones del editor. Estos assets son
accesibles desde una interfaz simple dentro del Editor Unity y son descargados e
importados directamente en sus proyectos.

Los usuarios de Unity pueden volverse publicadores en el Asset Store, y vender


contenido que estos han creado. Este proceso es documentado en ms detalle ms
tarde de esta seccin.

Acceso a la Asset Store y Navegacin


Usted puede abrir la ventana de la Asset Store seleccionando Window->AssetStore del
menu principal. En su primera visita, se le va a solicitar la creacin de una cuenta de
usuario gratuita que usar para tener acceso a la tienda.

- 54 -
Pgina principal del Asset Store.

La tienda provee una interfaz tipo browser que le permite a uno navegar ya sea por
bsqueda de texto libre o explorando los paquetes y categoras. A la izquierda de la
barra de herramientas principal estn los botones familiares de browsing para
navegar a travs de la historia de los objetos vistos:-

A la derecha de estos, estn unos botones para mirar el Download Manager y para ver
el contenido actual de su carrito de compra.

El Download Manager le permite a uno ver los paquetes que uno ya ha comprado y

- 55 -
tambin buscar e instalar cualquier actualizacin. Adicionalmente, los paquetes
estndar suministrados con Unity se pueden ver, y agregar al proyecto con la misma
interfaz.

Gestor de descargas.

Ubicacin del archivo Asset descargado


Uno rara vez, o nunca, va a necesitar acceder directamente a un archivo descargado
de la Asset Store. Sin embargo, si lo necesita, puede encontrarlo en
~/Library/Unity/Asset Store

en el Mac y en
C:\Users\accountName\AppData\Roaming\Unity\Asset Store

en Windows. Esas carpetas contienen subcarpetas que corresponden a un


proveedor particular de la Asset Store - los archivos de asset estn contenidos en las
subcarpetas adecuadas.

- 56 -
Asset Packages (Paquetes de assets)
Los packages de Unity son una manera til de compartir y re-utilizar proyectos al igual
que colecciones de assets; Los Standard Assets de Unity e items en la Asset Store de
Unity son proporcionados en packages (paquetes), por ejemplo. Los Packages son una
coleccin de archivos y datos de proyectos de Unity, o elementos de proyectos, los
cuales son comprimidos y almacenados en un solo archivo, similar a archivos Zip. Al
igual que archivos Zip, un package (paquete) mantiene su estructura original de
directorios cuando es desempacado, al igual que los meta-datos acerca de los assets
(al igual que ajustes de importacin y vnculos a otros assets).

En Unity, la opcin del men Export Package comprime y almacena la coleccin,


mientras que el Import Package desempaca la coleccin a su proyecto de Unity
abierto.

Esta pgina contiene informacin acerca de:

Import Package: - Standard Asset Packages - Custom Packages

Export Package

Exportando Packages (paquetes) actualizados

Import Package
Usted puede importar Standard Asset Packages,los cuales son colecciones de assets
pre-hechos y proporcionados con Unity, y Custom Packages, los cuales son hechos
por personas utilizando Unity.

Escoja Assets > Import Package > para importar ambos tipos de package (paquete).

- 57 -
Fig 1: Asset>Import Package men

Standard Asset Packages


Los Standard Assets de Unity consisten de varios diferentes packages (paquetes): 2D,
Cameras, Characters, CrossPlatformInput, Effects, Environment, ParticleSystems,
Prototyping, Utility, Vehicles.

Para importar un nuevo custom package (paquete personalizado):

1.Abra el proyecto al cual usted quiere importar los assets.

2.Escoja Assets > Import Package > ms el nombre del package (paquete) que usted
quiere importar, y la caja de dialogo Import Unity Packagese muestra, con todos los
items en el package (paquete) pre-marcados, listos para instalar. (Ver Fig 2: New install
Import Unity Package Dialog Box.)

3.Seleccione Import y Unity coloca el contenido del paquete a la carpeta Standard


Asset, la cual usted puede acceder desde su Project View.

- 58 -
Fig 2: New install Import Unity Package dialog box

Custom Packages
Usted puede importar custom packages (paquetes personalizados) que han sido
exportados desde sus propios proyectos o desde proyectos hechos por otros usuarios
de Unity.

Para importar un nuevo custom package (paquete personalizado):

1.Abra el proyecto al cual usted quiere importar los assets.

2.Escoja Assets > Import Package > Custom Package para traer el Explorador de
Archivos (Windows) o el Finder (Mac).

3.Seleccione el package (paquete) que usted quiere del Explorador o Finder, y la caja
de dialogo Import Unity Package se muestra, con todos los items en el package
(paquete) pre-marcados, listos para instalar. (Ver Fig 4: New install Import Unity Package
dialog box.)

- 59 -
4.Seleccione Import y Unity coloca el contenido del package (paquete) a la
carpeta Assets, la cual usted puede acceder desde su Project View.

Fig 4: New install Import Unity Package dialog box

Export Package
Utilice Export Package para exportar su propio Custom Package.

1.Abra el proyecto del cual usted quiere exportar assets.

2.Escoja Assets > Export Package del men para traer la caja de dialogo Exporting
Package. (Ver Fig 6: Exporting Package dialog box.)

3.En la caja de dialogo, seleccione los assets que usted quiere incluir en el package
(paquete) haciendo click en las cajas para que estn marcadas.

4.Deje la caja include dependencies marcada para seleccionar automticamente


cualquiera de los assets utilizados por aquellos que usted tiene seleccionado.

- 60 -
5.Haga click en Export para traer un Explorador de Archivos (Windows) o Fi

- 61 -
Assets Estndar
Unity es descargado con mltiples Standard Assets. Estos son una coleccin de
assets que son utilizados bastante por la mayora de los clientes de Unity. Estos son:
2D, Cmaras, Personajes, CrossPlatformInput, Efectos, Entorno, ParticleSystems,
Prototyping, Utilidad, Vehculos.

Unity transfiere Standard Assets dentro y fuera de proyectos utilizando


Unity packages

Importando Assets Estndar


Ver Asset Packages para informacin acerca de instalar (importar) Standard Assets, al
igual que compartir Custom Packages entre proyectos y va el Asset Store.

Men Asset>Import Package

Los Assets Estndar No se Actualizan Automticamente


Cuando usted cree un nuevo proyecto en Unity, usted puede escoger incluir
colecciones Standard Assets a su proyecto. Unity copia los assets que usted escoja
para incluir desde la carpeta de instalacin de Unity a su nuevo carpeta del proyecto.
Esto significa que si usted actualiza su Editor de Unity a una nueva versin,
los Standard Assets que usted ya tiene importados a su proyecto no se actualizan:
Usted necesita actualizarlos manualmente.

- 62 -
RECOMENDACIN: Una nueva versin de los Standard Asset podran comportarse
diferente a su instalacin existente (por razones de rendimiento o calidad, por
ejemplo). Una nueva versin podra hacer que su proyecto se vea o se comporte
diferente y usted tendra que necesitar re-ajustar sus parmetros. Revise el contenido
del package y las notas de lanzamiento (release) de Unity antes de que usted decida
re-instalar.

- 63 -
Las ventanas principales
Esta seccin proporciona un tour detalla de la mayora ventanas del editor, y cmo
hacer un uso completo de ellas.

The Project Window (La ventana del proyecto)

The Scene View La ventana de escena

The Hierarchy Window La ventana de Jerarqua

The Inspector Window La ventana del Inspector

The Toolbar La barra de herramientas

The Game View La ventana del juego

See also the Knowledge Base Editor section.

- 64 -
La ventana Project

En esta vista, puede acceder y gestionar los assets que pertenezcan a su proyecto.

El panel izquierdo del navegador muestra la estructura de carpetas del proyecto como
una lista de jerarqua. Cuando una carpeta es seleccionada de una lista haciendo click,
su contenido va a ser mostrado en el panel a la derecha. Usted puede hacer click en el
tringulo pequeo para expandir o colapsar la carpeta, mostrando cualquier carpetas
anidadas que contenga. Mantenga presionado Alt mientras usted hace click para
expandir o colapsar cualquier carpetas anidas recursivamente.

- 65 -
Los assets individuales son mostrados en el panel de la mano derecha como iconos
que indican su tipo( script, material, sub-carpeta, etc). Los iconos pueden ser
redimensionados usando el deslizador que est en la parte inferior del planel; sern
remplazados por una vista de una lista de jerarqua si el deslizador es movido hacia el
extremo izquierdo. El espacio a la izquierda del deslizador muestra el elemento
actualmente seleccionado, incluyendo una ruta completa al elemento si se est
realizando una bsqueda.

Encima de la lista de la estructura del proyecto hay una seccin de Favorites en


donde se puede colocar elementos que frecuentemente se usen para tener un acceso
fcil a estos. Puede arrastrar elementos de la lista de la estructura del proyecto a los
Favoritos y tambin guardar las consultas de bsqueda ah. (mirar Buscando abajo).

Justo encima del panel est una ruta de navegacin que muestra la ruta a la carpeta
que actualmente se est viendo. Los elementos separados de la ruta pueden ser
oprimidos(haciendo click) para una navegacin fcil alrededor de la jerarqua de la
carpeta. Cuando se busque, esta barra cambia para mostrar el rea que se est
buscando( la Carpeta raz de Assets, la Carpeta Seleccionada o el Asset Store) junto
con una cuenta de assets gratuitos y pagos disponibles en la tienda, separados por
una barra. Hay una opcin en seccin General de la ventana de preferencias de Unity
para desactivar la visualizacin de la cuenta de hits del Asset Store si no son
requeridos.

El breadcrumb trail (camino con rastros) muestra la ruta a la carpeta que


actualmente est viendo.

Junto a la esquina superior de la ventana del navegador se encuentra la barra de


herramientas.

Ubicado en la parte izquierda de la barra de herramientas, el Create men le permite


a uno agregar nuevos assets y sub-carpetas a la carpeta actual. A su derecha hay un
conjunto de herramientas que le permite a uno buscar el asset en su proyecto.

La ventana del men proporciona la opcin de cambiar a una versin de una columna
de la vista del proyecto, esencialmente solo la estructura de la lista jerarquizada sin la
vista de iconos. El cono de bloqueo alado del men le permite congelar el contenido

- 66 -
actual del view( ie, que dejen de ser cambiados por acontecimientos en otras partes)
de una manera similar al bloqueo del inspector.

En la esquina superior derecha, seleccione el men desplegable para cambiar el


diseo (layout) de la vista, y oprima el icono lock para congelar la vista

Buscando
El navegador dispone de una funcin de bsqueda muy potente que especialmente
es til en el momento de ubicar assets en grandes o proyectos desconocidos. La
bsqueda bsica va a filtrar assets de acuerdo al tipo de texto en el cuadro de
bsqueda.

Si se escribe ms de un trmino de bsqueda se estrechar la bsqueda, por lo tanto


si se escribe coastal scene va a encontrar assets con ambos coastal y scene en el
nombre (pe, los trminos se asocian con una conjuncin Y).

A la derecha de la barra de bsqueda hay tres botones. El primero le permite a uno


filtar an ms los assets encontrados por la bsqueda de acuerdo al tipo.

- 67 -
Continuando a la derecha, el siguiente botn filtra assets de acuerdo a su
etiqueta( Label) ( las etiquetas de un asset se pueden establecer en Inspector). Dado
que el nmero de etiquetas puede ser potencialmente muy grande, el men de
etiquetas tiene su propia caja de filtro mini-bsqueda.

- 68 -
Usando el Scene View

El Scene View es su sandbox interactivo. Usted va a usar el Scene View para


seleccionar y posicionar entornos, el jugador, la cmara, enemigos, y todos los
dems GameObjects. Maniobrar y manipular objetos dentro el Scene View son
algunas de las ms importantes funciones en Unity, por lo que es importante hacerlas
rpidamente.

- 69 -
Navegacin del Scene View
El Scene View tiene un conjunto de controles de navegacin que le ayuda moverse
alrededor rpidamente y efectivamente

Movimiento de Flecha(Arrow Movement)


Usted puede utilizar las Arrow Keys para moverse alrededor de la escena tal como si
estuviera caminando a travs de ella. Las flechas de arriba y abajo mueven la cmara
hacia delante y hacia atrs en la direccin en la que est enfrente. Las flechas de
izquierda y derecha mueven la vista hacia los lados. Deje oprimido la tecla Shift con
una flecha para moverse ms rpido.

Enfocarse(Focusing)
Si usted selecciona un GameObject en la jerarquia, entonces mueva el mouse sobre la
scene view y presione F, la vista se movera para centrarse en el objeto. Esta
caracteristicas es referida como Frame Selected debajo del menu Edit. Sin
embargo, si usted quisiera bloquear la vista al objeto incluso cuando el objeto se esta
moviendo presione Shift+F, esta caracteristica se refiere como Lock View to
Selected debajo del menu Edit.

Moverse,Orbitar y Acercarse (Move,Orbit y Zoom)


Moverse, orbitar y acercarse son operaciones claves en la navegacin del scene view,
entonces Unity ofrece varias alternativas para realizarlas para una conveniencia
mxima

Usando el Hand Tool


Cuando el Hand Tool es seleccionado (Acceso Rpido: Q), los siguientes controles del
mouse estn disponibles:

Move: haga click y arrastre para mover la cmara alrededor.

- 70 -
Orbit: Deje oprimido Alt y haga click y arrastre para orbitar la
cmara alrededor del actual punto de pivote. Esta opcin no est disponible en modo
2D ya que la vista es ortogrfica.

Zoom: Deje oprimido Alt y haga click y arrastre para acercarse a


la Scene View. En Mac usted tambien puede mantener oprimido Control y oprima y
arrastre mas bien.

Mantener pulsado Shift aumentar la velocidad de movimiento y zoom.

Claves de Acceso Rpido Sin usar la Hand Tool


Para una eficiencia extra, todos de estos controles pueden ser usados
independientemente de la herramienta transform(transform tool) seleccionada. Los
controles ms convenientes dependen en qu mouse o track-pad est usando:

Action
Moverse
*Orbitar(Orbit)
Zoom
* No disponible en modo 2D.

Modo Flythrough
El modo Flythrough le permite navegar el Scene View volando en primera persona
similar a cmo se navega en muchos juegos.

Haga click y mantenga pulsado el botn derecho del ratn.

Ahora puede mover la vista usando el mouse, y usar las teclas WASD para mover
izquierda/derecha adelante/atrs y las teclas Q y E para mover arriba y abajo.

Mantener oprimido Shift har que se mueva ms rpido.

El modo Flythrough es diseado para Perspective Mode. En__Isometric Mode__,


dejando oprimido el botn derecho del mouse, y mover el mouse va a orbitar la
cmara.

Tenga en cuenta que en 2D mode, el modo flythrough no est disponible. Dejando


oprimido el botn derecho del mouse mientras mueva el mouse, le permite a usted
desplazarse por el Scene View.

- 71 -
Scene Gizmo
En la esquina superior derecha del Scene View est el Scene Gizmo. Esto muestra la
orientacin de la cmara del Scene View, y le permite modificar rpidamente el ngulo
de visin.

Usted puede hacer click en cualquiera de los brazos de los ejes conicos para snap la
Camara de la Scene View al eje que representa (eg vista de encima, vista lateral
izquierdo, vista frontal, etc.)

Usted tambien puede toggle la proyeccion de la scene view entre los modos
perspective y orthographic (ortografico) (a veces llamado isometric) al hacer click en
el cubo en el centro del Scene Gizmo, o el texo debajo de este. La vista orthographic
no tiene perspectiva, y es util combinarlo con uno de los brazos de los ejes conicos
para obtener una elevacion frontal o lateral, o una vista plana.

Una escena mostrada en el modo perspective (izquierdo) y orthographic (derecho)

- 72 -
La misma escena vista en una vista de encima y frontal, en modo orthographic

(Escena encima del BITGEM)

Si usted lograr llevar su scene view a un estado raro (al revs, o un ngulo que
simplemente encuentra confuso!) usted puede siempre usar shift-click en el cubo al
centro del Scene Gizmo para lograr una vista de perspectiva con un ngulo que est
mirando la escena del lado y un poco desde arriba.

Tenga en cuenta que en 2D mode, el Scene Gizmo no va a ser mostrado ya que la


nica opcin es tener la vista mirando perpendicularmente en el plano XY.

- 73 -
Posicionando GameObjects
Cuando construya sus juegos, usted va a poner muchos objetos diferentes en el
mundo de su juego.

Transladar(Translate), Rotar(Rotate), y Escalar(Scale)


Use las herramientas del Transform en la Barra de Herramientas para Translate
(trasladar), Rotate (girar), y Scale (escalar) GameObjects individuales. Cada uno tiene
un Gizmo correspondiente que aparece alrededor del GameObject seleccionado en el
Scene View. Usted puede utilizar el mouse y manipular el eje de cualquier Gizmo para
cambiar el componente Transform del GameObject, o puede escribir valores
directamente a los campos numricos del componente Transform en el Inspector.
Cada uno de los tres modos de transform puede ser seleccionados con las teclas de
acceso rpido - W para trasladar, E para rotar y R para escalar y T para RectTransform.
(El RectTransform es utilizado para posicionar elementos UI en vez de posicionar
GameObjects estndar - ver la seccin UI del manual para ms detalles.)

En el centro del gizmo Translate (trasladar), hay tres pequeos cuadrados que pueden
ser utilizados para arrastrar el objeto dentro de un solo plano (i.e. los dos ejes pueden
moverse a la vez mientras que el tercero se mantiene quieto). Si usted tiene un mouse
de tres botones, usted puede hacer click en el botn del medio y arrastrar para
ajustar los ejes que fueron movidos recientemente (la flecha para este eje va a
cambiar a amarilla). Si usted mantiene shift presionado mientras hace click y arrastra
en el centro del Gizmo de Translate, el centro del gizmo cambia a ser un cuadrado
plano, indicando que usted puede mover el objeto alrededor del plano relativo a la
manera en que la cmara de la Scene View est mirando.

- 74 -
Con la herramienta de rotacin seleccionada, usted puede cambiar la rotacin del
objeto haciendo click y arrastrando los ejes del gizmo de la esfera metlica que
aparece alrededor de l. Al igual que con la herramienta de traslacin, el ltimo eje
que fue cambiado ser coloreado amarillo y puede ajustarse ms haciendo click en el
botn del medio del mouse y arrastrando. Piense en los crculos rojos, verdes y azules
como hacer una rotacin alrededor de los ejes rojo, verdes y azules que aparecen en
el modo de traslacin. (Rojo es el eje-x, verde es el eje-y, y azul es el eje-z.) Finalmente,
el crculo ms externo puede ser utilizado para girar el objeto alrededor del eje-z de la
scene view. Usted puede pensar de esto como girar alrededor del espacio de pantalla.

La herramienta de escala le permite reescalar el objeto igualmente en todos sus ejes a


la vez haciendo click y arrastrando el cubo en el centro del gizmo. Tambin puede
escalar los ejes individualmente, pero, debera tener cuidado cuando haga esto si hay
objetos hijo ya que el efecto puede ser raro. Nuevamente, el ltimo eje cambiado
aparecer en amarillo y puede ser ajustado arrastrndolo con con el botn del medio
del mouse.

Tenga en cuenta que en modo 2D, el eje Z no puede ser cambiado en la escena
usando los gizmos. No obstante, es til para ciertas tcnicas de scripting usar el eje Z
para otros motivos; usted todava puede establecer el eje Z del Inspector en aquellos
casos.

Para ms informacin en cambiando(transforming) GameObjects, por favor mirar la


pgina del Transform Component.

Palanca de Visualizacin de Gizmo(Gizmo Display Toggles)


Los Gizmo Display Toggles son usados para definir la ubicacin de cualquier
Transform Gizmo.

Gizmo Display Toggles

Para la Posicin:

Center posicionar el Gizmo en el centro de los limites dictados del objeto.

Pivot posicionar el Gizmo en el punto de pivote actual de un Mesh.

Para la Rotacin:

Local mantendr la rotacin del Gizmo relativamente a la del objeto.

- 75 -
Global sujetar el Gizmo a la orientacin espacial del mundo.

Snapping por Unidades


Al arrastrar cualquier eje del Gizmo usando la herramienta de traslacin(Translate
Tool), usted puede mantener oprimida la tecla Control (Commanden Mac) para snap
en incrementos definidos en las Snap Settings.

Usted puede cambiar la distancia de la unidad que est siendo usada en unit
snapping usando el men Edit->Snap Settings

Los ajustes del snapping por unidad de la scene view.

Snapping de superficies
Mientras arrastrar en el centro usando la herramienta de traslacin(Translate Tool),
usted puede mantener oprimido Shift y Control (Command en Mac) para snap el
objeto en la interseccin de cualquier Collider. Esto crea un posicionamiento preciso
de objetos increblemente rpidos.

Look-At Rotation
Mientras use la herramienta de rotacin(Rotate Tool), usted puede mantener
oprimido Shift y Control (Command en Mac) para rotar el objeto hacia un punto en
la superficie de cualquier Collider. Esto hace que la orientacin de los objetos
respecto a los otros sea simple.

Vertex Snapping
Puede ensamblar sus mundos ms fcilmente con una funcin llamada Vertex
Snapping. Esta funcin es una herramienta muy simple pero poderosa en Unity. Le
permite coger cualquier vrtice de un mesh dado y con su mouse colocar el vrtice en
la misma posicin de cualquier mesh que escoja.

Con esto, usted puede ensamblar sus mundos muy rpido. Por ejemplo, puede
alinear tramos de carretera precisamente en un juego de carreras, o posicionar

- 76 -
artculos power up en los vrtices de un mesh.

Usar Vertex Snapping en Unity es sencillo. Simplemente siga estos paso:

Seleccione el mesh que quiera manipular y asegrese que la Transform Tool est
activa.

Oprima y sostenga la tecla V para activar el vertex snapping mode.

Mueva su cursor encima del vrtice de su mesh que quiera usar como punto de
pivote.

Sostenga oprimido el botn izquierdo una vez su cursor est encima del vrtice
deseado y arrastre su mesh junto a cualquier otro vrtice en otro mesh.

Suelte el botn del mouse y la tecla V cuando est feliz con los resultados.

Shift-V acta como una palanca de esta funcionalidad.

Usted puede snap vertex al vrtice, el vrtice a la superficie y el punto de pivote al


vrtice.

- 77 -
Barra de Control del Scene View

La barra de control del Scene View le permite escoger las varias opciones que hay
para ver la escena y tambin controlar si la iluminacin o el audio estn habilitados.
Estos controles solo afectan el scene view durante el desarrollo y no tienen efecto en
el juego construido.

Modo de dibujo (Draw Mode)

El primer men desplegable selecciona qu Draw Mode va a ser usada para


representar la escena. Las opciones disponibles son:

Shading Mode
Textured: mostrar las superficies con sus texturas visibles.

Wireframe: dibujar meshes con una representacin de lineas de dibujo(wireframe).

Textured Wire: muestra los meshes con textura y con un modo de lineas de
dibujo(wireframe) superpuesto.

Miscellaneous
Shadow Cascades: show directional light shadow cascades.

Render Paths: muestra el rendering path para cada objeto utilizando un cdigo de
color: Verde indica deferred lighting, amarillo indica forward rendering y rojo
indica vertex lit.

Alpha: renderizar los colores con alpha.

Overdraw: renderizar objetos como siluetas transparentes. Los colores


transparentes se acumulan, haciendo fcil identificar lugares dnde un objeto se
dibuja encima de otro.

Mipmaps: muestra tamaos de textura ideales usando un cdigo de color: rojo indica
que la textura es ms grande de lo necesario (en la distancia actual y resolucin); el
azul indica que la textura puede ser ms grande. Naturalmente, los tamaos de
textura ideales dependen en la resolucin en la que el juego va a correr y qu tan
cerca la cmara puede llegar a unas superficies en particular.

- 78 -
Deferred
These modes let you view each of the elements of the G-buffer
(Albedo, Specular, Smoothness and Normal) in isolation. See the page on Deferred
Shading for further details.

Global Illumination
The following modes are available to help visualise aspects of the Global
Illumination system: UV
Charts, Systems, Albedo, Emissive, Irradiance, Directionality and Baked. These
modes are described with examples on the GI Visualisations page.

2D, Iluminacin y cambios de Audio

A la derecha del men del render mode estn tres botones que cambian ciertas
opciones del scene view encendidas o apagadas:-

2D: switches between 2D and 3D view for the scene. In 2D mode the camera is
oriented looking towards positive z, with the x axis pointing right and the y axis
pointing up. Lighting: vuelve la iluminacin del scene view(luces, sombreado del objeto,
etc) prendida o apagada. Audio: prende los efectos del audio del scen view prendidos
o apagados.

Men y Botones de Effectos

El men (activado por la flecha pequea a la derecha de la palabra Effects) tiene


opciones para activar o desactivar efectos de renderizacin en la scene view.

Skybox: una textura skybox renderizada en el fondo de la escena. Fog: desvanecimiento


gradual de la vista a un color plano con distancia de la cmara.Flares: Destellos de
lentes en las luces. Animated Materials: debera material animado mostrar la
animacin?

El botn de efectos en s mismo acta como un switch que activa o desactiva todos
los efectos a la vez.

Men de Gizmos

Los Gizmos son grficos agregados a la escena(ya sea por Unity en s mismo o por sus
propios scripts) que ayudan con la visualizacin e identificacin de elementos en el
mundo del juego. Por ejemplo, usted puede aadir iconos para ayudar identificar sus
objetos de juego y usar grficas simples de alambre para mostrar de otra manera los

- 79 -
caminos invisibles y los elementos de posicionamiento. Mirar la pgina de Script
Reference para la funcin de OnDrawGizmos para ms informacin sobre
implementar gizmos personalizados en sus scripts.

Haciendo click en la ventana emergente de Gizmos, se va a mostrar un men con un


nmero de opciones:

La casilla de verificacin 3D Gizmos determina si los gizmos son mostrados en


verdadero 3D (con el oscurecimiento y la perspectiva correcta) o como una capa
simple en la parte superior de otros grficos de escena. El control deslizante a la
derecha ajusta la escala de iconos de gizmo relativamente a otros objetos. La casilla
de verificacin Show Grid de abajo cambia la medicin estndar de la cuadrcula de la
escena a prendida y apagada.

Debajo de estas opciones hay una tabla de nombres de component con columnas
de Icon y Gizmo a la derecha. La lista es subdividida en scripts de usuario y
components integrados, y tambin mantendr una seccin de elementos
recientemente cambiados mientras hace modificaciones.

La columna de Icon le permite a usted seleccionar el icono del gizmo mostrado para
unos tipos particulares de componentes. Para components integrados, las nicas
opciones son en no tener un icono (tal como los Colliders, en dnde un gizmo con
estructura de alambre es mostrado) o simplemente en cambiar el icono estndar a
prendido y apagado ( tal como las Cmaras, Luces y fuentes de Audio, entre otros).
Para scripts de usuario, haciendo click en la columna del icono va a traer un men

- 80 -
para seleccionar el icono deseado:

Esto le permite seleccionar de una variedad de unas formas simples de iconos


estndares en diferentes colores que puede usar para identificar tipos en particular
de scripts. El botn Other va a traer un selector de textura del que usted puede
escoger cualquier textura que quiera para usar como un icono para su script.

La columna de Gizmo en la tabla contiene una casilla de verificacin que le permite a


usted escoger si los grficos del gizmo van a ser dibujados para un tipo en particular
de component. Por ejemplo, los Colliders tienen un gizmo con forma de alambre
predefinido para mostrar su forma mientra que los scripts del usuario pueden dibujar
gizmos personalizados apropiados para sus propsitos; estos gizmos pueden
prenderse y apagarse al hacer click en esta columna.

Caja de bsqueda(Search Box)

El elemento ms a la derecha de la barra de control es la caja de bsqueda(Search


Box) que le permite a usted filtrar elementos en el scene view por sus nombres y/o
tipos (puede seleccionar cul con el men pequeo a la izquierda de la caja de
bsqueda). El conjunto de elementos que coincidan con el filtro de bsqueda van a
ser mostrados en la vista de Jerarqua, que por defecto, est ubicado a la izquierda del
scene view.

- 81 -
La Vista del Juego (Game View)

El Game View es renderizado por la cmara(s) en su juego. Es la representacin de su


juego ya finalizado. Necesitar utilizar una o ms Cameras(Cmaras) para controlar lo
que el jugador ve realmente cuando est jugando su juego. Para ms informacin
acerca de Cmaras, por favor mirar la pgina del componente Camera.

Modo de Juego ( Play Mode)

Use los botones en la Barra de Herramientas para controlar el Editor Play Mode y ver
cmo se jugar el juego publicado. Mientras en Play mode, cualquier cambio que
haga ser temporal, y se va reset cuando se salga de Play mode. El UI del Editor se va
a escurecer para avisarle de esto.

Barra de Control del Game View

Botn: Funcin:
Display Oprima esto para escoger de una lista de

- 82 -
Botn: Funcin:
cmaras si tiene varias cmaras en la escena.
usted puede asignar Displays a las cmaras en
el mdulo Camera, debajo del
desplegable Target Display. Este es
configurado a Display 1 por defecto.
Selecciona valores diferentes para probar
cmo su juego se ver en monitores con
Aspect
diferentes relaciones de aspecto. Este es
configurado a Free Aspect por defecto.
Esto le permite a usted acercarse y examinar
reas de la pantalla del juego con ms detalla,
o se puede alejar para ver la pantalla completa
dnde la resolucin de la pantalla sea mayor
Scale slider que el tamao de la ventana de la vista del
juego. usted tambin puede utilizar la scroll
wheel (rueda de desplazamiento) y el botn de
la mitad del mouse para hacer esto mientras el
juego est parado o pausado.
Habilite esto para que la vista del juego se
maximice a 100% de su ventana del Editor
Maximize on Play para una pre-visualizacin de pantalla
completa cuando ingrese al Play Mode (modo
de juego).
Habilite esto para mute cualquier audio dentro
Mute audio
del juego cuando ingrese al modo de juego.
Oprima esto para toggle (activar/desactivar) la
ventana superpuesta de Statistics
Stats (estadsticas), que contienen estadsticas de
renderizado del audio y grficas de su juego
mientras usted est en el modo de juego.
Oprima esto para toggle (activar/desactivar) la
visibilidad de Gizmos. Para solamente ver
ciertos tipos de Gizmo durante el modo de
Gizmos
juego, oprima la flecha desplegable alado de la
palabra Gizmos y solamente revise las
casillas de los tipos de Gizmo que quiere ver.

- 83 -
Men emergente de Gizmos

Junto al nombre de cada componente estn los ajustes para el icono y los gizmos
asociado a l. El ajuste del Icono revela otro men emergente que le permite a uno
escoger entre una seleccin de iconos predefinidos o un icono personalizado definido
por una textura.

- 84 -
El ajuste Gizmo le permite a uno desactivar selectivamente el dibujo de Gizmo para
unos componentes especficos.

El ajuste 3D Gizmos encima del men se refiere a los iconos Gizmo. Con el ajuste
activado, los iconos mostrarn la perspectiva de la cmara (ie, iconos para objetos
ms cerca van a estar ms grande de aquellos objetos distantes), de lo contrario,
sern el mismo tamao, independientemente de la distancia. El deslizador alado de
casilla de verificacin, le permitir variar el tamao de los iconos, lo que puede ser til
para reducir el desorden cuando hayan muchos gizmos visibles.

- 85 -
La ventana de Jerarqua (Hierarchy)

La Hierarchy contiene cada GameObject de la escena actual. Algunos de estos son


instancias directas de archivos de asset como modelos 3D, y otras son instancias
de Prefabs, objetos personalizados que van hacer gran parte de su juego. Puede
seleccionar objetos en la jerarqua y luego arrastrar un objeto a otro para hacer uso
de Parenting (mirar abajo). Como hay objetos que estn siendo agregados y
eliminados en la escena, estos van a aparecer y desaparecer de la jerarqua tambin.
Por defecto los GameObjects se mostrarn en la ventana Hierarchy en el orden en
que se fabrican. Es posible reordenar los GameObjects arrastrndolos arriba o abajo,
o hacindolos hijos o padres.

Parentesco (Parenting)
Unity usa un concepto llamado Parenting. Para hacer que cualquier GameObject sea
el hijo de otro, arrastre el hijo deseado al padre deseado en la jerarqua. Un hijo va a

- 86 -
heredar el movimiento y rotacin de su padre. Puede utilizar la flecha despegable del
padre de un objeto para mostrar o esconder el hijo segn sea necesario. Haciendo
Alt+clic en la flecha desplegable del padre se mostrarn u ocultarn todos los
GameObjects descendientes del padre, adems de los hijos inmediatos.

Dos objetos no emparentados

Un objeto emparentado a otro

Para aprender ms del parentesco (Parenting), vea Transform Component page.

Ordenacin Alfanumrica
El orden de los Gameobjects en la ventana Hierarchy puede ser cambiado a una
ordenacin alfanumrica. Este modo puede activarse usando el men Edit-
>Preferences (Windows) o Unity->Preferences (Mac) que lanza la ventana de
preferencia de Unity. La opcin Enable Alpha Numeric Sorting (Activar Ordenacin
Alfanumrica) puede marcarse. Una vez se haga esto, el orden de los GameObjects en
la jerarqua puede volverse en un orden alfanumrico. Un nuevo icono aparecer en
el lado superior derecho de la ventana Hierarchy. Un men desplegable aparecer

- 87 -
para permitir elegir una ordenacin Alfabtica o de acuerdo al Transform.

Edicin Multi-Escena
Es posible tener ms de una escena abierta en la Jerarqua al mismo tiempo. Para
saber ms de esto, ver la pgina Edicin Multi Escena.

- 88 -
Usando el Inspector

The inspector in its default position in Unity

- 89 -
Inspecting Game Objects

The showing a typical Game


Object and its components

El Inspector es usado para ver y editar propiedades de objeto y tambin preferencias


y otros ajustes dentro de Unity.

Cuando usted selecciona un GameObject en la Jerarqua o Scene View, el Inspector va


a mostrar las Properties de todos los Components y Materialsen el objeto y permitirle
editarlos. Para un Script component personalizado, las variables pblicas de ese script
son mostradas en el Inspector y pueden ser vistas y editas como las propiedades de
los components integrados de Unity. Esto le permite establecer parmetros y valores
por defecto en su scripts fcilmente sin modificar el cdigo.

- 90 -
Inspecting Script Variables

Inspector showing a GameObject several


custom scripts attached, and their public properties available to edit.

Cuando usted selecciona un GameObject en la Jerarqua o Scene View, el Inspector va


a mostrar las Properties de todos los Components y Materialsen el objeto y permitirle
editarlos. Para un Script component personalizado, las variables pblicas de ese script
son mostradas en el Inspector y pueden ser vistas y editas como las propiedades de
los components integrados de Unity. Esto le permite establecer parmetros y valores

- 91 -
por defecto en su scripts fcilmente sin modificar el cdigo.

Inspecting Assets

Inspector showing the import settings for a


texture

When an Asset is selected in your Project Window, the Inspector will show you the
settings related to how that asset is imported and used at runtime. Each type of asset
will have a different arrangement of settings. Below are some examples of the
inspector showing the import settings for other asset types:

- 92 -
Inspector showing the import settings
for an FBX file containing 3D models

- 93 -
Inspector showing the import

settings for an audio file Inspector showing the

- 94 -
import settings for a Material Asset

Project Settings

Inspector showing the Tags and Layers


Project Settings panel

When you select any of the Project Settings categories (found under: Editor -> Project
Settings), those settings will be displayed in the inspector. Find out more about these
on the Settings Managers page.

- 95 -
Editando Propiedades(Properties)
Las Properties son ajustes y opciones para components que pueden ser editados en
el Inspector.

Light component showing


various value and reference properties

Las Properties pueden ser en general categorizadas como references (vnculos para
otros objetos y assets) o values (nmeros, cajas de verificacin, colores, etc).

Referencias(References)
Las References pueden ser asignadas por arrastrar y soltar un objeto o asset del tipo
apropiado a la propiedad en el Inspector. Por ejemplo, el Mesh Filter component
necesita ser referenciado a un asset de un Mesh en algn lugar del proyecto. Cuando
el component es inicialmente creado, la reference es sin asignar.

pero puede asignar un Mesh a l soltando un asset de un Mesh sobre l.

Tambin puede usar el Object Picker para seleccionar un objeto para una propiedad
de referencia(reference). Si hace click en el icono de un crculo pequeo a la derecha
de la propiedad en el Inspector, usted vera una ventana como esta:

- 96 -
El Object Picker le permite buscar y seleccionar objetos dentro de la escena o los
assets del proyecto (el panel de informacin en la parte inferior de la ventana puede
ser subida o bajada como se desea). Escogiendo un objeto en la propiedad de
referencia es simplemente una cuestin de hacer doble click en el picker.

Cuando una propiedad de referencia es un tipo de component( tal como Transform),


puede soltar cualquier objeto sobre l; Unity va a localizar el primer component de
ese tipo en el objeto y asignarlo a la referencia. Si el objeto no tiene algn component
del tipo correcto, la asignacin ser negada.

Valores(Values)
La mayora de los values son editados usando cajas familiares de texto, casillas de
verificacin y mens, dependiendo de su tipo (como una conveniencia, valores
numricos tambin pueden ser movidos arriba o abajo arrastrando el mouse sobre la
propiedad del nombre de la etiqueta(name label)). No obstante, hay algunos valores
de tipos ms complejos que tienen sus editores especficos. Estos son descritos aqu
abajo.

Colores(Colors)
Las propiedades de color van a abrir el Color Picker cuando es clikeado.

- 97 -
The Color Picker window

- 98 -
The HDR Color Picker window (displayed when
clicking the emission color property in the standard shader or if you use the

- 99 -
ColorUsageAttribute on a Color in your script) The
Color Picker window

Unity usa so propio color picker pero en Mac OS X usted puede escoger usar el system
picker de las Preferences (menu: Unity > Preferences y luego Use OS X Color
Picker del General panel).

Gradientes(Gradients)
En los grficos y la animacin, a menudo es til poder mezclar un color gradualmente
en otro, sobre el espacio o tiempo. Un gradient es una representacin visual de una
progresin de color, que simplemente muestra los colores principales ( que son
llamados stops y todas las sombras intermedias entre ellos:

- 100 -
Las flechas que apuntan hacia arriba a lo largo de la parte inferior de la barra de
gradiente, denota los stops. Usted puede seleccionar un stop haciendo click en l; su
valor ser mostrado en la caja de color(Color box) que abrir el picker de color
estndar cuando sea clickeado. Un nuevo stop puede ser creado haciendo click justo
abajo la barra de gradiente. La posicin de cualquiera de los stops puede ser
cambiada simplemente haciendo click y arrastrando, y un stop puede ser eliminado
con ctrl/cmd + delete.

Las fechas que apuntan hacia abajo arriba de la barra de gradiente tambin son stops
pero corresponden al alpha(transparencia) del gradiente en ese punto. Por defecto,
hay dos stops establecidos a 100% alpha (ie, completamente opaco), pero, un nmero
cualquier de stops puede ser aadidos y editados en la misma manera que los stops
de color(colour stops).

Curvas(Curves)
Una Curve es un grfico de lineas que muestra la respuesta (en el eje Y) al valor
variable de una entrada (en el eje X).

Curve editor

Las Curves son usadas en una variedad diferente de contextos dentro de Unity,
especialmente en animacin, y tienen un nmero distinto de opciones y
herramientas. Estas son explicadas en la pgina Editing Curves del manual.

Matrices(Arrays)
Cuando un script expone un array como una variable pblica, el Inspector va a

- 101 -
mostrar un editor de valor que le permite editar ambos el tamao del array y los
valores, o referencias, dentro de l.

Script con una propiedad de


arreglo Vector3

Cuando disminuya la propiedad del Tamao, los valores alfinal del array sern
eliminados. Cuando aumente el tamao, el ltimo valor actual ser copiado a todos
los nuevos elementos agregados. Esto puede ser til cuando se ajuste un array cuyos
valores son la mayora los mismos - usted puede establecer el primer elemento y
luego cambiar el tamao para copiarlo a todos los otros elementos.

Editando Varios Objetos a la Vez


Cuando tiene dos o ms objetos seleccionados, los components que tienen en comn
pueden ser editados todos juntos (ie, los valores que proporcione sern copiados a
todos los objetos seleccionados).

El Inspector mostrando una seleccin mltiple

En dnde los valores de propiedad son los mismos para todos los objetos
seleccionados, el valor ser mostrado pero de otra manera, ser mostrado como un
carcter de guin. Solo components que sean comunes a todos los objetos sern

- 102 -
visibles en el Inspector. Si cualquier objeto seleccionado tiene components que no
estn presentes en otros objetos, el Inspector va a mostrar un mensaje que diga que
algunos components estn ocultos. El men de contexto para una propiedad (abierto
al hacer click derecho en su etiqueta de nombre) tambin tiene opciones que le
permite establecer su valor de cualquiera de los components seleccionados.

Recuerde de que tambin puede editar varias instancias seleccioandas de un prefab a


la vez, pero, los botones usuales Select, Revert y Apply no estarn disponibles.

- 103 -
Libreras Predefinidas
Las Libreras Predefinidas contienen datos creados por el usuario y persisten entre
sesiones. Estn integradas en el Color Picker, Gradient Editor y Curve Editors.

Un preset es e.g un color, gradiente o una curva de animacin que est guardada por
el usuario.

Una librera predefinida es una coleccin de presets guardados a un archivo.

Las libreras predefinidas contienen datos personales o datos del proyecto. Estas
pueden ser guardadas en una carpeta preferencial del usuario o en una carpeta
Editor en la carpeta de Assets. Las libreras predefinidas pueden ser agregadas a un
control de revisin para facilitar la difusin entre usuarios en un proyecto y ser
agregadas a paquetes del Asset Store.

Cmo crear un preset de un color:


1.Hacer click en un campo de color. E.g seleccionar Main Camara en la Jerarqua, luego

- 104 -
hacer click en Background Color.

2.Ajuste un color a su gusto

3.Al final encontrar una seccin de Presets

4.Simplemente haga click en el botn para agregar el color actual a la librera


predefinida actual

5.El men de contexto ( el icono con las tres lineas)

6.Puede cambiar el view mode entre List Mode(Modo lista) y Grid Mode(modo de
rejillas) en el men de contexto (el icono con las tres lineas)

7.Seleccione entre las libreras predefinidas disponibles

8.Cree una nueva librera

9.En el Create New Library popup puede seleccionar si desea crear una librera
predefinida en la carpeta de Preferencias o la carpeta del Proyecto

10.Muestra la librera actual en el explorador/buscador de archivos OS

11.Los Presets pueden ser reordenados al arrastrarlos

12.Los Presets pueden ser eliminados al espichar Alt + Botn izquierda del mouse o
haciendo click derecho en el men

13.Los Presets pueden ser renombrados desde el men del botn derecho (tenga en
cuenta que los nombres solo son mostrados en List Mode)

- 105 -
Seleccionando una librera predefinida en el explorador del proyecto se va a mostrar
sus contenidos en el inspector. A partir de este punto, puede hacer click en Edit..
para modificar.

Note: The description above shows the standard Unity Color Picker. There is an option
in Preferences which allows you to use the OS X Color picker instead.

- 106 -
Opciones del Inspector
El modo de Inspector Lock y de Inspector Debug son dos opciones tiles que pueden
ayudar en su flujo de trabajo.

Bloquear(Lock)
Normalmente, el Inspector muestra detalles del objeto actualmente seleccionado,
pero, algunas veces es til tener un objeto en el inspector mientras se trabaja con
otros. Para habilitar esto, el Inspector tiene un Lock mode que usted puede activar con
el icono de un pequeo candado que est arriba a la derecha de la ventana del
Inspector.

Tenga en cuenta que usted puede tener ms de un inspector abierto a la


vez(men: Add Tab del men de la pestaa del Inspector), entonces puede mantener
uno bloqueado y tener un segundo para mostrar la seleccin actual.

Adding a new tab, docking it under the current


inspector tab, and locking it.

Modo Depurar/Normal(Debug/Normal Mode)


Otra opcin del men de pestaas es la opcin entre modo Normal y modo Debug.

- 107 -
Normalmente, el inspector muestra un editor personalizado para un asset o
component si alguno est disponible, pero, algunas veces es til ver las propiedades
directamente. El Modo Debug muestra solo las propiedades en vez un editor
personalizado y para los scripts, tambin muestra variables privadas (aunque sus
valores no puedan ser editados como aquellos de las variables pblicas).

Script visto en el modo Debug


con variables privadas grises

Al igual que en el modo de bloqueo(Lock mode), Debug/Normal mode es aplicado a


cada Inspector individualmente, entonces usted puede tener dos inspectors abiertos
a la vez para ver ambos views.

- 108 -
La Barra de Herramientas

La Barra de Herramientas consiste en cinco controles bsicos. Cada uno se relaciona


con diferentes partes del Editor.

Transform Tools used with the Scene View

Palancas(toggles) de Gizmo del Transform afecta la visualizacin


del Scene View

Play/Pause/Step Buttons used with the Game View

Play/Pause/Step Botones utilizado con la vista del juego(GameView)

Diseo del Desplegable controla el arreglo de todas las Vistas

Layers Desplegable controla qu objetos son mostrados en el Scene


View

Diseo del Desplegable controla el arreglo de todas las Vistas

Opci
ones
del
Insp
ector

- 109 -
Buscando
Cuando se trabaje con grandes escenas complejas, puede ser til buscar objetos
especficos. Usando la funcin Search en Unity, usted puede filtrar el objeto, o grupo
de objetos que usted quiera ver. Puede buscar assets por sus nombre, por el tipo de
Component, y en algunos casos por Etiquetas de asset (ver abajo). Usted puede
especificar el modo de bsqueda seleccionando el men desplegable de bsqueda.

Bsqueda de Escena
Ambos el Scene View y la view de Jerarqua tienen un cuadro de bsqueda que le
permite filtra objetos por sus nombres. Desde que las dos vistas son bsicamente
diferentes representaciones del mismo conjunto de objetos, cualquier consulta de
bsqueda que se escriba ser duplicada en ambos cuadros de bsqueda y aplicado a
ambas vistas en el mismo tiempo. Tenga en cuenta que ambas vistas cambian poco
cuando una bsqueda est activa: el Scene View va a mostrar objetos filtrados en gris
y la view de la Jerarqua va a perder la informacin jerrquica y simplemente va a
mostrar objetos listados por nombre:

Scene and Hierarchy views with search filtering applied.

El botn de la cruz pequea a la derecha del cuadro de bsqueda elimina la consulta


de bsqueda y restaura la vista a la normalidad. El men en el lado izquierdo del

- 110 -
cuadro le permite a uno escoger si filtrar los objetos por nombre, por tipo o por
ambos a la vez.

Bsqueda de Proyecto y Etiquetas


There is also a search box in the Project view. The search applies to assets rather than
their instances in the scene.

Tambin hay un cuadro de bsqueda en la vista del proyecto pero en este, la


bsqueda aplica a assets en vez de sus instancias en la escena. Una opcin adicional
disponible para los assets es buscar por Labels as como el nombre y el tipo. Una
etiqueta(Label) es simplemente una pieza corta de texto que uno usa para agrupar
unos assets en particular (eg, usted puede agregar un Vehicles label para hacer que
todos los assets de Vehicle(carro) fcil de aislar). Usted puede agregar una etiqueta a
un asset de la caja de Asset Labels en la parte inferior del Inspector. Si hace click en el
botn dentro la caja, usted va a ver un men de etiquetas existentes con una caja de
texto encima.

Adding a Prop label

El cuadro de texto le permite filtrar las etiquetas ya existentes o introducir el texto de


una nueva etiqueta; usted puede oprimir la barra de espacio o la tecla enter mientras
escribe para agregar la nueva etiqueta de texto al asset. Las etiquetas ya aplicadas a
un asset estn mostradas dentro una marca de verificacin a la izquierda del men;
puede simplemente seleccionar una etiqueta una etiqueta aplicada del men para
eliminarla. Tenga en cuenta que cualquier asset puede tener tantas etiquetas como
desee y por lo tanto, pertenecer a diferentes grupos etiquetados a la vez.

- 111 -
See Inspector manual page for more informatation.

- 112 -
Otras Vistas
Las Views descritas en esta pgina cubren lo esencial de la interfaz de Unity. Las otras
Views en Unity estn descritas en otras partes, en pginas separadas:

La Console muestra los registros de los mensajes, advertencias, y errores.

El Animation View puede ser usado para animar objetos en la escena.

El Profiler puede ser usado para investigar y encontrar los problemas que disminuyen
el rendimiento de su juego.

El Lightmapping View puede ser utilizado para gestionar los lightmaps utilizando el
mapeo de luz integrado en Unity.

El Occlusion Culling View puede ser usado para gestionar el Occlusion Culling para un
mejor rendimiento.

- 113 -
Personalizando El Espacio de Trabajo
Puede personalizar su Layout de Views haciendo click y arrastrando la ficha de
cualquier View a una de las ubicaciones. Dejando caer una ficha en Tab Area de una
ventana que ya existente, va a agregar la ficha alado de cualquier ficha que ya exista.
Alternativamente, dejando caer una ficha en cualquier Dock Zone va a aadir el View
en una nueva ventana.

Views can be
docked to the sides or bottom of any existing window

Las fichas tambin pueden ser separadas de la Ventana Principal del Editor y
organizadas en sus propias ventanas flotantes del Editor. Las ventanas flotantes
pueden contener arreglos de Views y Fichas al igual que la Ventana Principal del
Editor.

- 114 -
Floating Editor Windows are the same as the Main Editor Window, except there is no
Toolbar

Cuando haya creado un diseo del Editor de Ventanas, puede guardarlo y recuperarlo
en cualquier momento. Esto se hace expandiendo el despegable del diseo(Layout)
( encontrado en la barra de herramientas) y escogiendo Save Layout. Pngale un
nombre a su diseo y gurdelo, puede recuperarlo simplemente escogindolo en el
despegable de los diseos(Layout).

- 115 -
A completely custom Layout

En cualquier momento, puede hacer click derecho en la ficha de cualquier View para
mirar opciones adicionales como maximizar o agregar una nueva ficha en la misma
ventana.

- 116 -
Teclas de Acceso Rpido de Unity
Esta pgina da una visin general de las teclas de acceso rpido de Unity por defecto.
Tambin puede descargar un PDF de la tabla para Windows y MacOSX. Dnde un
comando tiene CTRL/CMD como parte de la pulsacin de la tecla, esto indica que la
tecla de Control debe ser usada en Windows y la tecla de Command en MacOSX

Herramientas
Tecla Comando
Q Pan (Desplazar)
W Mover
E Rotar
R Escalar
T Rect Tool (Herramienta Rect)
Z Palanca de Modo Pivote
X Palanca de Giro de Pivote
V Vertex Snap
CTRL/CMD+LMB Snap

GameObject
CTRL/CMD+SHIFT+N Nuevo game object vaco
ALT+SHIFT+N Nuevo hijo vaco a game object seleccionado
CTRL/CMD+ALT+F Mover para mirar
CTRL/CMD+SHIFT+F Alinear con la mira
Bloquea la cmara de la scene view al
SHIFT+F o double-F
GameObject seleccionado

Ventana
CTRL/CMD+1 Escena
CTRL/CMD+2 Juego
CTRL/CMD+3 Inspector
CTRL/CMD+4 Jerarqua

- 117 -
CTRL/CMD+5 Proyecto
CTRL/CMD+6 Animacin
CTRL/CMD+7 Profiler
CTRL/CMD+9 Asset store
CTRL/CMD+0 Control de Versiones
CTRL/CMD+SHIFT+C Consola

Edicin
CTRL/CMD+Z Deshacer
CTRL+Y (Windows solamente) Rehacer
CMD+SHIFT+Z (Mac solamente) Rehacer
CTRL/CMD+X Cortar
CTRL/CMD+C Copiar
CTRL/CMD+V Pegar
SHIFT+Del Duplicar
SHIFT+Del Borrar
F Seleccin de marco(central)
CTRL/CMD+F Encontrar
CTRL/CMD+A Seleccionar todo
CTRL/CMD+P Reproducir
CTRL/CMD+SHIFT+P Pausar
CTRL/CMD+ALT+P Paso

Seleccin
CTRL/CMD+SHIFT+1 Cargar Selection 1
CTRL/CMD+SHIFT+2 Cargar Selection 2
CTRL/CMD+SHIFT+3 Cargar Selection 3
CTRL/CMD+SHIFT+4 Cargar Selection 4
CTRL/CMD+SHIFT+5 Cargar Selection 5
CTRL/CMD+SHIFT+6 Cargar Selection 6
CTRL/CMD+SHIFT+7 Cargar Selection 7

- 118 -
CTRL/CMD+SHIFT+8 Cargar Selection 8
CTRL/CMD+SHIFT+9 Cargar Selection 9
CTRL/CMD+ALT+1 Guardar Selection 1
CTRL/CMD+ALT+2 Guardar Selection 2
CTRL/CMD+ALT+3 Guardar Selection 3
CTRL/CMD+ALT+4 Guardar Selection 4
CTRL/CMD+ALT+5 Guardar Selection 5
CTRL/CMD+ALT+6 Guardar Selection 6
CTRL/CMD+ALT+7 Guardar Selection 7
CTRL/CMD+ALT+8 Guardar Selection 8
CTRL/CMD+ALT+9 Guardar Selection 9

Assets
CTRL/CMD+R Refrescar

- 119 -
Creacin de Juego

Unity le da poder a los diseadores de juego en hacer juegos. Lo que es realmente


especial de Unity es que no se necesita aos de experiencia programando o un titulo
universitario en arte para hacer juegos divertidos. Hay un conjunto de conceptos de
trabajo que se necesitan para aprender a utilizar Unity. Una vez se entiendan estos,
uno va a poder encontrarse a s mismo haciendo juegos en un instante. Con el tiempo
que se va ahorrar poniendo sus juegos en funcionamiento, va a poder usar mucho
ms tiempo para refinar, balancear, y ajustar su juego a la perfeccin.

Esta seccin va a explicar los conceptos bsicos que se necesitara para crear una
experiencia de juego nica, increble, y divertida. La mayora de estos conceptos
requieren que escriba Scripts. Para una visin generar de crear y trabajar con scripts,
lea la pgina Scripting

- 120 -
Escena
Las escenas contienen los objetos de su juego. Pueden ser usadas para crear un
men principal, niveles individuales, y cualquier otra cosa. Piense en cada archivo de
escena, como un nivel nico. En cada escena, usted va a colocar su ambiente,
obstculos, y decoraciones, el diseo esencial y la construccin de su juego en
pedazos.

Una nueva escena vaca, con los objetos 3D predeterminados - una cmara y una
directional light.

Cuando usted cree un nuevo proyecto de Unity, su scene view le va a mostrar una
nueva escena. Esta es una escena untitled (sin titulo) y unsaved ( sin guardar). La
escena estar vaca al menos por objetos predeterminados - ya sea una cmara
ortogrfica, o una cmara perspectiva y una directional light, dependiendo si comenz
el proyecto en modo 2D o 3D.

Guardando Escenas
Para guardar la escena en la cual usted est actualmente trabajando, escoja File >
Save Scene desde el men, o presione Ctrl/Cmd + S.

La escenas son guardadas como assets , a la carpeta de Assets de su proyecto. Por lo


tanto aparecen en la ventana del Proyecto, como cualquier otro asset.

- 121 -
Algunos
assets de escena, guardados y visibles en el project view

Abriendo Escenas
Para abrir una escena, con el fin de comenzar o continuar trabajando dentro de esa
escena, haga doble click en el asset de la escena en la ventana del proyecto.

Si su escena actual contiene cambios sin guardar, a usted se le pedir guardar o


descartar los cambios.

Edicin Multi-escena.
Es posible tener mltiples escenas abiertas para edicin a la vez. Para ms
informacin acerca de esto, ver Edicin Multi-escena.

- 122 -
GameObjects
El GameObject es el tipo de objeto ms importante en Unity. Es bien importante
entender qu es un GameObject, y cmo puede ser usado.

Qu son los GameObjects?


Cada objeto en su juego es un GameObject. No obstante, los GameObjects no hacen
nada por s mismos. Estos necesitan propiedades especiales antes de que puedan
volverse un personaje, un ambiente, o un efecto especial. Pero cada uno de estos
objetos hacen diferentes cosas. Si cada objeto fuera un GameObject, cmo hacemos
nosotros para diferenciar un power-up interactivo de un cuarto esttico? Qu hace
que estos GameObjects sean diferentes del uno al otro?

Cuatro diferentes Game Objects, un personaje animado, una luz, un rbol y una
fuente de audio

La respuesta a esta pregunta es que los GameObjects son contenedores. Estos


pueden guardar las diferentes piezas que son requeridas para hacer un personaje,
una luz, un rbol, un sonido, o lo que sea que usted quisiera construir. Entonces para
de verdad entender GameObjects, usted necesita entender estas piezas que son
llamadas Components.

Dependiendo del objeto que se quiera crear, usted va agregar diferentes


combinaciones de Components al GameObject. Piense en un GameObject como una
olla vaca de cocina, y los Components como los ingredientes diferentes que hacen su
receta del gameplay. Unity tiene varios tipos de componentes integrados, y usted
tambin puede hacer sus propios componentes utilizando Scripts.

Esta seccin explica cmo GameObjects, Components, y Scripts encajan, y cmo crear
y utilizarlos.

- 123 -
GameObject
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. Por
ejemplo, un objeto Light es creado al adjuntar un componente Light a un
GameObject.

For example, a Light object is created by attaching a Light component to a


GameObject.

Un simple GameObject con


varios componentes

A solid cube object has a Mesh Filter and Mesh Renderer component, to draw the
surface of the cube, and a Box Collider component to represent the objects solid
volume in terms of physics.

- 124 -
Un simple GameObject con
varios componentes

Detalles
Un GameObject siempre tiene el componente Transform adjunto (para representar la
posicin y orientacin) y no es posible quitar esto. Los otros componentes que le dan
al objeto su funcionalidad pueden ser agregados del men Component del editor o
desde un script. Tambin hay muchos objetos tiles pre-construidos (figuras
primitivas, cmaras, etc) disponibles en el men GameObject > 3D Object ,
ver Primitive Objects.

Ya que los GameObjects son una parte importante de Unity, hay una seccin
de GameObjects en el manual con detalles extensivos acerca de ellos. Usted puede
encontrar ms acerca de controlar los Gameobjects desde scripts en la pgina de
referencia de scripting del GameObject.

- 125 -
Introduccin a los componentes
Como se describi anteriormente en GameObjects, un GameObject contiene
Components. Nosotros exploraremos esta relacin discutiendo un GameObject y su
ms comn Component el Transform Component. Con cualquier escena de Unity
abierta, cree un nuevo GameObject(usando Shift-Control-N en Windows o Shift-
Command-N en Mac), seleccionelo y eche un vistazo al Inspector.

El inspector de un GameObject vaco

Note que un GameObject vaco todava contiene un Nombre, un Tag, y un Layer. Cada
GameObject tambin contiene un Transform Component.

El Transform Component
Es imposible crear un GameObject en Unity sin un Transform Component. El
Transform Component es uno de los ms importantes Components, ya que todas las
propiedades Transform del GameObject estn habilitadas por sus usos en este
Component. Define la posicin, rotacin, y escala del GameObject en el mundo/Scene
View del juego. Si un GameObject no tuviera un Transform Component, sera nada
ms que alguna informacin en la memoria del computador. Efectivamente no
existira en el mundo.

El Transform Component tambin habilita un concepto llamado Parenting, que es


utilizado a travs del Unity Editor y es una parte critica de trabajar con GameObjects.
Para aprender ms sobre el Transform Component y Parenting, lea Transform
Component Reference page.

Otros Components
El Transform Component es critico para todos los GameObjects, entonces cada
GameObject tiene uno. Pero, los GameObjects pueden tener otros Components
tambin.

- 126 -
La cmara principal, agregada a cada
escena por defecto

Mirando la Cmara Principal del GameObject, se puede ver que contiene una
coleccin diferente de Components. Especialmente, un Camera Component,
a GUILayer, un Flare Layer, y un Audio Listener. Todos estos Components
proporcionan funciones adicionales al GameObject. Sin estas, no habra nada
representando los grficos del juego para la persona que est jugando! Rigidbodies,
Colliders, Particles, y Audio son todos diferentes Components (o combinaciones de
Components) que pueden ser agregados a cualquier GameObject.

- 127 -
Usando Components
Los Components son las tuercas y tornillos de los objetos y comportamientos de un
juego. Son las piezas funcionales de cada GameObject. Si todava no entiende la
relacin entre Components y GameObjects, lea la pgina de GameObjects antes de
seguir adelante.

Un GameObject es un contenedor para muchos Components distintos. Por defecto,


todos los GameObjects automticamente tienen un TransformComponent. Esto es
porqu el Transform dicta dnde el GameObject est ubicado, y cmo es girado y
escalado. Sin un Transform Component, el GameObject no tendra lugar en el mundo.
Intente crear un GameObject vaco ahora como ejemplo. Haga click en el elemento del
men GameObject->Create Empty. Seleccione el new GameObject, y mire
el Inspector.

Incluso los GameObjects vacos tienen


un componente Transform

Recuerde que siempre puede utilizar el Inspector para ver qu Components son
adjuntados al GameObject seleccionado. A medida que los Components son
agregados y quitados, el Inspector va a siempre mostrar cules estn actualmente
adjuntos. Usted va a utilizar el Inspector para cambiar todas las propiedades de
cualquier Component (incluyendo scripts).

Agregando Components
Usted puede agregar Components al GameObject seleccionado a travs del men de
Components. Nosotros vamos a intentar esto aadiendo un Rigidbody a un
GameObject vaco que creamos. Seleccinelo y escoja Component->Physics-
>Rigidbody del men. Cuando lo haga, va a ver las propiedades del Rigidbody
aparecer en el Inspector. Si oprime Play mientras que el GameObject vaco est
seleccionado, podr tener una pequea sorpresa. Intntelo y note cmo el Rigidbody
le ha agregado funcionalidad al GameObject que estaba vaco. (La posicin Y del

- 128 -
GameObject comienza a disminuir. Esto es porqu el motor de fsica de Unity est
causando que el GameObject se caiga gracias a la gravedad.)

Un GameObject vaco con un


componente Rigidbody adjunto

Otra opcin es usar el Component Browser, que puede ser activado con el
botn Add Component en el inspector del objeto.

El Component Browser

El navegador le permite navegar los components convenientemente por categora y


tambin tiene un cuadro de bsqueda que puede utilizar para ubicar components por
su nombre.

- 129 -
Puede adjuntar cualquier nmero o combinacin de Components a un solo
GameObject. Algunos Components trabajan mejor en combinacin con otros. Por
ejemplo, el Rigidbody trabaja con cualquier Collider. El Rigidbody controla el
Transform a travs del motor de fsica NVIDIA PhysX, y el Collider permite que el
Rigidbody se choque e interacte con otros Colliders.

Si quiere saber ms acerca del uso de un component en particular, puede leer sobre
cualquiera de ellos en la pgina relevante de referencia del Component. Tambin
puede acceder la pgina de referencia de un Component en Unity haciendo click en el
pequeo ? en el encabezado del Component en el Inspector.

Editando Components
Uno de los grandes aspectos de los Components son la flexibilidad. Cuando se
adjunta un Component a un GameObject, hay diferentes valores oProperties en el
Component que pueden ser ajustadas en el editor mientras se construye un juego, o
por scripts cuando est corriendo el juego. Hay dos tipos de propiedades
( Properties): Values y References.

Mire la imagen de abajo. Es un GameObject vaco con un componente Audio Source.


Todos los valores del Audio Source en el Inspector son valores por defecto.

- 130 -
Este componente contiene una sola propiedad de Reference (referencia), y siete
propiedades de valor. Un Audio Clip es la propiedad de referencia. Cuando esta
Audio Source empieza a reproducirse, intentar reproducir el archivo audio que est
referenciado en la propiedad Audio Clip. Si ninguna referencia se hace, un error va a
ocurrir ya que no hay audio para reproducir. Usted debe referenciar el archivo dentro
del Inspector. Esto es fcil como arrastrar un archivo de audio del Project View a la

- 131 -
propiedad Reference o utilizando el Object Selector (selector de objetos).

Ahora un archivo de efecto de


sonido es referenciado en la propiedad Audio Clip

Los componentes pueden incluir referencias a cualquier otro tipo de Componente,


GameObject, o Assets. Usted puede leer ms acerca de cmo asignar referencias en la
pgina acerca de editar propiedades.

- 132 -
Las propiedades restantes en el Audio Clip son todas propiedades con valor. Estas
pueden ser ajustadas directamente desde el Inspector. Las propiedades de valor del
Audio Clip son todas palancas, valores numricos, campos desplegables, pero las
propiedades con valor tambin pueden ser strings de texto, colores, curvas, y otros
tipos. Puede leer ms acerca de estos y sobre editar propiedades de valor en la
pgina acerca de editing value properties](EditingValueProperties.html).

Los comandos del men de contexto del Component


El men de contexto del Component tiene un nmero de comandos tiles.

El Component Context Menu

Los mismos comandos tambin estn disponibles desde el icono de engranaje en la


parte extrema superior derecha del panel del Component en el Inspector.

Reset
Este comando restablece los valores que tenan las propiedades del component antes
de la ms reciente sesin de edicin.

Eliminar(Remove)
Un comando Remove Component est disponible para casos en dnde ya no se
necesite el component adjunto al GameObject. Observe que hay algunas
combinaciones de components que dependen de cada uno (eg, Hinge Joint solo
funciona cuando un Rigidbody tambin est adjunto); ver un mensaje de advertencia
si trata de eliminar components que otros dependan.

Moverse Arriba/Abajo
Los Image Effects components cada uno aplica a un efecto visual a la vista
renderizada, pero el orden en el que los efectos son aplicados es importante. El men
de contexto tiene Move Up and Move Down

- 133 -
Copiar/Pegar
El comando Copy Component almacena el tipo y los ajustes actuales de la propiedad
de un Component. Estos luego pueden ser pegados a otro component del mismo tipo
con Paste Component Values. Tambin, puede crear un nuevo component con los
valores copiados en un objeto usando Paste Component As New.

Probando las Propiedades


Mientras su juego est en Play Mode, usted es libre de cambiar las propiedades en
Inspector de cualquier GameObject. Por ejemplo, puede querer experimentar con
diferentes alturas de salto. Si crea una propiedad Jump Height en el script, puede
entrar en Play Mode, cambiar el valor, y oprimir el botn de salto para ver qu pasa.
Luego, sin salirse de Play Mode puede cambiarlas nuevamente y ver los resultados en
segundos. Cuando se salga de Play Mode, sus propiedades se van a revertir a sus
valores pre-Play Mode, para que no se pierda nada de trabajo. Este flujo de trabajo le
da un poder increble con el cual experimentar, ajustar, y refinar su juego sin la
necesidad de invertir mucho tiempo en ciclos de iteracin. Intntelo con cualquier
propiedad en Play Mode. Creemos que va a estar impresionado.

- 134 -
Transform
El componente Transform determina la Position, Rotation, y Scale de cada objeto
en la escena. Cada GameObject tiene un Transform.

Propiedades
Propiedad: Funcin:
Posicin del Transform en coordenadas X, Y,
Position
Z.
Rotacin del Transform alrededor de los ejes
Rotation
X, Y, Z, medido en grados.
Scale (Escala) del Transform a lo largo de los
ejes X, Y y Z. Un valor de 1 es el tamao
Scale
original (el tamao con el cual el objeto fue
importado).
Los valores de posicin, rotacin, y escala de un Transform son medidos
relativamente al padre del Transform. Si el Transform no tiene padre, las propiedades
son medidas en el espacio del mundo.

- 135 -
Creando Componentes
Cuando usted cree un script y lo adjunte a un GameObject, el script aparece en el
inspector del GameObject al igual que un Componente. Esto se debe a que los scripts
se vuelve Componentes cuando son guardados - un script es simplemente un tipo
especifico de Componente. En trminos tcnicos, un script compila como un tipo de
Componente, y es tratado como cualquier otro componente por el motor de Unity.
Entonces bsicamente, un script es un componente que usted est creando usted
mismo. Usted definir sus miembros que sern expuestos en el Inspector, y se
ejecutar cualquier funcionalidad que usted ha escrito.

Lea ms a cerca de crear y usar scripts en la seccin Scripting del manual.

- 136 -
Desactivando GameObjects
Un GameObject puede ser temporalmente eliminado de una escena marcndolo
como inactivo. Esto puede ser hecho usando la propiedad activeSelf del script o con la
casilla de activacin en el Inspector

La casilla de activacin de un GameObject

Efectos de desactivar un parent GameObject


Cuando un objeto parent es desactivado, la desactivacin tambin anula el
ajuste activeSelf en todos sus objetos hijo, entonces toda la jerarqua del parent para
abajo es desactivada. Tenga en cuenta que esto no cambia el valor de la
propiedad activeSelf de los objetos hijo, por lo que volvern a su estado original una
vez se reactive el parent. Esto significa que no puede determina si un objeto hijo es
actualmente activo o no en la escena leyendo su propiedad activeSelf . En vez, se
debe usar la propiedad activeInHierarchy, que tiene en cuenta los efectos de
anulacin del parent.

Este comportamiento de anulacin fue introducido en Unity 4.0. En versiones


anteriores, haba una funcin llamada SetActiveRecursively que poda ser utilizada
para activar o desactivar los hijos de cualquier objeto parent dado. No obstante, esta
funcin funcionaba diferentemente el ajuste de activacin de cada objeto hijo fuera
cambiado - la jerarqua completa poda ser encendida y apagada pero el objeto hijo
no tena manera de recordar el estado en el que originalmente estaba. Para evitar
romper cdigo heredado, SetActiveRecursively se ha mantenido en el API para 4.0,
pero, su uso no es recomendado y puede ser eliminado en el futuro. En el caso
extrao en donde quiera que el ajuste activeSelf del hijo sea cambiado, puede usar el
cdigo como el siguiente:-
// JavaScript
function DeactivateChildren(g: GameObject, a: boolean) {
g.activeSelf = a;

- 137 -
for (var child: Transform in g.transform) {
DeactivateChildren(child.gameObject, a);
}
}

// C#
void DeactivateChildren(GameObject g, bool a) {
g.activeSelf = a;

foreach (Transform child in g.transform) {


DeactivateChildren(child.gameObject, a);
}
}

- 138 -
Etiquetas(Tags)
Un Tag es una palabra que vncula a uno o ms GameObjects. Por ejemplo, usted
podr definir etiquetas como Player y Enemy para personajes controlados por el
jugador y personajes no controlados por el jugador respectivamente; una etiqueta
Collectable puede ser definida para elementos que el jugador puede recoger en
la Scene; y as. Claramente, las etiquetas estn destinadas para identificar
GameObjects para propsitos de scripting. Podemos utilizarlas para escribir cdigo de
scripts para encontrar un GameObject por buscar un objeto que contenga nuestra
etiqueta deseada. Esto se logra usando la funcin GameObject.FindWithTag().

Por ejemplo:
// Instantiates respawnPrefab at the location
// of the game object with tag "Respawn"

//JS

var respawnPrefab : GameObject;


var respawn = GameObject.FindWithTag ("Respawn");
Instantiate (respawnPrefab, respawn.position, respawn.rotation);

//C#

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {


public GameObject respawnPrefab;
public GameObject respawn;
void Start() {
if (respawn == null)
respawn = GameObject.FindWithTag("Respawn");

Instantiate(respawnPrefab, respawn.transform.position,
respawn.transform.rotation) as GameObject;
}
}

Esto nos ahorra tener que manualmente agregar nuestros GameObjects a las
propiedades expuestas de un script usando la funcin de arrastrar y soltar un
ahorro de tiempo til si el mismo cdigo del script es usado en un nmero de
GameObjects. Otro ejemplo es un TriggerCollider script de control que le permite a
uno mirar si un jugador est interactuando con un enemigo, a diferencia de, digamos,
un prop aleatorio o un elemento coleccionable. Las etiquetas hacen de este tipo de
pruebas fcil.

- 139 -
Applicando una Etiqueta(Tag)
El Inspector va a mostrar la etiqueta(Tag) y Layer->Layers drop-down menus justo
abajo del nombre de cualquier GameObject. Para aplicar una etiqueta a un
GameObject, simplemente abra el despegable de etiquetas y escoja la etiqueta que
requiera:

El GameObject estar associado con esta etiqueta.

Creando nuevas Etiquetas


Para crear una nueva Etiqueta, haga click en la opcin Add tag al final del men
desplegable. Esto abrir el Tag Manager en el Inspector. El Tag Manager es
descrito aqu.

Las capas(Layers) aparecen similares a las etiquetas(Tags), pero son usadas para
definir cmo Unity debe representar los GameObjects en la escena. Mire la pgina
de Layers para ms informacin.

Recomendaciones
Un GameObject solo puede tener una etiqueta asignada a l.

Unity tiene unas etiquetas integradas que no aparecen en el Tag Manager:

Untagged

Respawn

Finish

EditorOnly

MainCamera

- 140 -
Player

y GameController.

Puede utilizar cualquier palabra que quiera como una etiqueta. (Puede utilizar incluso
frases cortas, pero puede que necesite agrandar el Inspector para ver el nombre
completo de la etiqueta.)

- 141 -
GameObjects Estticos
Muchas optimizaciones necesitan saber si un objeto puede moverse durante el juego.
Informacin acerca de un objeto Static (ie,que no se mueve) puede a menudo ser
precomputed en el editor en el conocimiento de que no vaya a ser invalidado por un
cambio en la posicin del objeto. Por ejemplo, la representacin (rendering) puede ser
optimizada por la combinacin de varios objetos estticos a un solo, objeto grande
conocido como un batch.

El Inspector para un GameObject tiene una Static checkbox y un men en la parte


superior derecha extrema, que se usa para informar a varios diferentes sistemas en
Unity que el objeto no se va a mover. El objeto puede ser marcado como esttico para
cada uno de estos sistemas individualmente, por lo que puede optar por no calcular
optimizaciones estticas para un objeto cuando no sea ventajoso.

Ajustes Estticos
El Everything y Nothing activa o desactiva el estado esttico de forma simultnea para
todos los sistemas que hacen uso de ella. Estos sistemas son:

Lightmapping: iluminacin avanzada para una escena;

Occluder and Occludee: representacin(rendering) optimizada basado en la visibilidad


de los objetos desde una posicin especfica de la cmara.

Batching: representacin(rendering) optimizada que combina varios objetos en un


objeto ms grande;

Navigation: el sistema que permite a los personajes superar obstculos en la escena;

Off-mesh Links: conexiones hechas por el sistema de Navegacin entre reas


discontinuadas de la escena.

Reflection Probe: captura una vista esfrica de sus alrededores en todas las
direcciones.

Ver las pginas acerca de estos temas para ms detalles en cmo los ajustes estticos
afecta el rendimiento.

- 142 -
Prefabs
Es conveniente construir un GameObject en la escena aadiendo components y
ajustando sus propiedades al valor apropiado. Esto puede crear problemas, sin
embargo, cuando se tiene un objeto como un NPC, prop o pieza de escenario que sea
reutilizado en la escena varias veces. Simplemente copiando el objeto sin duda
producir duplicados, pero, estarn editados independientemente. Generalmente,
usted quiere que todas las instancias de un objeto en particular tengan las mismas
propiedades, para cuando se edite un objeto en la escena, usted preferir no tener
que hacer la misma edicin repetidamente a todas las copias.

Afortunadamente, Unity tiene un Prefab tipo de asset que le permite almacenar un


objeto GameObject completamente con components y propiedades. El prefab acta
como una plantilla a partir de la cual se pueden crear nuevas instancias del objeto en
la escena. Cualquier edicin hecha a un prefab asset ser inmediatamente reflejado
en todas las instancias producidas por l, pero, tambin se puede anular components
y ajustes para cada instancia individualmente.

Tenga en cuenta: Cuando se arrastra un archivo asset (eg, un mesh) a la escena, se


crear una instancia nueva del objeto y todas esas instancias sern cambiadas cundo
el asset original sea cambiado. No obstante, aunque su comportamiento es
superficialmente similar, el asset no es un prefab, entonces no podr agregar
components a l o hacer uso de las dems caractersticas del prefab descritas abajo.

Usando Prefabs
Usted puede crear un prefab seleccionando Asset > Create Prefab y luego
arrastrando un objeto de la escena al prefab asset vaco que aparezca. Si usted
luego arrastra un GameObject diferente al prefab, se le preguntar si usted quiere
remplazar su gameobject actual con el nuevo. Simplemente arrastrando el prefab
asset de la vista del proyecto a el scene view se va a crear instancias del prefab.
Objetos creados como instancias de prefab van a ser mostrados en la vista de
Jerarqua en texto azul (objetos normales son mostrados en texto negro).

Como se menciona arriba, cambios al prefab asset en s mismo sern reflejados en


todas las instancias, pero tambin se puede modificar instancias individualmente por
separado. Esto es til, digamos, cuando se quiere crear varios NPCs similares pero

- 143 -
introducir variaciones para hacerlas ms realistas. Para que quede claro, cuando una
propiedad ha sido anulada, es mostrada en el inspector con el nombre de su etiqueta
en negrilla. (Cuando se aade un componente completamente nuevo de una instancia
de un prefab, todas sus propiedades van a ser mostradas en negrilla.)

Un Mesh Renderer en una


instancia prefab con Cast Shadows anulado

Usted tambin puede crear instancias de prefabs en el tiempo de ejecucin desde sus
scripts. Vea la pgina del manual acerca de Instantiating Prefabs para ms detalles.

Editando un Prefab desde sus Instancias


El Inspector para una instancia de un Prefab tiene tres botones que no estn
presentes en los objetos normales: Select, Revert y Apply.

El bton Select selecciona el prefab asset a partir del cual se gener la instancia. Esto
le permite editar el prefab principal y por lo tanto cambiar todas las instancias. Sin
embargo, tambin puede guardar valores anulados de una instancia de nuevo al
prefab original usando el botn Apply (valores de la posicin y rotacin del Transform
son excluidos por razones obvias). Esto efectivamente le permite editar todas las
instancias va cualquier instancia nica, y es una manera muy rpida y conveniente
para hacer cambios globales. Si usted experimenta con propiedades anuladas, pero
decide quedarse con los valores predeterminados, puede utilizar el botn Revert para
realinear la instancia con su prefab.

- 144 -
Guardando Su Trabajo
Unity almacena muchos tipos diferentes de informacin sobre su proyecto, y algunos
de ellos se almacenan de forma diferente al resto. Esto significa que cundo su trabajo
ser guardado depender de qu tipos de cambios est haciendo.

Por supuesto, recomendamos guardar con frecuencia, y usar un Sistema de Control


de Versiones (VCS) para preservar los cambios incrementales de su trabajo, y
permitirle hacer pruebas y deshacer los cambios sin arriesgarse a perder el trabajo.

Guardar cambios de la escena actual (Save Scene)

Los cambios de una escena incluyen modificaciones de cualquier objeto de la


Hierarchy. Por ejemplo, aadir, mover o borrar GameObjects, cambiar parmetros de
la jerarqua de GameObjects en el inspector.

Para guardar cambios a la escena, seleccione Save Scene en el men File, o


pulse Ctrl/Cmd + S. Esto guarda los cambios actuales a la escena y hace un Guardar
Proyecto (ms adelante).

Esto significa que cuando hace un Save Scene, se guarda todo .

- 145 -
Guardar cambios a todo el proyecto (Save
Project)

Algunos de los cambios que pueden realizarse en Unity no son especficos de escenas,
sino que son de todo el proyecto. Estas configuraciones pueden guardarse de manera
independiente de los cambios de escena seleccionando Save Project desde el men
File.

Usar Save Project no guarda los cambios de la escena, slo los del proyecto. Puede
querer, por ejemplo, guardar su proyecto pero no los cambios de su escena si ha
usado una escena temporal para hacer algunos cambios a un prefab.

Los cambios a todo el proyecto que son guardados al hacer Save Project incluyen:

Toda la Project Settings (Configuracin del proyecto):


Toda la configuracin para cada elemento del men Project Settings, como ejes de
entrada a medida, etiquetas definidas por el usuario o capas, y las fuerzas fsicas
gravitacionales son salvadas al hacer Save Project.

- 146 -
El men
Project Settings (Configuracin de Proyecto)

Los cambios a estas configuraciones se guardan en la carpeta Library al salvar el


proyecto:

Input: se guarda como InputManager.asset

Tags Y Capas: se guarda como TagManager.asset

Audio: se guarda como AudioManager.asset

Time: se guarda como TimeManager.asset

Player: se guarda como ProjectSettings.asset

Physics: se guarda como DynamicsManager.asset

Physics 2D: se guarda como Physics2DSettings.asset

Quality: se guarda como QualitySettings.asset

Graphics: se guarda como GraphicsSettings.asset

- 147 -
Network: se guarda como NetworkManager.asset

Editor: se guarda como EditorUserSettings.asset

Los Build Settings (Configuracin del build)


La configuracin del build tambin se guarda en la carpeta Library como
EditorBuildSettings.asset.

La
Configuracin del Build se guarda al hacer Save Project

Cambios a los assets en la Project Window (ventana de proyecto)


Junto con la configuracin de todo el proyecto tambin se guardan los cambios a
assets que no tiene un botn apply (aplicar), por ejemplo cambios a cualquiera de los

- 148 -
siguientes:

Parmetros materiales

Prefabs

Controladores de Animacin (Animator Controllers) (mquinas de estado)

Mscaras de Avatar (Masks)

Cualquier otro cambio a un asset que no tenga el botn apply

Cambios que se escriben inmediatamente al disco (no


necesitan ser guardados):
Hay algunos tipos de cambios que se escriben inmediatamente en el disco sin
ninguna necesidad de hacer una accin Save. Algunos de estos cambios son:

Cambios a cualquier configuracin de importacin que requiera que el usuario


pulse un botn apply
La configuracin de importacin para la mayora de los tipos de assets requiere que
se pulse un botn Apply para que los cambios tengan efecto. Esto hace que el asset
se re-importe de acuerdo a la nueva configuracin. Estos cambios se guardan
inmediatamente al pulsar el botn Apply. Por ejemplo:

Cambiar el tipo de textura para un asset de imagen

Cambiar el factor de escala par un asset de un modelo 3D

Cambiar la configuracin de compresin de un asset de audio

Cualquier otro cambio en la configuracin de importacin que tenga un botn apply

Otros cambios que se guardan inmediatamente:


Alguno otros tipos de datos se guardan a disco inmediatamente o automticamente
sin necesidad de hacer una accin Save:

La creacin de nuevos assets, p.e: materiales nuevos o prefabs (Pero no los cambios
subsecuentes a esos assets)

Datos de iluminacin horneados (baked) (se guardan al completar el proceso de


horneado (bake))

- 149 -
Datos de navegacin horneados (baked) (se guardan al completar el proceso de
horneado (bake))

Baked occlusion culling data (saved when the bake completes)

Cambios en el orden de ejecucin del script (despus de pulsar apply, este dato se
guarda en cada archivo .meta del script)

Prefa
bs

- 150 -
Instanciando Prefabs en tiempo de ejecucin
En este punto usted ya debe entender el concepto de Prefabs en un nivel
fundamental. Estos son una coleccin de GameObjects & Componentspredefinidos
que son re-utilizables a lo largo del juego. Si no sabe qu es un Prefab, le
recomendamos leer la pgina de Prefabs para una introduccin ms bsica.

Los Prefabs son muy tiles en el momento en que usted quiera instanciar
GameObjects complejos en tiempo de ejecucin. La alternativa para instanciar un
Prefab es crear un GameObject desde cero usando cdigo. Instanciar prefabs tiene
muchas ventajas frente al mtodo alternativo.

Puede instanciar un Prefab desde una linea de cdigo, con una funcionalidad
completa. En cambio, para crear GameObjects equivalentes desde cdigo toma un
promedio de cinco lineas de cdigo, pero probablemente ms.

Usted puede configurar, probar, y modificar el Prefab fcil y rpidamente en la


escena y el Inspector.

Usted puede cambiar el Prefab siendo instanciado sin la necesidad de cambiar el


cdigo que lo instancia . Un cohete simple puede volverse en un cohete sper
cargado, y no se requerira de cdigo para hacerlo.

Escenarios Comunes
Para ilustrar la fortaleza de los Prefabs, tomemos en consideracin algunas
situaciones bsicas en dnde pueden ser tiles.

1.Construyendo una pared de un solo prefab ladrillo al crearlo varias veces en


diferentes posiciones.

2.Un lanzacohetes instancia un prefab de un cohete cuando dispara. El Prefab


contiene un Mesh, Rigidbody, Collider, y un GameObject hijo que contenga su propio
camino/rastro de un particle system.

3.Un robot explotando en muchas piezas. El robot completo operacional es destruido


y remplazado con un prefab de un robot destruido. Este Prefab consistira en la
divisin del robot en muchas partes, todas configuradas con sus propios Rigidbodies y
Particle Systems (sistema de partculas). Esta tcnica le permite explotar un robot en
muchas partes, con una sola linea de cdigo, remplazando un objeto con un Prefab.

- 151 -
Construyendo una pared
Esta explicacin ilustra las ventajas de usar un Prefab vs crear objetos desde el cdigo.

Primero, construyamos una pared de ladrillo desde cdigo:


// JavaScript
function Start () {
for (var y = 0; y < 5; y++) {
for (var x = 0; x < 5; x++) {
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.AddComponent.<Rigidbody>();
cube.transform.position = Vector3 (x, y, 0);
}
}
}

// C#
public class Instantiation : MonoBehaviour {

void Start() {
for (int y = 0; y < 5; y++) {
for (int x = 0; x < 5; x++) {
GameObject cube =
GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.AddComponent<Rigidbody>();
cube.transform.position = new Vector3(x, y, 0);
}
}
}
}
Para usar el script de arriba, sencillamente guardamos el script y lo arrastramos a un
GameObject vaco.

Cree un GameObject vaco con GameObject->Create Empty.

Si usted ejecuta este cdigo, va a ver como una pared completa ladrillo se crea
cuando se ingresa al Play mode (modo de juego). Hay dos lineas relevantes a la
funcionalidad de cada ladrillo individual: la linea de CreatePrimitive , y la linea
de AddComponent . No es malo ahorita, pero, cada uno de los ladrillo no tiene
textura. Cada accin adicional que queramos realizarle al ladrillo, como cambiar de
textura, de friccin , o de Rigidbody mass, es en una linea extra.

Si usted crea un Prefab y realiza todas las configuraciones antes, usted solo entonces
usa una linea de cdigo para crear y configurara cada ladrillo. Esto lo libera del
mantenimiento y del cambio de mucho cdigo cuando decida que quiere hacer
cambios. Con un Prefab, usted solo hace los cambios y juega. No hay una
modificacin del cdigo necesario.

Si est utilizando un Prefab para cada ladrillo individual, este es el cdigo que necesita

- 152 -
para crear la pared.
// JavaScript

var brick : Transform;


function Start () {
for (var y = 0; y < 5; y++) {
for (var x = 0; x < 5; x++) {
Instantiate(brick, Vector3 (x, y, 0), Quaternion.identity);
}
}
}

// C#
public Transform brick;

void Start() {
for (int y = 0; y < 5; y++) {
for (int x = 0; x < 5; x++) {
Instantiate(brick, new Vector3(x, y, 0), Quaternion.identity);
}
}
}
Esto no solo es muy organizado, pero tambin re-utilizable. No hay nada que diga que
estamos instanciando un cubo o que debe tener un rigidbody. Todo esto est definido
en el Prefab y se puede crear de forma rpida en el Editor.

Ahora solo necesitamos crear el Prefab, que se puede hacer en el Editor. He aqu
cmo:

1.Escoja GameObject > 3D Object > Cube

2.Escoja Component > Physics > Rigidbody

3.Escoja Assets > Create > Prefab

4.En el Project View, cambie el nombre de su nuevo Prefab a Ladrillo

5.Arrastre el cubo que creo en la Hierarchy al Prefab del Ladrillo en el Project View

6.Con el Prefab creado, usted puede con seguridad borrar el Cubo de la Jerarqua
(Delete en Windows, Command-Backspace en Mac)

Hemos creado nuestro Prefab de Ladrillo, ahora tenemos que adjuntarlo a la


variable brick en nuestro script. Cuando seleccione el GameObject vaco que contiene
el script, la variable Brick va a aparecer en el inspector.

Ahora arrastre el Prefab del Ladrillo de la Vista de Proyecto(Project View) a la


variable brick en el Inspector. Oprima el botn de juego (reproducir/play) y ver el
muro construido con el Prefab.

- 153 -
Este es un patrn de flujo de trabajo que puede ser utilizado las veces que se quiera
en Unity. En el principio usted podr preguntarse por qu esto es mejor, ya que el
script creando el cubo usando cdigo es solo dos lineas ms largo.

Pero ya que est utilizando un Prefab, usted puede ajustar el Prefab en segundos.
Quiere cambiar la masa de todas esas instancias? Ajuste el RigidBody en el Prefab una
sola vez. Quiere usar un Material para todas las instancias? Arrastre el Material al
Prefab una sola vez. Quiere cambiar la friccin? Use un Physic Material diferente en
el collider del Prefab. Quiere agregar un Particle System a todas esas cajas? Agregue
un hijo al Prefab solo una vez.

Instanciando cohetes & explosiones


He aqu cmo los Prefabs tienen lugar en este escenario:

1.Un lanzacohetes instancia un prefab de un cohete cuando el usuario presiona


fuego. El Prefab contiene un mesh, Rigidbody, Collider, y un GameObject hijo que
contiene un camino de un particle system.

2.El cohete impacta e instancia un prefab de una explosin. El prefab de una


explosin contiene un Particle System, una luz que se desvanece con el tiempo, y un
script que aplica dao a los GameObjects de alado.

Aunque es posible construir un GameObject cohete completamente por cdigo,


aadiendo Componentes manualmente y ajustando propiedades; es ms fcil
instanciar un Prefab. Usted puede instanciar el cohete en una sola linea de cdigo, sin
importar qu tan complejo el prefab del cohete es. Despus de instanciar el Prefab,
tambin puede modificar cualquier propiedad del objeto instanciado (e.g. puede
establecer la velocidad del Rigidbody del cohete).

A parte de ser ms fcil de usar, usted puede actualizar el prefab ms tarde. Entonces
si est construyendo un cohete, inmediatamente no tiene que agregar un camino de
partculas a l. Usted puede hacer eso ms tarde. Tan pronto como agregue el camino
como un GameObject hijo al Prefab, todos los cohetes instanciados tendrn caminos
de partcula. Y ltimamente, usted puede ajustar rpidamente las propiedades del
prefab de su cohete en el Inspector, haciendo ms fcil afinar su juego.

Este script muestra cmo lanzar un cohete usando la funcin Instantiate() .


// JavaScript

// Require the rocket to be a rigidbody.


// This way we the user can not assign a prefab without rigidbody

- 154 -
var rocket : Rigidbody;
var speed = 10.0;

function FireRocket () {
var rocketClone : Rigidbody = Instantiate(rocket, transform.position,
transform.rotation);
rocketClone.velocity = transform.forward * speed;
// You can also acccess other components / scripts of the clone
rocketClone.GetComponent.<MyRocketScript>().DoSomething();
}

// Calls the fire method when holding down ctrl or mouse


function Update () {
if (Input.GetButtonDown("Fire1")) {
FireRocket();
}
}

// C#

// Require the rocket to be a rigidbody.


// This way we the user can not assign a prefab without rigidbody
public Rigidbody rocket;
public float speed = 10f;

void FireRocket () {
Rigidbody rocketClone = (Rigidbody) Instantiate(rocket, transform.position,
transform.rotation);
rocketClone.velocity = transform.forward * speed;

// You can also acccess other components / scripts of the clone


rocketClone.GetComponent<MyRocketScript>().DoSomething();
}

// Calls the fire method when holding down ctrl or mouse


void Update () {
if (Input.GetButtonDown("Fire1")) {
FireRocket();
}
}

Sustituir un personaje con un mueco de trapo o una ruina


Digamos que usted tiene un personaje enemigo completamente ensamblado y se
muere. Usted puede simplemente reproducir una animacin de muerte en el
personaje y deshabilitar todos los scripts que usualmente se utilizan en la lgica del
enemigo. Probablemente tendr que encargarse de quitar varios scripts, agregando
una lgica personalizada para asegurarse de que nadie vaya a continuar de atacar el
enemigo, y otras tareas de limpieza.

Un mejor acercamiento es inmediatamente borrando el personaje entero y


remplazarlo con un prefab instanciado destruido. Esto le da mucha flexibilidad. Puede
utilizar un material diferente para el personaje muerto,adjuntar scripts

- 155 -
completamente diferentes, generar un prefab conteniendo el objeto roto en muchos
pedazos para simular un enemigo destrozado, o simplemente instanciar un prefab
que contiene la versin del personaje.

Cualquiera de estas opciones pueden ser logradas con una sola llamada
a Instantiate(), solamente tiene que adjuntarlo en el prefab correcto y est hecho!

La parte importante que recordar es que los restos que usted Instantiate() pueden
ser hechos por objetos completamente distintos al original. Por ejemplo, si usted
tiene un avin, va a modelar dos versiones. Una en la que el avin consista de un solo
GameObject con Mesh Renderer y scripts para la fsica de avin. Manteniendo el
modelo en un solo GameObject, su juego va a correr ms rpido ya que va a poder
hacer el modelo con menos tringulos, y como tiene menos objetos, va a
representarse ms rpido que usando partes pequeas. Ademas, mientras su avin
est felizmente volando por ah, no hay razn para tenerlo en partes separadas.

Para construir un Prefab de un avin en ruinas, los pasos tpicamente son:

1.Modele su avin con muchas partes diferentes en su modelador favorito

2.Cree una escena vaca

3.Arrastre el modelo a la escena vaca

4.Agregue Rigidbodies a todas las partes, seleccionando todas las partes y


escogiendo Component->Physics->Rigidbody

5.Agregue Box Colliders a todas las partes seleccionando todas las partes y
escogiendo Component->Physics->Box Collider

6.Para un efecto especial extra, agregue un Particle System de humo como un


GameObject hijo a cada una de las partes.

7.Ahora tiene un avin con mltiple partes explotadas, que caen al piso por fsica y
van a dejar un camino de partcula(Particle Trail) gracias al Particle System adjunto.
Oprima el botn de jugar (reproducir/play) para obtener una vista previa de cmo
reacciona su modelo y hacer cualquier ajuste necesario.

8.Escoja Assets->Create Prefab

9.Arrastre el GameObject raz que contiene todas las partes del avin al Prefab.

El siguiente ejemplo le muestra cmo estos pasos son modelados en cdigo.


// JavaScript

- 156 -
var wreck : GameObject;

// As an example, we turn the game object into a wreck after 3 seconds


automatically
function Start () {
yield WaitForSeconds(3);
KillSelf();
}

// Calls the fire method when holding down ctrl or mouse


function KillSelf () {
// Instantiate the wreck game object at the same position we are at
var wreckClone = Instantiate(wreck, transform.position, transform.rotation);

// Sometimes we need to carry over some variables from this object


// to the wreck
wreckClone.GetComponent.<MyScript>().someVariable =
GetComponent.<MyScript>().someVariable;

// Kill ourselves
Destroy(gameObject);

// C#

public GameObject wreck;

// As an example, we turn the game object into a wreck after 3 seconds


automatically
IEnumerator Start() {
yield return new WaitForSeconds(3);
KillSelf();
}

// Calls the fire method when holding down ctrl or mouse


void KillSelf () {
// Instantiate the wreck game object at the same position we are at
GameObject wreckClone = (GameObject) Instantiate(wreck, transform.position,
transform.rotation);

// Sometimes we need to carry over some variables from this object


// to the wreck
wreckClone.GetComponent<MyScript>().someVariable =
GetComponent<MyScript>().someVariable;

// Kill ourselves
Destroy(gameObject);
}

Poniendo un montn de objetos en un patrn especfico


Digamos que quiere colocar un montn de objetos en patrn de una cuadricula o
circulo. Tradicionalmente esto hubiera sido hecho por ambos:

1.Construyendo un objeto completamente por cdigo. Esto es tedioso! Escribiendo

- 157 -
valores de un script es a la vez lento, poco intuitivo y no vale la pena la molestia.

2.Hacer el objeto completamente ensamblado, duplicarlo y ponerlo muchas veces en


la escena. Esto es tedioso, y colocar objetos con precisin en una cuadrcula es difcil.

Entonces use mejor Instantiate() con un Prefab! Nosotros pensamos que usted
tendr idea del por qu los Prefab son tan tiles en estos escenarios. He aqu el
cdigo necesario para estos escenarios:
// JavaScript

// Instantiates a prefab in a circle

var prefab : GameObject;


var numberOfObjects = 20;
var radius = 5;

function Start () {
for (var i = 0; i < numberOfObjects; i++) {
var angle = i * Mathf.PI * 2 / numberOfObjects;
var pos = Vector3 (Mathf.Cos(angle), 0, Mathf.Sin(angle)) * radius;
Instantiate(prefab, pos, Quaternion.identity);
}
}

// C#
// Instantiates a prefab in a circle

public GameObject prefab;


public int numberOfObjects = 20;
public float radius = 5f;

void Start() {
for (int i = 0; i < numberOfObjects; i++) {
float angle = i * Mathf.PI * 2 / numberOfObjects;
Vector3 pos = new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)) *
radius;
Instantiate(prefab, pos, Quaternion.identity);
}
}

// JavaScript

// Instantiates a prefab in a grid

var prefab : GameObject;


var gridX = 5;
var gridY = 5;
var spacing = 2.0;

function Start () {
for (var y = 0; y < gridY; y++) {
for (var x=0;x<gridX;x++) {
var pos = Vector3 (x, 0, y) * spacing;
Instantiate(prefab, pos, Quaternion.identity);
}

- 158 -
}
}

// C#

// Instantiates a prefab in a grid

public GameObject prefab;


public float gridX = 5f;
public float gridY = 5f;
public float spacing = 2f;

void Start() {
for (int y = 0; y < gridY; y++) {
for (int x = 0; x < gridX; x++) {
Vector3 pos = new Vector3(x, 0, y) * spacing;
Instantiate(prefab, pos, Quaternion.identity);
}
}
}

- 159 -
Input
Unity soporta dispositivos de entrada convencionales usados en juegos (teclado,
joypad, etc) pero tambin pantallas tctiles y la capacidad de deteccin de
movimiento de dispositivos mviles. En esta seccin se cubren estos tipos de entrada.

Adicionalmente, Unity puede hacer uso de un micrfono de computador y cmara


web para input datos de audio y video. Mirar las secciones de Audio y Graphics en el
manual para ms informacin.

- 160 -
Input Convencional de Juego
Unity soporta teclado, joystick y gamepad input.

Se pueden crear botones y ejes virtuales en el Input Manager, y los usuarios finales
pueden configurar su input de teclado en un dialogo de configuracin bonito en la
pantalla.

Usted puede configurar joysticks, gamepads, teclado, y mouse, luego acceder a todos
con una interfaz simple de scripting. Tpicamente usted utiliza los ejes y botones para

- 161 -
pretender que es un control de consola. Alternativamente, se puede acceder a las
teclas en el teclado.

Virtual Axes (Ejes Virtuales)


Desde los scripts, todos los ejes virtuales son accedidos por su nombre.

Cada proyecto tiene el siguiente eje input por defecto cuando es creado:

Horizontal y Vertical son asignados a las teclas w, a, s, d y las teclas de flecha.

Fire1, Fire2, Fire3 estn asignadas a las teclas Control, Option (Alt), y Command,
respectivamente.

Mouse X y Mouse Y estn asignados al movimiento delta del mouse.

Window Shake X y Window Shake Y es asignado al movimiento de la ventana.

Agregando nuevos ejes de Input (Input Axes)


Si usted quiere agregar unos nuevos ejes virtuales vaya al men Edit->Project
Settings->Input. Aqu usted puede tambin cambiar los ajustes para cada eje.

- 162 -
Usted asigna cada eje con dos botones en un joystick, mouse, o teclas del teclado.

Propiedad: Funcin:
El nombre del string usado para revisar este
Name
eje desde un script.
Nombre de valor positivo mostrado en la
Descriptive Name pestaa input del dialogo Configuration para
construcciones standalone.
Descriptive Negative Name Nombre del valor negativo mostrado en la
pestaa Input del dialogo Configuration para

- 163 -
Propiedad: Funcin:
construcciones standalone.
El botn usado para empujar el eje en la
Negative Button
direccin negativa.
El botn usado para empujar el eje en la
Positive Button
direccin positiva.
El botn alternativo usado para empujar el eje
Alt Negative Button
en la direccin negativa.
El botn alternativo usado para empujar el eje
Alt Positive Button
en la direccin positiva.
Velocidad en unidades por segundo que el eje
Gravity cae hacia el neutro cuando no hay botones
oprimidos.
Tamao de la zona muerta anloga. Todos los
Dead valores de dispositivos anlogos dentro de este
rango resultan el mapa a neutral.
Velocidad en unidades por segundo que el eje
Sensitivity va a moverse hacia el valor de destino. Esto es
solo para dispositivos digitales.
Si habilitado, el valor del eje se restablecer a
Snap cero cuando se oprima un botn de la
direccin opuesto.
Si est habilitado, los Botones
Invert Negativos proporcionan un valor positivo y
vice-versa.
Type El tipo de inputs que controlar este eje.
El eje de un dispositivo conectado que
Axis
controlar este eje.
Joy Num El Joystick conectado que controlar este eje.
Use estos ajustes para ajustar con precisin el aspecto del input. Todos estn
documentados con tooltips en el Editor tambin.

Usando Ejes de Input (Input Axes) desde los Scripts


Puede consultar el estado actual de un script de esta manera:
value = Input.GetAxis ("Horizontal");
Este es el caso del Joystick input y el input del teclado.

No obstante, el delta del mouse(Mouse Delta) y el delta del movimiento de la


ventana(Window Shake Delta) son cunto el mouse o la ventana se movi durante el

- 164 -
ltimo cuadro. Esto significa que puede ser mayor que 1 o menor que 1 cuando el
usuario mueve el mouse rpidamente.

Es posible crear ejes mltiples con el mismo nombre. Cuando obtenga el input del eje,
el eje con el mayor valor absoluto va a ser devuelto. Esto hace que sea posible asignar
ms de un dispositivo input al nombre de un eje. Por ejemplo, cree un eje para un
input de teclado y un eje para un input de joystick con el mismo nombre. Si el usuario
est usando el joystick, el input vendr del joystick, de otra manera el input vendr del
teclado. De esta forma, usted no tendr que considerar de dnde el input viene
cuando escriba scripts.

Nombres de Botones
Para mapear una tecla a un eje, usted necesita ingresar el nombre de la tecla en la
propiedad Positive Button o Negative Button en el Inspector.

Teclas
Los nombres de la tecla siguen esta convencin:

Teclas normales: a, b, c

Teclas numricas: 1, 2, 3,

Teclas de flecha: Arriba, abajo, izquierda, derecha

Las teclas de teclado: [1], [2], [3], [+], [equals]

Teclas de modificacin: Derecha shift, Izquierda shift, Derecha ctrl, Izquierda ctrl,
Derecha alt, Izquierda alt, Derecha cmd, Izquierda cmd

Botones del mouse: mouse 0, mouse 1, mouse 2,

Botones del Joystick (desde cualquier joystick): joystick botn 0, joystick botn 1,
joystick botn 2,

Botones del Joystick (Desde un joystick especfico): joystick 1 botn 0, joystick 1


botn 1, joystick 2 botn 0,

Teclas especial: backspace, tab, return, escape, space, delete, enter, insert,
home, end, page up, page down

Teclas funcionales: f1, f2, f3,

Los nombres utilizados para identificar las teclas son los mismo de la interfaz del

- 165 -
scripting y el Inspector.
value = Input.GetKey ("a");
Un eje tiene un valor entre 1 y 1. La posicin neutral es 0. Tenga en cuenta que las
teclas tambin son accesibles utilizando el parmetro enum KeyCode.

- 166 -
Input de Dispositivo Mvil
En dispositivos mviles, la clase Input ofrece acceso al input de la pantalla tctil,
acelermetro y geogrfico/ubicacin.

Acceso al teclado en los dispositivos mviles se proporciona a travs de iOS keyboard.

Pantalla Multi-Touch
Los dispositivos iPhone y iPod Touch son capaces de rastrear hasta cinco dedos
tocando la pantalla al mismo tiempo. Puede recuperar el estado de cada dedo
tocando la pantalla durante el ltimo cuadro accediendo a la matriz de
propiedad Input.touches.

Los dispositivos Android no tienen un limite unificado en cuntos dedos pueden


rastrear. En vez, esto varia de dispositivo en dispositivo y puede ser cualquiera desde
dos dedos en dispositivos viejos hasta cinco dedos en algunos nuevos dispositivos.

Cada toque de dedo es representado por una estructura de dato Input.Touch:

Propiedad: Funcin:
fingerId El nico ndice para un toque.
position La posicin en la pantalla del tacto.
El cambio de la posicin en la pantalla desde
deltaPosition
el ltimo cuadro.
El tiempo que ha pasado desde el ltimo
deltaTime
cambio de estado.
La pantalla del Iphone/Ipad es capaz de
distinguir tactos rpidos del dedo hechos por
el usuario. Este contador le va a permitir saber
tapCount qu tantas veces el usuario a tocado la pantalla
sin mover un dedo a los lados. Los
dispositivos Android no tienen un nmero
contable de tactos, este campo siempre es 1.
Describe lo que se llama phase (fase) o el
estado del toque. Le puede ayudar a
phase
determinar si el toque acaba de empezar, si el
usuario movi el dedo o si levanto el dedo.
La fase puede ser una de las siguientes:

- 167 -
Began Un dedo acaba de tocar la pantalla.
Moved Un dedo se movi en la pantalla.
Un dedo est tocando la pantalla pero no se ha
Stationary
movido desde el ltimo cuadro.
Un dedo fue alzado desde la pantalla. Esta es
Ended
la fase final de un toque.
El sistema ha cancelado el rastreo para el
toque, como cuando (por ejemplo) el usuario
Canceled pone el dispositivo a su cara o ms de cinco
toques pasan simultneamente. Esta es la fase
final del toque.
A continuacin se muestra un script de ejemplo que disparar un rayo cuando el
usuario golpee la pantalla:
var particle : GameObject;
function Update () {
for (var touch : Touch in Input.touches) {
if (touch.phase == TouchPhase.Began) {
// Construct a ray from the current touch coordinates
var ray = Camera.main.ScreenPointToRay (touch.position);
if (Physics.Raycast (ray)) {
// Create a particle if hit
Instantiate (particle, transform.position, transform.rotation);
}
}
}
}

Simulacin de Mouse
Encima del soporte nativo tctil Unity iOS/Android proporciona una simulacin de
mouse. Usted puede utilizar una funcionalidad de mouse desde la clase
estndar Input. Tenga en cuenta que dispositivos iOS/Android estn diseados para
soportar mltiples toques de dedos. Utilizar la funcionalidad mouse, solo va a
soportar un solo toque de dedo. Tambin, el toque de dedo en dispositivos mviles se
puede mover de una rea a otra sin un movimiento entre ellos. La simulacin de
mouse en dispositivos mviles va a proporcionar movimiento, por lo que es muy
diferente comparado a un input tctil. La recomendacin es utilizar la simulacin
mouse durante un desarrollo temprano pero utilizar input tctil tan pronto como sea
posible.

- 168 -
Acelermetro
A medida que el dispositivo mvil se mueva, un acelermetro integrado reporta una
aceleracin lineal. cambios a lo largo de los tres principales ejes en un espacio
tridimensional. Aceleracin a lo largo de cada eje es reportado directamente por el
hardware como valores de una fuerza gravitacional(G-force values). Un valor de 1.0
representa una carga de aproximadamente +1g a lo largo del eje determinado
mientras un valor de 1.0 representa 1g. Si mantiene el dispositivo en posicin
vertical (con el botn de inicio en el fondo) al frente de usted, el eje X es positivo a lo
largo de la derecha, el eje Y es positivo directamente arriba, y el eje Z es apuntando
positivamente hacia usted.

Usted puede recuperar el valor del acelermetro accediendo a la


propiedad Input.acceleration.

El siguiente es un ejemplo de script que mover un objeto utilizando el acelermetro:


var speed = 10.0;
function Update () {
var dir : Vector3 = Vector3.zero;

// we assume that the device is held parallel to the ground


// and the Home button is in the right hand

// remap the device acceleration axis to game coordinates:


// 1) XY plane of the device is mapped onto XZ plane
// 2) rotated 90 degrees around Y axis
dir.x = -Input.acceleration.y;
dir.z = Input.acceleration.x;

// clamp acceleration vector to the unit sphere


if (dir.sqrMagnitude > 1)
dir.Normalize();

// Make it move 10 meters per second instead of 10 meters per frame...


dir *= Time.deltaTime;

// Move object
transform.Translate (dir * speed);
}

Filtro de Paso Bajo(Low-Pass Filter)


Las lecturas de acelermetros pueden ser bruscas y ruidosas. Aplicando filtro de paso
bajo(low-pass filtering) en la seal le permite a usted suavizarlo y deshacerse de
ruidos de alta frecuencia.

El siguiente script le muestra a usted cmo aplicar un filtro de paso bajo(low-pass


filtering) a las lecturas del acelermetro:

- 169 -
var AccelerometerUpdateInterval : float = 1.0 / 60.0;
var LowPassKernelWidthInSeconds : float = 1.0;

private var LowPassFilterFactor : float = AccelerometerUpdateInterval /


LowPassKernelWidthInSeconds; // tweakable
private var lowPassValue : Vector3 = Vector3.zero;
function Start () {
lowPassValue = Input.acceleration;
}

function LowPassFilterAccelerometer() : Vector3 {


lowPassValue = Vector3.Lerp(lowPassValue, Input.acceleration,
LowPassFilterFactor);
return lowPassValue;
}

Cuanto mayor sea el valor de LowPassKernelWidthInSeconds, ms lento ser el


valor filtrado convergiendo hacia la muestra del input actual (y vice versa).

Quisiera la mayor precisin posible al leer el acelermetro. Qu debo hacer?


Leyendo la variable deInput.acceleration no es igual al sampling del hardware. Puesto
simplemente, Unity prueba el hardware a una frecuencia de 60Hz y almacena el
resultado a una variable. En realidad, las cosas son un poco ms complicadas el
sampling del acelermetro no ocurre en un intervalo de tiempo consistente, si bajo
cargas significativas de CPU. Como un resultado, el sistema puede reportar 2
ejemplos durante un cuadre, luego un ejemplo durante el siguiente cuadro.

Usted puede acceder a todas las mediciones realizadas por el acelermetro durante el
cuadro. El siguiente cdigo ilustrar un simple promedio de todos los eventos del
acelermetro recolectados dentro el ltimo cuadro:
var period : float = 0.0;
var acc : Vector3 = Vector3.zero;
for (var evnt : iPhoneAccelerationEvent in iPhoneInput.accelerationEvents) {
acc += evnt.acceleration * evnt.deltaTime;
period += evnt.deltaTime;
}
if (period > 0)
acc *= 1.0/period;
return acc;

- 170 -
Teclado mvil
En la mayora de los casos, Unity manejar input de teclado automticamente para
elementos GUI pero tambin es fcil mostrar el teclado en demanda desde un script.

Elementos GUI
El teclado aparecer automticamente cuando un usuario golpee en elementos GUI
editables. Actualmente, GUI.TextField, GUI.TextArea y GUI.PasswordField va a mostrar
el teclado; vea la documentacin GUI class para ms detalles.

Manejo del teclado manual


Use la funcin TouchScreenKeyboard.Open() para abrir el teclado. Por favor ver la
referencia del scripting TouchScreenKeyboard para los parmetros que est funcin
toma.

Opciones de distribucin del teclado


El teclado soporta las siguientes opciones:-

Property: Function:
Letras. Pueden ser cambiadas al teclado con
TouchScreenKeyboardType.Default
nmeros y puntuacin.
Letras. Pueden ser cambiadas al teclado con
TouchScreenKeyboardType.ASCIICapable
nmeros y puntuacin.
TouchScreenKeyboardType.NumbersAndP Nmeros y puntuacin. Pueden ser cambiadas
unctuation al teclado con letras.
Letras con barras y botones .com .Pueden ser
TouchScreenKeyboardType.URL cambiadas a teclado con nmeros y
puntuacin.
TouchScreenKeyboardType.NumberPad Solo nmeros de 0 a 9.
Teclado usado para introducir nmeros de
TouchScreenKeyboardType.PhonePad
telfono.
TouchScreenKeyboardType.NamePhonePa Letras. Pueden ser cambiadas al teclado de
d telfono.
Letras con signo @. Pueden ser cambiadas a
TouchScreenKeyboardType.EmailAddress
teclado con nmeros y puntuacin.

- 171 -
Vista Preliminar de Texto
Por defecto, una caja de edicin va a ser creada y colocada encima del teclado
despus de que aparezca. Esto funciona como una vista preliminar del texto que el
usuario est escribiendo, entonces el texto es siempre visible para el usuario. No
obstante, puede deshabilitar la vista preliminar del texto
seleccionando TouchScreenKeyboard.hideInput a true. Tenga en cuenta que esto
funciona solo para ciertos tipos de teclado y modos de input. Por ejemplo, esto no va
a servir para los teclados de telfono e input de texto de varias lineas. En esos casos,
la caja de edicin siempre va aparecer. TouchScreenKeyboard.hideInput es una
variable global y va afectar todos los teclados.

Visibilidad y tamao del teclado


Hay tres propiedades de teclado en TouchScreenKeyboard que determina estatus de
la visibilidad del teclado y el tamao en la pantalla.

Property: Function:
Devuelve true si el teclado es completamente
visible visible en la pantalla y puede ser usada para
introducir caracteres.
Devuelve la posicin y dimensiones del
area
teclado.
Devuelve true si el teclado est activado. Esta
propiedad no es una propiedad esttica. Usted
active
debe tener una instancia de teclado para usar
esta propiedad.
Tenga en cuenta que TouchScreenKeyboard.area va a devolver un Rect con una
posicin y tamao establecido en 0 hasta que el teclado sea completamente visible en
la pantalla. Usted no debe consultar este valor inmediatamente despus
de TouchScreenKeyboard.Open(). La secuencia de eventos de teclado es la siguiente:

TouchScreenKeyboard.Open() es llamada. TouchScreenKeyboard.active devuelve


true. TouchScreenKeyboard.visible devuelve
false. TouchScreenKeyboard.area devuelve (0, 0, 0, 0).

El teclado se desliza afuera de la pantalla. Todas las propiedades se mantienen igual.

El teclado para de deslizarse. TouchScreenKeyboard.active devuelve


true. TouchScreenKeyboard.visible devuelve
true. TouchScreenKeyboard.area devuelve la verdadera posicin y tamao del teclado.

- 172 -
Input Seguro de Texto
Es posible configurar el teclado para esconder smbolos cuando se est escribiendo.
Esto es til cuando los usuarios son requeridos en anotar informacin sensible (tal
como contraseas). Para abrir manualmente el teclado con input seguro de texto
activado, use el siguiente cdigo:
TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, false,
true);

Hiding text while typing

Teclado de Alerta
Para mostrar el teclado con un fondo semi-transparente en vez del opaco clsico,
llamar TouchScreenKeyboard.Open() como sigue :
TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, false,
true, true);

Classic keyboard

- 173 -
Alert keyboard

- 174 -
Transforms
El Transform es usado para almacenar la posicin, rotacin, escala y el estado de
parenting de un GameObject y por lo tanto es importante. Un GameObject siempre va
a tener adjunto un Transform component - no es posible quitar un Transform o crear
un GameObject sin uno.

Editando Transforms
Transforms son manipulados en espacio 3D en el eje X, Y, y Z o en espacio 2D en solo
X y Y. En Unity, estos ejes son representados por los colores rojo, verde, y azul
respectivamente.

Un transform mostrando la
codificacin de color de los ejes

Un Transform puede ser editado en el Scene View o cambiando sus propiedades en el


Inspector. En la escena, usted puede modificar Transforms usando las herramientas
de desplazamiento, rotacin y escala. Estas herramientas estn ubicadas en la
esquina superior izquierda del editor de Unity.

Las herramientas de View, Translate, Rotate, y Scale

Las herramientas pueden ser usadas en cualquier objeto en la escena. Cuando haga
click en un objeto, usted va a ver la herramienta gizmo aparecer dentro de l. La
apariencia del gizmo depende en qu herramienta es seleccionada.

- 175 -
Transform
gizmo

Cuando haga click y arrastre en uno de los tres ejes de gizmo, usted ver que sus
colores cambiarn a amarillo. A medida que arrastre el mouse, usted vera el objeto
trasladarse(translate), rotar(rotate), o escalar(scale) a lo largo del eje seleccionado.
Cuando suelte el botn del mouse, el eje se mantiene seleccionado. Si usted
posteriormente arrastra con el botn del medio del mouse, el ltimo eje seleccionado
va a ser usado sin importar la posicin del mouse.

Un Transform mostrando el eje


(amarillo) X seleccionado

Tambin hay una opcin adicional en el modo Translate para bloquear el movimiento
a un plano en particular (ie, permite arrastrar dos de los ejes mientras se mantiene el
tercero sin cambios). Los tres cuadrados pequeos coloridos alrededor del centro del
Translate gizmo activa el bloqueo para cada plano; los colores corresponden al eje
que va a ser bloqueado cuando el cuadrado sea clickeado (eg, azul bloque el eje Z).

- 176 -
Parentesco
Parenting es uno de los conceptos ms importantes que entender cuando se usa
Unity. Cuando un GameObject es un Parent de otro GameObject, el
GameObject Child va a moverse,rotar, y escalar exactamente como su padre(parent)
lo haga. Usted puede pensar de parenting como la relacin entre sus brazos y su
cuerpo; cuando su cuerpo se mueva, sus brazos tambin se mueven junto con l.
Objetos hijo(Child) pueden tener otros hijos(children) de s mismo y as. Entonces sus
manos pueden ser pensadas como children de sus brazos y luego cada mano tiene
varios dedos, etc. Cualquier objeto puede tener mltiplos hijos(children), pero solo un
padre(parent). Estos mltiplos niveles de relaciones padre-hijo forman
una jerarquaTransform. El objeto en la parte superior de la jerarqua (ie, el nico
objeto en la jerarqua que no tiene un parent) es conocido como el root.

Usted puede crear un padre(parent) al arrastrar cualquier GameObject en


la Hierarchy View encima de otro. Esto va a crear una relacin padre-hijo entre los
dos GameObjects.

Ejemplo de una jerarqua Padre-Hijo. GameObjects con


flechas plegables a la izquierda de sus nombres son padres.

Tenga en cuenta que los valores del Transform en el Inspector para cualquier
GameObject hijo(Child) son mostrados relativamente a los valores del Transform del
padre(Parent). Estos valores son referidos como local coordinates.. Devolviendo a la
analoga del cuerpo y los brazos, la posicin de su cuerpo puede moverse cuando
camine, pero sus brazos se van a mantener adjuntos en la misma posicin relativa.
Para la construccin de una escena, es usualmente suficiente trabajar con

- 177 -
coordenadas locales para objetos hijo, pero en la experiencia de juego, a menudo es
til encontrar su posicin exacta en el espacio universal o global coordinates. El
Scripting API para el Transform Component tiene propiedades separadas para
posiciones locales y globales, rotacin y escala y tambin le permite a usted convertir
cualquier punto entre coordenadas locales y globales.

Limitaciones con Escalado No Uniforme


El escalado no uniforme es cuando un Scale en un Transform tiene diferentes valores
para x, y, y z; por ejemplo (2,4,2). En contraste, el escalado uniforme tiene el mismo
valor para x, y, y z; por ejemplo (3,3,3). El Escalado no uniforme puede ser til en unos
poquitos casos especficos pero usualmente debera ser evitado ya que reduce la
velocidad de la renderizacin grfica. Tambin, introduce un poquito de rarezas que
no ocurren con el escalado uniforme.

Ciertos components no soportan completamente el escalado no uniforme. Por


ejemplo, algunos components tienen un elemento circular o esfrico definido por una
propiedad de radius, entre ellos Sphere Collider, Capsule Collider , Light y Audio
Source. En casos como este la forma circular no se volver elptica bajo el escalado no
uniforme como es de esperar y simplemente seguir siendo circular.

Cuando un objeto hijo tiene un padre con escalado no uniforme y es rotado


relativamente a ese padre, puede parecer sesgado o cortado. Hay components que
soportan escalado no uniforme simple pero que no funcionan adecuadamente
cuando se tuercen as. Por ejemplo, un Box Collider torcido no va a coincidir
precisamente con el mesh que fue renderizado.

Por razones de rendimiento, un objeto hijo de un padre con una escala no uniforme,
no va a tener su escala automticamente actualizada cuando rote. Como un
resultado, la forma del hijo puede parecer cambiar abruptamente cuando la escala
eventualmente es actualizada, digamos si el objeto hijo es separado del padre.

La Importancia de la Escala
La escala del Transform determina las diferencias entre el tamao de un mesh en su
aplicacin de modelado y el tamao de ese mesh en Unity. El tamao del mesh en
Unity (y por lo tanto la escala del Transform) es muy importante, especialmente
durante la simulacin de fsica. Por defecto, el motor de fsica asume que una unidad
del espacio del mundo corresponde a un metro. Si un objeto es muy grande, puede

- 178 -
parecer que cayera en cmara lenta; la simulacin es actualmente correcta ya que
efectivamente, usted est viendo un objeto muy grande caer una gran distancia.

Hay tres factores que pueden afectar la escala de su objeto:

El tamao del mesh en su aplicacin de modelado 3D.

El ajuste Mesh Scale Factor en las Import Settings del objeto.

Los valores del Scale de su Transform Component.

Idealmente, usted no debe ajustar la Scale de su objeto en el Transform Component.


La mejor opcin es crear sus modelos en una escala de la vida real para que tenga
que cambiar la escala del Transform. La siguiente mejor opcin es ajustar la escala la
cual su mesh est siendo importado en las Import Settings de su mesh individual.
Ciertas optimizaciones ocurren basadas en el tamao de importacin, e instanciando
un objeto que tiene un valor de escala adjustado puede disminuir el rendimiento.
Para ms informacin, ver la seccin acerca de optimizar la escala en la pgina
del Rigidbody component.

Tips para Trabajar con Transforms


Cuando parenting Transforms, es til establecer la ubicacin del padre en <0,0,0>
antes de aadir el hijo. Esto significa que las coordenadas locales para el hijo van a ser
las mismas a las coordenadas globales haciendo que sea fcil saber si usted tiene el
hijo en la posicin correcta.

Los Particle Systems no son afectados por la Scale del Transform. Para escalar un
Particle System, usted tiene que modificar las propiedades en el emisor del sistema
de partculas, Animator y Renderer.

Si est utilizando __Rigidbodies__para simulacin de fsica entonces est seguro de


leer acerca de la propiedad de escala en la pgina de referencia
del Rigidbody component.

Usted puede cambiar los colores de los ejes del Trasnform (y otros elementos UI)
desde las preferencias (Menu: Unity > Preferences y luego seleccionar el panel
de Colors & keys).

Cambiar la Scale (escala) afecta la posicin de los transforms hijo. Por ejemplo
escalar el padre a (0,0,0) va a posicionar todos los hijos en (0,0,0) relativos al padre.

- 179 -
- 180 -
Agregando Aleatoriamente Elementos de
Juego
Los elementos o valores aleatoriamente escogidos son importantes en muchos
juegos. Esta seccin le muestra a usted cmo usar las funciones aleatorias integradas
en Unity para implementar algunas mecnicas comunes de juego.

Escogiendo un elemento aleatorio de una matriz


Escoger un elemento de matriz al azar se reduce a la eleccin de un nmero entero
aleatorio entre cero y el valor mximo de un valor de ndice de una matriz (que es
igual al tamao de la matriz menos uno). Esto es fcilmente hecho usando la funcin
integrada Random.Range:-
var element = myArray[Random.Range(0, myArray.Length)];

Escogiendo Elementos con Diferentes Probabilidades


Algunas veces, usted necesita escoger elementos aleatoriamente pero con algunos
elementos con mayor probabilidad de ser escogidos que otros. Por ejemplo, un NPC
puede reaccionar de maneras distintas cuando se encuentra un jugador.

50% de probabilidad de un saludo amistoso

25% de probabilidad de huir

20% de probabilidad de un ataque inmediato

5% de probabilidad de ofrecer dinero como un regalo

Puede visualizar estos diferentes resultados como una tira de papel dividido en
secciones, cada una de las cuales ocupa una fraccin de la longitud total de la tira. La
fraccin ocupada es igual a la probabilidad que tiene eso de ser escogido. Hacer la
eleccin es equivalente a elegir un punto al azar a lo largo de la longitud de la tira
(digamos lanzando un dardo) y luego ver en qu seccin est.

- 181 -
En el script, la tira de papel es en realidad una matriz de floats que contienen las
diferentes probabilidades de los artculos en orden. El punto aleatorio se obtiene
multiplicando Random.value por el total de todos los floats en la matriz (no tienen por
qu sumar 1; la cosa importante es el tamao relativo de los diferentes valores). Para
encontrar en cul elemento de la matriz est el punto, en primer lugar, revisar para
ver si es menor que el valor en el primer elemento. Si es as, entonces el primer
elemento es el seleccionado. De lo contrario, resta el valor del primer elemento del
valor del punto, y lo compara con el segundo elemento y as sucesivamente hasta que
se encuentre el elemento correcto. En cdigo, esto se vera algo como lo siguiente:-

//JS

function Choose(probs: float[]) {


var total = 0;

for (elem in probs) {


total += elem;
}

var randomPoint = Random.value * total;

for (i = 0; i < probs.Length; i++) {


if (randomPoint < probs[i])
return i;
else
randomPoint -= probs[i];
}

return probs.Length - 1;
}

//C#

float Choose (float[] probs) {

float total = 0;

foreach (float elem in probs) {


total += elem;
}

float randomPoint = Random.value * total;

for (int i= 0; i < probs.Length; i++) {

- 182 -
if (randomPoint < probs[i]) {
return i;
}
else {
randomPoint -= probs[i];
}
}
return probs.Length - 1;
}

Tenga en cuenta que la ltima instruccin de return es necesaria porque


Random.value puede devolver un resultado de 1. En este caso, la bsqueda no
encontrar el valor aleatorio del punto en ninguna parte. Cambiando la linea
if (randomPoint &lt; probs[i])

Ponderando valores continuos aleatorios


El mtodo de arreglo de floats funciona bien si usted tiene resultados discretos, pero
tambin hay situaciones dnde usted quiere producir un resultado ms continuo -
digamos, usted quiere volver aleatorio la cantidad de piezas de oro que se pueden
encontrar en un cofre, y usted lo quiere hacer que sea un nmero entre 1 y 100, pero
quisiera hacer que sea ms probable obtener un nmero menor. Utilizando el
mtodo de arreglo de floats esto requiere que usted configure un arreglo de 100
floats (i.e. secciones en una tira de un papel) lo cual es difcil de manejar; y si usted no
est limitado a nmeros enteros pero cualquier cualquier nmero entre ese rango, es
imposible utilizar ese acercamiento.

Un mejor acercamiento para resultados continuos es utilizar AnimationCurve para


transformar un valor aleatorio raw a uno ponderado; al dibujar diferentes formas
curvas, usted puede producir diferentes ponderaciones. El cdigo tambin es ms
simple de escribir:
//JS

function CurveWeightedRandom(curve: AnimationCurve) {


return curve.Evaluate(Random.value);
}

//C#

float CurveWeightedRandom(AnimationCurve curve) {


return curve.Evaluate(Random.value);
}
Un valor aleatorio raw entre 0 y 1 es escogido al leer de Random.value. Luego es
pasado a curve.Evaluate(), que trata esto como si fuera una coordenada horizontal, y
devuelve la coordenada vertical correspondiente de la curva en esa posicin
horizontal. Las partes con poca profundidad de la curva tienen mayor posibilidad de

- 183 -
ser escogidos, mientras que partes ms pendientes tienen una probabilidad menor
de ser escogidas.

Una curva
lineal no pondera valores en absoluto; la coordenada horizontal es igual a la
coordenada vertical para cada punto en la curva.

- 184 -
Esta curva es
menos profunda al principio, y luego ms empinado al final, por lo que tiene una
mayor probabilidad de valores ms bajos y una probabilidad reducida de valores
mayores. Usted puede ver que la altura de la curva en la linea dnde x=0.5 es acerca
de 0.25, lo cual significa que tiene una probabilidad mayor a la mitad de obtener un
valor entre 0 y 0.25.

- 185 -
Esta curva es
menos profunda al principio y al final, haciendo que los valores cercanos a los
extremos sea ms comn, y en la mitad pendiente lo cual hara esos valores muy
raros. Tenga en cuenta que con esta curva, los valores de altura han aumentado para
arriba: el final de la curva est en 1, y la parte superior de la curva est en 10, lo cual
significa que los valores producidos por la curva estarn en el rango de 110, en vez
de 01 como las curvas anteriores.

Tenga en cuenta que estas curvas no son curvas distribuidas con probabilidad como
las que usted encontrara en una gua de teora de probabilidad, pero son ms como
curvas de probabilidad inversamente acumulativas.

Al definir una variable AnimationCurve pblica en uno de sus scripts, usted ser capaz
de ver y editar la curva a travs de la ventana del Inspector visualmente, en vez de
necesitar calcular valores.

Esta tcnica produce nmeros floating-point. Si usted quiere calcular un resultado


entero - por ejemplo, usted quisiera 82 piezas de oro en vez de 82.1214 piezas de oro
- usted puede simplemente calcular el valor a una funcin como Mathf.RoundToInt().

Barajar una Lista


Una mecnica de juego comn es elegir un conjunto conocido de artculos, pero que
ellos lleguen en un orden aleatorio. Por ejemplo, una baraja de cartas se barajan

- 186 -
normalmente para que no salgan en una secuencia predecible. Usted puede barajar
los elementos de una matriz, visitando cada elemento e intercambindolos con otro
elemento situado en un ndice al azar de la matriz:-
//JS

function Shuffle(deck: int[]) {


for (i = 0; i < deck.Length; i++) {
var temp = deck[i];
var randomIndex = Random.Range(0, deck.Length);
deck[i] = deck[randomIndex];
deck[randomIndex] = temp;
}
}

//C#

void Shuffle (int[] deck) {


for (int i = 0; i < deck.Length; i++) {
int temp = deck[i];
int randomIndex = Random.Range(0, deck.Length);
deck[i] = deck[randomIndex];
deck[randomIndex] = temp;
}
}

Escogiendo de un conjunto de elementos sin repeticin


Una tarea comn es elegir un nmero de elementos al azar de un conjunto sin coger
el mismo ms de una vez. Por ejemplo, usted podr querer generar un nmero de
NPCs en puntos de regeneracin al azar, pero asegurarse de que slo un NPC se
genera en cada punto. Esto se puede hacer mediante la iteracin a travs de los
elementos en la secuencia, tomando una decisin al azar para cada uno sobre si es o
no, agregado al conjunto elegido. A medida que cada elemento es visitado, la
probabilidad de ser elegido es igual al nmero de elementos que se necesita todava,
dividido por el nmero que an queda para ser escogidos.

Como un ejemplo, supongamos que hay diez puntos de regeneracin disponibles,


pero slo cinco deben ser usados. La probabilidad de que el primer punto sea elegido
es de 5 / 10 o 0.5. Si es elegido, entonces la probabilidad para el segundo elemento
ser de 4 / 9 o 0.44 (ie, cuatro elementos todava faltan, nueve restantes para elegir).
Esto contina hasta que el conjunto contenga los cinco elementos requeridos. Usted
puede logar esto en cdigo de la siguiente manera:-

//JS

var spawnPoints: Transform[];

- 187 -
function ChooseSet(numRequired: int) {
var result = new Transform[numRequired];

var numToChoose = numRequired;

for (numLeft = spawnPoints.Length; numLeft > 0; numLeft--) {


// Adding 0.0 is simply to cast the integers to float for the division.
var prob = (numToChoose + 0.0) / (numLeft + 0.0);

if (Random.value <= prob) {


numToChoose--;
result[numToChoose] = spawnPoints[numLeft - 1];

if (numToChoose == 0)
break;
}
}

return result;
}

//C#

Transform[] spawnPoints;

Transform[] ChooseSet (int numRequired) {


Transform[] result = new Transform[numRequired];

int numToChoose = numRequired;

for (int numLeft = spawnPoints.Length; numLeft > 0; numLeft--) {

float prob = (float)numToChoose/(float)numLeft;

if (Random.value <= prob) {


numToChoose--;
result[numToChoose] = spawnPoints[numLeft - 1];

if (numToChoose == 0) {
break;
}
}
}
return result;
}
Tenga en cuenta que aunque la seleccin es al azar, los elementos en el conjunto
elegido estarn en el mismo orden que tenan en la matriz original. Si los elementos
se van a utilizar de uno en uno en secuencia entonces el orden puede hacer que en
parte sean predecibles, por lo que puede ser necesario barajar la matriz antes de su
uso.

Puntos Aleatorios en el Espacio


Un punto aleatorio en un volumen cbico puede ser elegido ajustando cada

- 188 -
component de un Vector3 a un valor devuelto por un Random.value:-
var randVec = Vector3(Random.value, Random.value, Random.value);
Cuando el volumen es una esfera (ie, cuando usted quiere un punto aleatorio dentro
un radio dado de un punto de origen), usted puede utilizar Random.insideUnitSphere
multiplicado por el radio deseado:-
var randWithinRadius = Random.insideUnitSphere * radius;

var randWithinCircle = Random.insideUnitCircle * radius;


a una prueba de menos que-o-igual que, evitara la instruccin return extra, pero
tambin permitira un elemento ser elegido ocasionalmente, incluso cuando su
probabilidad es cero. Esto le da un punto dentro el cubo con lados de una unidad. El
cubo puede ser escalado simplemente multiplicando los components X, Y y Z del
vector por el tamao del lado deseado. Si alguno de estos ejes es establecido a cero,
el punto siempre estar dentro un plano nico. Por ejemplo, escogiendo un punto
aleatorio en el piso es usualmente una cuestin de ajustar los components X y Z
aleatoriamente y ajustar el component Y a cero. Tenga en cuenta que si establece uno
de los components del vector resultante a cero, usted no tendr un punto correcto
aleatorio dentro del crculo. Aunque el punto est indexado al azar y se encuentra
dentro del radio adecuado, la probabilidad es muy sesgada hacia el borde del crculo y
lo puntos se distribuirn de forma muy desigual. Usted, en lugar de, debera utilizar
Random.insideUnitCircle para esta tarea. Tenga en cuenta que Random.Range
devuelve el valor de un rango que incluye el primer parmetro pero excluye el
segundo, entonces usando myArray.Length aqu le da el resultado correcto.

- 189 -
Rotation and Orientation in Unity

Summary
Rotations in 3D applications are usually represented in one of two ways,
Quaternions or Euler angles. Each has its own uses and drawbacks. Unity uses
Quaternions internally, but shows values of the equivalent Euler angles in the
inspector to make it easy for you to edit.

The Difference Between Euler Angles and Quaternions


Euler Angles
Euler angles have a simpler representation, that being three angle values for X, Y and
Z that are applied sequentially. To apply a Euler rotation to a particular object, each
rotation value is applied in turn, as a rotation around its corresponding axis.

Benefit: Euler angles have an intuitive human readable format, consisting of three
angles.

Benefit: Euler angles can represent the rotation from one orientation to another
through a turn of more than 180 degrees

Limitation: Euler angles suffer from Gimbal Lock. When applying the three rotations
in turn, it is possible for the first or second rotation to result in the third axis pointing
in the same direction as one of the previous axes. This means a degree of freedom
has been lost, because the third rotation value cannot be applied around a unique
axis.

Quaternions
Quaternions can be used to represent the orientation or rotation of an object. This
representation internally consists of four numbers (referenced in Unity as x, y, z & w)
however these numbers dont represent angles or axes and you never normally need
to access them directly. Unless you are particularly interested in delving into
the mathematics of Quaternions, you only really need to know that a Quaternion
represents a rotation in 3D space and you will never normally need to know or modify
the x, y & z properties.

In the same way that a Vector can represent either a position or a direction (where the

- 190 -
direction is measured from the origin), a Quaternion can represent either an
orientation or a rotation - where the rotation is measured from the rotational origin
or Identity. It because the rotation is measured in this way - from one orientation to
another - that a quaternion cant represent a rotation beyond 180 degrees.

Benefit: Quaternion rotations do not suffer from Gimbal Lock.

Limitation: A single quaternion cannot represent a rotation exceeding 180 degrees in


any direction.

Limitation: The numeric representation of a Quaternion is not intuitively


understandable.

In Unity all Game Object rotations are stored internally as Quaternions, because the
benefits outweigh the limitations.

In the Transform Inspector however, we display the rotation using Euler angles,
because this is more easily understood and edited. New values entered into the
inspector for the rotation of a Game Object are converted under the hood into a new
Quaternion rotation value for the object.

The
rotation of a Game Object is displayed and edited as Euler angles in the inspector, but
is stored internally as a Quaternion

As a side-effect, it is possible in the inspector to enter a value of, say, X: 0, Y: 365, Z:


0 for a Game Objects rotation. This is a value that is not possible to represent as a
quaternion, so when you hit Play youll see that the objects rotation values change

- 191 -
to X: 0, Y: 5, Z: 0 (or thereabouts). This is because the rotation was converted to a
Quaternion which does not have the concept of A full 360-degree rotation plus 5
degrees, and instead has simply been set to be oriented in the same way as the result
of the rotation.

Implications for Scripting


When dealing with handling rotations in your scripts, you should use the Quaternion
class and its functions to create and modify rotational values. There are some
situations where it is valid to use Euler angles, but you should bear in mind: - You
should use the Quaternion Class functions that deal with Euler angles - Retrieving,
modifying, and re-applying Euler values from a rotation can cause unintentional side-
effects.

Creating and Manipulating Quaternions Directly


Unitys Quaternion class has a number of functions which allow you to create and
manipulate rotations without needing to use Euler angles at all. For example:

Creating:

Quaternion.LookRotation

Quaternion.AngleAxis

Quaternion.FromToRotation

Manipulating:

Quaternion.Slerp

Quaternion.Inverse

Quaternion.RotateTowards

Transform.Rotate & Transform.RotateAround

However sometimes its desirable to use Euler angles in your scripts. In this case its
important to note that you must keep your angles in variables, and only use them
to apply them as Euler angles to your rotation. While its possible to retrieve Euler
angles from a quaternion, if you retrieve, modify and re-apply, problems will arise.

Here are some examples of mistakes commonly made using a hypothetical example
of trying to rotate an object around the X axis at 10 degrees per second. This is what

- 192 -
you should avoid:
// rotation scripting mistake #1
// the mistake here is that we are modifying the x value of a quaternion
// this value does not represent an angle, and will not produce desired
results

void Update () {

var rot = transform.rotation;


rot.x += Time.deltaTime * 10;
transform.rotation = rot;

}
// rotation scripting mistake #2
// the mistake here is that we are reading, modifying then writing the Euler
// values from a quaternion. Because these values calculated from a
Quaternion,
// each new rotation may return very different Euler angles, which may
suffer from gimbal lock.

void Update () {

var angles = transform.rotation.eulerAngles;


angles.x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(angles);

}
And here is an example of using Euler angles in script correctly:
// rotation scripting with Euler angles correctly.
// here we store our Euler angle in a class variable, and only use it to
// apply it as a Euler angle, but we never rely on reading the Euler back.

float x;
void Update () {

x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(x,0,0);

Implications for Animation


Many 3D authoring packages, and indeed Unitys own internal animation window,
allow you to use Euler angles to specify rotations during an animation.

These rotations values can frequently exceed range expressable by quaternions. For
example, if an object should rotate 720 degrees in-place, this could be represented by
Euler angles X: 0, Y: 720, Z:0. But this is simply not representable by a Quaternion
value.

Unitys Animation Window


Within Unitys own animation window, there are options which allow you to specify

- 193 -
how the rotation should be interpolated - using Quaternion or Euler interpolation. By
specifying Euler interpolation you are telling Unity that you want the full range of
motion specified by the angles. With Quaternion rotation however, you are saying you
simply want the rotation to end at a particular orientation, and Unity will use
Quaternion interpolation and rotate across the shortest distance to get there.
See Using Animation Curves for more information on this.

External Animation Sources


When importing animation from external sources, these files usually contain
rotational keyframe animation in Euler format. Unitys default behaviour is to
resample these animations and generate a new Quaternion keyframe for every frame
in the animation, in an attempt to avoid any situations where the rotation between
keyframes may exceed the Quaternions valid range.

For example, imagine two keyframes, 6 frames apart, with values for X as 0 on the first
keyframe and 270 on the second keyframe. Without resampling, a quaternion
interpolation between these two keyframes would rotate 90 degrees in the opposite
direction, because that is the shortest way to get from the first orientation to the
second orientation. However by resampling and adding a keyframe on every frame,
there are now only 45 degrees between keyframes so the rotation will work correctly.

There are still some situations where - even with resampling - the quaternion
representation of the imported animation may not match the original closely enough,
For this reason, in Unity 5.3 and onwards there is the option to turn off animation
resampling, so that you can instead use the original Euler animation keyframes at
runtime. For more information, see Animation Import of Euler Curve Rotations.

- 194 -
Solucin de Problemas(TroubleShooting)
Esta seccin se ocupa de los problemas ms comunes que pueden surgir cuando se
use Unity. Cada plataforma es tratada en separado aqu abajo.

Solucin de Problemas de la Plataforma

Geforce 7300GT en OSX 10.6.4


La renderizacin diferida es deshabilitada porque los materiales no se muestran
correctamente para Geforce 7300GT en OX 10.6.4; Esto sucede debido a
controladores de vdeo con errores.

En Windows x64, Unity falla cuando mi script lanza un


NullReferenceException
Por favor aplicar Windows Hotfix #976038.

Edicin de Scripts
Hay una manera de quitar la pgina de inicio en MonoDevelop?
S. En las preferencias de MonoDevelop, vaya a la seccin Visual Style, y desmarque la
opcin Load welcome page on startup.

Por qu mi script abre en MonoDevelop cuando yo tengo seleccionado Visual


Studio como mi editor de scripts?
Esto sucede cuando VS reporta que ha fallado en abrir sus scripts. La causa ms
comn de esto es un plugin externo (e.g. Resharper) apareciendo un cuadro de
dilogo en el inicio, que solicita el input del usuario - esto causar que VS reporte que
ha fallado en abrir.

Grficas
Velocidad de cuadros y/o artefactos visuales lentos
Esto puede ocurrir si los controladores de la tarjeta de vdeo no estn a la fecha.
Asegrese de tener los ltimos controladores oficiales de su vendedor de tarjeta.

- 195 -
Sombras
Las sombras tambin requieren cierto soporte de hardware de grficos. Mirar la
pgina Shadows para detalles.

Verifique si las sombras no estn deshabilitadas por completo en Quality Settings.

Las sombras en Android y iOS tienen estas limitaciones : las sombras suaves no estn
disponibles, y en forward rendering path una sola luz direccional puede proyectar
sombras. No hay lmite para el nmero de luces proyectando sombras, en la ruta de
renderizacin diferida.

Algunos de mis objetos, no proyectan o reciben sombras


El Renderer de un objeto debe tener activado Receive Shadows para que las sombras
sean renderizadas en l. Adems, un objeto debe tener activado Cast Shadows para
poder proyectar sombras en otros objetos (ambos estn prendidos por defecto).

Solo objetow opacos proyectan y reciben sombras. Esto significa que objetos
utilizando el Transparent integrado o Particle Shaders no van a proyectar sombras. En
la mayora de casos, es posible usar sombreados Transparent Cutout para objetos
como cercas, vegetacin, etc. Si utiliza Shaders escritos personalizados, estos deben
ser pixel-lit y usar el Geometry render queue. Objetos usando sombreado VertexLit no
pueden recibir sombras pero puede proyectarlas.

Solo Pixel lights proyecta sombras. Si usted quiere asegurarse de que una luz siempre
proyecte sombras sin importar cuntas otras luces haya en la escena, entonces usted
puede establecerla en el modo renderizado Force Pixel (mirar la pgina de
referencia Light ).

- 196 -
Luces (Lights)
Las Lights son una parte esencial de cada escena. Mientras meshes y texturas definen
la forma y la apariencia de una escena, las luces(lights) definen el color y nimo de su
entorno en 3D. Seguramente trabajar con ms de una luz en cada escena. Hacerlas
trabajar juntas requiere un poco de prctica, pero los resultados pueden ser bastante
sorprendente.

Una configuracin de dos luces simple

Las luces(lights) pueden ser agregadas a su escena desde el men del GameObject-
>Create Other. Una vez una luz haya sido agregada, usted puede manipularla como
cualquier otro GameObject. Adicionalmente, puede agregar un Light Component a
cualquier GameObject seleccionado usando Component->Rendering->Light.

Hay muchas diferentes opciones dentro el Light Component en el Inspector.

- 197 -
Propiedades del Light
Component en el Inspector

Simplemente cambiando el Color de una luz, puede darle un cambio completamente


diferente al estado de nimo de la escena.

Luces brillantes de sol

- 198 -
Luces oscuras medievales

- 199 -
Luces de noche de miedo

Rendering paths
Unity soporta diferentes Rendering Paths. Estos caminos afectan principalmente las
Luces y las Sombras, entonces escoger el rendering path correcto, dependiendo los
requerimientos de su juego, puede hacer que el rendimiento de su proyecto mejore.
Para ms informacin a cerca de rendering paths puede visitar Rendering paths
section.

Ms informacin
Para ms informacin acerca de cmo las luces funcionan ver la pgina Visin general
de Lighting (iluminacin). Para ms informacin acerca del uso del componente Light,
revise la Referencia de Lighting (iluminacin).

- 200 -
Cmaras
As como las cmaras son usadas en pelculas para mostrar la historia a la audiencia,
las Cmaras en Unity son utilizadas para mostrar el mundo del juego al jugador.
Siempre debers tener al menos una cmara en una escena, pero puedes tener mas
de una. Mltiples cmaras pueden servirte para tener una pantalla-compartida para
dos jugadores o para crear efectos especficos. Puedes animar cmaras, o controlarlas
con fsica. Prcticamente cualquier cosa que puedas imaginar es posible con cmaras,
y puedes utilizar cmaras tpicas o nicas que se ajusten a el estilo de tu juego.

Para ms informacin acerca de cmo funciona la Cmara, ver la pgina de


Cmaras en la seccin de Visin General de los Grficos.

Para ms informacin acerca del componente de Camera, ver la pgina Camera


Component reference.

- 201 -
Consideraciones Multi-plataforma
Muchas de las APIs de Unity y estructuras de proyecto son idnticas para todas las
plataformas soportadas, y en algunos casos un proyecto puede simplemente ser
reconstruido para ejecutarse en diferentes dispositivos. Sin embargo, las diferencias
fundamentales en el hardware y en mtodos de despliegue hacen que algunas partes
del proyecto no puedan ser portadas entre plataformas sin haber hecho cambios. A
continuacin se encuentran detalles de algunos problemas comunes de plataforma
cruzada, y sugerencias para solucionarlos.

Entrada
El ejemplo ms obvio del comportamiento distinto entre plataformas es en los
mtodos de entrada ofrecidos por el hardware.

Teclado y joypad
La funcin Input.GetAxis es muy conveniente en plataformas de escritorio como una
forma de consolidar la entrada desde el teclado y el joypad. Sin embargo, esta funcin
no tiene sentido para las plataformas mviles que se basan en la entrada por medio
de la pantalla tctil. Igualmente, la entrada de teclado estndar de escritorio no porta
bien en mviles para otras cosas que no sean texto escrito. Vale la pena agregar una
capa de abstraccin al cdigo que maneja la entrada, si consideras en el futuro portar
el juego a otras plataformas. A modo de un ejemplo simple, si estuvieras haciendo un
juego de conducir entonces podras crear tu propia clase de entrada y envolver los
llamados de API de Unity usando tus propias funciones:-
// Returns values in the range -1.0 .. +1.0 (== left .. right).
function Steering() {
return Input.GetAxis("Horizontal");
}

// Returns values in the range -1.0 .. +1.0 (== accel .. brake).


function Acceleration() {
return Input.GetAxis("Vertical");
}

var currentGear: int;

// Returns an integer corresponding to the selected gear.


function Gears() {
if (Input.GetKeyDown("p"))

- 202 -
currentGear++;
else if (Input.GetKeyDown("l"))
currentGear--;

return currentGear;
}

Una ventaja de envolver los llamados de API en una clase como esta es que todos
ellos estn concentrados en un solo archivo fuente, y en consecuencia, ser fcil su
localizacin y reemplazo. Sin embargo, lo ms impontante es que debes disear tus
funciones de entrada de acuerdo al significado lgico de las entradas en tu juego. Esto
ser de ayuda para aislar del resto del cdigo del juego el mtodo especfico de
entrada usado con una plataforma en particular. Por ejemplo, la funcin Gears de
arriba podra ser modificada para que la entrada real provenga de toques en la
pantalla de un dispositivo mvil. Si se usa un integer para representar la indumentaria
escogida, esto funcionar bien en todas las plataformas; pero si se mezcla con el resto
del cdigo los llamados de API especficos a la plataforma, esto causar problemas.
Puedes ver conveniente el utilizar compilacin dependiente de la plataforma para
combinar las diferentes implementaciones de las funciones de entrada en el mismo
archivo fuente, para evitar intercambios manuales.

Toques y Clics
Las funciones Input.GetMouseButtonXXX estn diseadas para que tengan una
interpretacin razonablemente obvia en dispositivos mviles aunque no haya un
mouse como tal. Un simple toque en la pantalla ser reportado como un clic con el
botn izquierdo del mouse, y la propiedad Input.mousePosition devuelve la posicin
del toque mientras el dedo est tocando la pantalla. Esto significa que los juegos que
tengan interaccin simple de mouse usualmente pueden trabajar transparentemente
entre las plataformas de escritorio y mvil. Naturalmente, no obstante, con frecuencia
la conversin es mucho menos sencilla que esto. Un juego de escritorio puede hacer
uso de ms de un botn del mouse, y un juego para mviles puede detectar mltiples
toques en la pantalla al mismo tiempo.

Al igual que con los llamados de API, el problema puede ser manejado de forma
parcial representando la entrada con valores lgicos que son luego usados por el
resto del cdigo del juego. Por ejemplo, un gesto de pellizco para dar zoom en un
mvil podra ser reemplazado por un botn/atajo de + y - en la version de escritorio;
la funcin de entrada podra simplemente devolver un valor float que especifique el
factor de zoom. Igualmente, podra ser posible usar un tap con dos dedos en mviles

- 203 -
para reemplazar el clic con el botn derecho del mouse. Sin embargo, si las
propiedades del dispositivo de entrada son una parte integral del juego, entonces no
puede ser posible remodelarlos en una plataforma diferente. Esto puede significar
que el juego no puede ser portado a todas ellas, o que la entrada y/o la mecnica de
juego necesiten ser modificadas ampliamente.

Acelermetro, brjula, giroscopio y GPS


Estas entradas provienen de la movilidad de los dispositivos mviles, por lo que puede
ser que no tengan un equivalente significativo en el ambiente de escritorio. Sin
embargo, en algunos casos slo son un reflejo de controles estndar de juegos y
pueden ser portados muy fcilmente. Por ejemplo, un juego de conduccin podra
implementar el control de direccin a partir de la inclinacin de un dispositivo mvil
(determinada por el acelermetro). En casos as, los llamadas API para entrada
usualmente son fciles de reemplazar, de modo que la entrada del acelermetro
puede ser reemplazada por pulsaciones del teclado, por decir algo. Sin embargo,
puede ser necesario recalibrar las entradas o incluso variar la dificultad del juego para
tener en cuenta cada mtodo de entrada distinto. Inclinar un dispositivo es ms lento
y eventualmente ms agotador que presionar teclas, y tambin puede hacer ms
difcil que el jugador se concentre en la pantalla. Esto puede resultar en que el juego
se vuelva ms difcil de dominar en un mvil, de modo que puede ser apropiado
frenar el ritmo de la mecnica de juego o conceder ms tiempo por nivel. Esto
requerir que el cdigo del juego sea diseado para que estos factores puedan ser
ajustados con facilidad.

Memoria, almacenamiento y desempeo de CPU


Los dispositivos mviles inevitablemente tienen menos almacenamiento, memoria y
potencia disponible de CPU que las mquinas de escritorio, y por consiguiente un
juego puede ser difcil de portar slo por el hecho de que su desempeo no sea
aceptable en hardware poco potente. Algunos problemas de recursos pueden ser
manejados pero si ests empujando los lmites del hardware en un ambiente de
escritorio, es probable que tu juego no sea un buen candidato para ser portado a una
plataforma mvil.

Reproduccin de pelculas
Hoy en da, los dispositivos mviles son altamente dependientes del soporte de

- 204 -
hardware para permitir la reproduccin de pelculas. El resultado es que estas
opciones de reproduccin son limitadas e indudablemente no ofrecen la flexibilidad
que el asset MovieTexture tiene en plataformas de escritorio. Las pelculas pueden ser
reproducidas en pantalla completa en mviles, pero no hay enfoque alguno sobre
usarlos para texturizar objetos dentro del juego (as que no es posible mostrar una
pelcula en una pantalla de TV dentro del juego, por ejemplo). En trminos de
portabilidad, est bien usar pelculas para introducciones, vdeos con escenas de la
historia (cutscenes), instrucciones y otras presentaciones sencillas. Sin embargo, si las
pelculas necesitan ser visibles dentro del escenario de juego entonces debes
considerar si las opciones de reproduccin en mviles sern lo adecuado.

Requerimientos de almacenamiento
El video, el audio e incluso las texturas pueden usar una gran cantidad de
almacenamiento y podras necesitar tener esto en mente si quieres portar tu juego. El
espacio de almacenamiento (el cual con frecuencia tambin corresponde al tiempo de
descarga) no es usualmente un problema en mquinas de escritorio, pero este no es
el caso con los mviles. Adems, las tiendas de aplicaciones mviles imponen un
lmite sobre el tamao mximo de un producto enviado. Puede requerir algo de
planeacin para abordar estos asuntos durante el desarrollo de tu juego. Por ejemplo,
podras necesitar el proporcionar versiones simplificadas de los assets para mviles a
fin de ahorrar espacio. Otra posibilidad es que el juego pueda necesitar ser diseado
para que los assets grandes puedan ser descargados bajo demanda en lugar de ser
parte de la descarga inicial de la aplicacin.

Gestin automtica de memoria


La recuperacin de la memoria no usada a partir de los objetos muertos es
manejada automticamente por Unity, y se efecta con frecuencia y de forma
imperceptible en las mquinas de escritorio. No obstante, las bajas prestaciones en
memoria y potencia de CPU en los mviles hacen que la recolecciones de basura
puedan ser ms frecuentes, y el tiempo que stas tomen puede impactar ms
intensamente sobre el desempeo (causando pausas no deseadas en el transcurso
del juego, etc). Incluso si el juego se ejecuta con la memoria disponible, puede ser
necesario optimizar el cdigo para evitar las pausas de recoleccin de basura. Puede
encontrarse ms informacin en la pgina sobre gestin de memoria.

- 205 -
Potencia de la CPU
Un juego que se ejecute bien en una mquina de escritorio podra sufrir de una baja
velocidad de cuadros en un mvil, debido a que el CPU de un mvil tiene que lidiar
con la complejidad del juego. Por tanto, se puede necesitar el poner atencin extra a
escribir un cdigo ms eficiente cuando un proyecto es portado a una plataforma
mvil. Un nmero de pasos simples para mejorar la eficiencia son explicados en esta
pgina del manual.

- 206 -
Publicando Construcciones (Publishing
Builds)
En cualquier momento mientras est creando su juego, usted podra querer ver qu
aspecto tendr cuando se construya y se ejecute fuera del editor de modo
independiente (standalone) o con un reproductor web. Esta seccin va a explicar
cmo acceder a las Build Settings y cmo crear distintas construcciones de sus
juegos.

File->Build Settings es el elemento del men para acceder a la ventana de Build


Settings. Aparece una lista editable de las escenas que sern incluidas cuando
construya su juego.

- 207 -
La
ventana de los Build Settings

La primera vez que vea esta ventana en un proyecto, va a aparecer en blanco. Si


construye un juego mientras esta lista est en blanco, solamente la escena que
actualmente se encuentre abierta va a ser incluida en su construccin. Si usted quiere
construir rpidamente un test player con un solo archivo de escena, simplemente
construya un jugador con una lista de escena en blanco.

Es fcil agregar archivos de escena a la lista de la construccin de multi-escenas. Hay


dos maneras para agregarlas. La primer forma es haciendo click en el botn Add
Open Scenes. Va a ver la escena que est actualmente abierta en la lista. La segunda
forma de agregar archivos de escena es arrastrando los del Project View a la lista.

En este punto, observe que cada una de sus escenas tienen un valor de indice

- 208 -
diferente. Scene 0 es la primera escena que va a cargarse cuando se construya el
juego. Cuando quiera cargar una escena nueva, use Application.LoadLevel() dentro de
sus scripts.

Si ha agregado ms de un archivo de escena y quiere reorganizarlos, simplemente


haga click y arrastre las escenas en la lista por encima o por debajo de las dems
hasta que tenga en orden deseado.

Si quiere eliminar una escena de la lista, haga click para subrayar la escena y
oprima Command-Delete. La escena va a desaparecerse de la lista y no va a ser
incluida en la construccin.

Cuando est listo de publicar lo que ha construido, seleccione una Platform y est
seguro que el logo de Unity est alado de la plataforma; si no est entonces haga click
en el botn Switch Platform para dejar que Unity sepa para qu plataforma quiere
construirla. Finalmente oprima el botn Build. Ah va a poder seleccionar el nombre y
la ubicacin del juego usando un dialogo estndar para guardar. Cuando haga click
en Save, Unity construir su juego pronto. Es as de sencillo. Si est inseguro de
dnde guardar su juego construido, considere guardarlo en la carpeta raz de su
proyecto. No puede guardar la construccin en la carpeta de Assets.

Habilitando la casilla de verificacin del Development Build en el reproductor va a


permitir la funcionalidad Profiler y tambin hacer que las opciones Autoconnect
Profiler y Script Debugging estn disponibles.

Informacin adicional acerca de la ventana de los Build Settings puede encontrarse en


la pgina Build Settings.

Construyendo reproductores independientes (Building


standalone players)
Con Unity puede construir aplicaciones standalone para Windows, Mac o Linux. Es
simplemente una cuestin de elegir el destino de la construccin que quiere hacer en
el dialogo de las build settings, y oprimir el botn Build. Cuando se construya
reproductores independientes (standalone), los archivos de resultado van a variar
dependiendo del destino en el que quiere construir. En Windows, un archivo
ejecutable (.exe) ser construido, junto con una carpeta de Data (datos) que
contendr todos los recursos de su aplicacin. En mac, un paquete de aplicacin ser
construido, conteniendo el archivo se necesita para ejecutar la aplicacin, as como

- 209 -
los recursos.

Distribuir su standlone en Mac es solo proporcionar el paquete de la aplicacin (todo


est empaquetado ah). En Windows se necesita proporcionar tanto el archivo .exe,
como la carpeta de datos para que otros la ejecuten. Pinselo de esta manera: Otras
personas deben tener los mismos archivos en su computador, como los archivos
resultantes que Unity construyo para usted, para poder ejecutar su juego.

Dentro del proceso de construccin


El proceso de construccin colocar una copia en blanco de la aplicacin de juego
construida en dnde uno especifique. Luego se trabajar a travs de la lista de
escenas en las build settings, abrirlas en el editor una por una, optimizarlas, e
integrarlas al paquete de aplicacin. Tambin va a calcular todos los assets requeridos
por las escenas incluidas y almacenar los datos en un archivo separado dentro del
paquete de aplicacin.

Cualquier GameObject en una escena que est etiquetado con EditorOnly no va a


ser incluido en la construccin publicada. Esto es til para depurar scripts que no
necesitan ser incluidas al final del juego.

Cuando un nuevo nivel cargue, todos los objetos del nivel anterior son destruidos.
Para prevenir esto, use DontDestroyOnLoad() en cualquier objeto que no quiera que
sea destruido. Esto es comnmente usado para mantener msica reproduciendo
mientras se cargue un nivel, o para game controller scripts que hacen que se
mantenga el estado del juego y el progreso.

Despus de que un nivel finalice de cargar, el mensaje: OnLevelWasLoaded() va a ser


mandado a todos los GameOjects que estn activos.

Para ms informacin sobre cmo crear un juego de la mejor manera que tenga
escenas mltiples, para instanciar un men princiapl, una ventana del puntaje
mximo, y niveles del juego, revisar nuestros Tutorials.

Precarga
Construcciones publicadas automaticamente precargan todos los assets en una
escena cuando la escena carga. La excepcin a esta regla es Scene 0. Esto es porqu la
primera escena es usualmente un spashscreen, que uno quiere mostrar lo ms rpido
posible.

- 210 -
Para asegurarse que todo su contenido haya sido precargado, puede crear una
escena vaca que llame Application.LoadLevel(1). En las build settings haga que el
indice de esta escena sea 0. Todos los niveles posteriores sern precargados.

Est listo para construir juegos.


Hasta ahora, ha aprendido cmo utilizar la interfaz de Unity, cmo usar assets, cmo
crear escenas, y cmo publicar sus construcciones. No hay nada impidindole crear el
juego de sus sueos. Seguramente aprender ms a lo largo del camino, y nosotros
estamos aqu para ayudarle.

Para aprender ms sobre construir niveles de juego, mirar la seccin creando


escenas.

Para aprender ms sobre Scripting, mirar la Scripting Section.

Para aprender ms sobre crear assets de artes, mirar la Assets Workflow del manual.

Para interactuar con la comunidad de usuarios y desarrolladores de Unity,


visitar Unity Forums. Ah puede hacer preguntas, compartir proyectos, construir un
equipo, cualquier cosa que quiera hacer. Definitivamente visite los foros al menos una
vez, ya que nosotros queremos ver los juegos increbles que haga.

- 211 -
Caractersticas del Editor

Esta seccin detalla algunas de las caractersticas bsicas del Editor, las cuales usted
encontrar tiles en la mayora de proyectos - desde escoger preferencias, integrando
un sistema de control de versiones, hasta preparar su proyecto para una
construccin.

- 212 -
Ajustes del Modo 2D y 3D
Cuando se crea un nuevo proyecto, se puede especificar si el Editor de Unity se inicia
en modo 2D o 3D. Sin embargo, tambin se tiene la opcin de cambiar el editor entre
modo 2D y 3D en cualquier momento. Usted puede leer ms acerca de las diferencias
entre proyectos 2D y 3D aqu. Esta pgina proporciona informacin acerca de cmo
cambiar modos, y qu exactamente cambia dentro del editor cuando lo haga.

Cambiar entre modos 3D y 2D


Para cambiar modos entre modo 2D o 3D:

1.Abra el Inspector de Ajustes del Editor, a travs del men Edit>Project


Settings>Editor.

2.Luego seleccione el valor de Default Behavior Mode ya sea a 2D o 3D.

Usted puede encontrar ms acerca del Inspector de Ajustes del Editor en la


pgina Ajustes del Editor.

El Default Behavior Mode en el Inspector de


Ajustes del Editor permite configurar un proyecto a 2D o 3D

Diferencias entre modo 2D y el modo 3D


Modo 2D o 3D determina algunas configuraciones para el Editor de Unity. Estas se
encuentran listadas abajo.

En modo de Proyecto 2D:


Cualquier imagen que se importe se asume como una imagen 2D (Sprite) y se
configura en modo Sprite.

El Sprite Packer est activado.

El Scene View est configurado en modo 2D.

Los game objects por defecto no tienen una luz direccional en tiempo real.

La posicin predeterminada de la cmara es en 0,0,10. (En Modo 3D est 0,1,10).

- 213 -
La cmara est configurada como Orthographic. (En modo 3D est en Perspective.)

En la ventana de Lighting:

El Skybox est deshabilitado para nuevas escenas.

El valor de Ambient Source est configurado a Color. (Con el color configurado


como gris oscuro: RGB: 54, 58, 66.)

Precomputed Realtime GI est desactivado.

Baked GI est desactivado.

Auto-Building est desactivado.

En modo de proyecto 3D:


Cualquier imagen que se importe NO se asume como una imagen 2D (Sprite).

El Sprite Packer est desactivado.

El Scene View est configurado en modo 3D.

Los game objects por defecto tienen una directional light, en tiempo real.

La posicin por defecto de la cmara est en 0,1,10. (En modo 2D est 0,0,10.)

La cmara est configurada como Perspective. (En modo 2D est en Orthographic.)

En la ventana de Lighting:

El Skybox es el Material de Skybox integrado por defecto.

Ambient Source se establece como Skybox.

Precomputed Realtime GI est activado.

Baked GI est activado.

Auto-Building est activado.

- 214 -
Preferencias
Unity provee un nmero de paneles de preferencia para permitirle personalizar el
comportamiento del editor.

General

Debe el editor actualizar assets


Auto Refresh
automticamente a medida que cambian?
Debe mostrarse el proyecto anterior al inicio? Debe mostrarse el proyecto anterior al inicio?
Deberan comprimirse automticamente los
Compress Assets On Import
assets durante la importacin?
Debera usarse el selector de color OSX
OSX Color Picker
nativo en vez del propio de Unity?
Puede el editor mandar automticamente
Disable Editor Analytics
informacin de vuelta a Unity?
Show Asset Store search hits Debera mostrarse el nmero de assets
pagos/gratuitos de la tienda en el Navegador

- 215 -
del Proyecto (Project Browser)?
Debera verificar Unity qu assets guardar
Verify Saving Assets
individualmente al cerrarse?
Qu esquema de colores debera utilizar
Unity para su editor? Los usuarios
Editor Skin profesionales tienen la opcin de gris oscuro,
adems de la de color gris claro que hay por
defecto.
Esta opcin habilita un nuevo botn en la
esquina superior derecha de la
ventana Hierarchy, permitiendo alternar entre
Enable Alpha Numeric Sorting
la ordenacin de Transformada (que es el
comportamiento por defecto) y la ordenacin
Alfanumrica.

Herramientas Externas

Qu aplicacin debera usar Unity para abrir


External Script Editor
los archivos de script?
Add .unityprojs to .sln Should Unity add UnityScript (.unityproj) and

- 216 -
Boo (.booproj) projects to the generated
solution (.sln) file? Enabled by default for
MonoDevelop and disabled by default for
Visual Studio.
Debera Unity permitir el control de la
Editor Attaching
depuracin desde un editor de script externo?
Qu aplicacin debera usar Unity para abrir
Image Application
archivos de imagen?
Qu aplicacin debera usar Unity para
Revision Control Diff/Merge resolver diferencias de archivo con el asset
server?

Colores

Este panel le permite escoger entre colores que Unity utiliza cuando se muestran
varios elementos de la interfaz del usuario.

- 217 -
Teclas

Este panel le permite establecer las teclas que activan los varios comandos en Unity.

- 218 -
Cach GI

La carpeta de cach de GI se mantendr por


debajo de este tamao siempre que sea
Maximum Cache Size (Gb)
posible. Un trabajo en segundo plano limpiar
peridicamente los archivos no usados.
Permite seleccionar la ubicacin de la cach de
Ubicacin actual de la cach. GI. La carpeta de cach ser compartida entre
todos los proyectos.
Habilita una compresin rpida en tiempo real
de la cach de GI para reducir el tamao de los
Cache compression datos generados. Si necesita acceder a los
datos raw de Enlighten debera deshabilitar la
Compresin de Cach y limpiar la cach.
Clean Cache Use este botn para limpiar la cach.
Cache Size Tamao actual de la cach.
Ubicacin actual de la cach. Ubicacin actual de la cach.

- 219 -
2D

Maximum Sprite Atlas Cache Size (GB)

- 220 -
Servidor de Cach

##Servidor de Cach Debera estar habilitado el servidor de cach?


Direccin IP del servidor de Cach, si est
IP Address
habilitado

- 221 -
Build Settings
La ventana de Build Settings le permite a usted escoger su plataforma de destino,
ajustar los ajustes para su construccin y empezar el proceso de construccin. Para
acceder la ventana de los Build Settings, escoja Build Settings del men File. Una vez
usted haya especificado sus build settings, usted puede hacer click en Build para
crear su construccin, o click el botn Build and Run para crear y correr su
construccin en la plataforma especificada.

Ven
tana de los Build Settings

- 222 -
Escenas en el Build (construccin)
Esta parte de la ventana le muestra a usted escenas de su proyecto que sern
incluidas en su construccin. Si ninguna escena es mostrada entonces usted puede
utilizar el botn Add Current para agregar la escena actual a la construccin, o usted
puede arrastrar los assets de escena a esta ventana de la ventana project. Usted
tambin puede des-marcar escenas en esta lista para excluirlas del build
(construccin) sin quitarlas de la lista. Si una escena nunca se necesita en la
construccin usted puede quitarla de la lista de escenas al presionar la tecla delete.

Las escenas que son marcadas y agregadas al las Scenes en la lista del Build
(construccin) sern incluidas en la construccin. La lista de escenas ser utilizada
para controlar el orden de carga de las escenas. Usted puede ajustar el orden de las
escenas al arrastrarlas para arriba o abajo.

Lista de Plataforma
La rea Platform (plataforma) debajo Scenes (escenas) en la rea del Build lista todas
las plataformas que estn disponibles a su versin de Unity. Algunas plataformas
pueden estar en gris para indicar que no son parte de su versin o lo invita a usted a
descargar las opciones de construccin de la plataforma especfica. SI usted cambia la
plataforma de destino, usted necesita presionar el botn Switch Platform para
aplicar su cambio. El cambio puede tomar algo de tiempo ya que sus assets puedan
que necesiten ser re-importados en formatos que coincidan con su plataforma
destino. Para indicar la plataforma actualmente seleccionada, hay un icono de Unity a
la derecha del nombre de la plataforma.

La plataforma seleccionada va a mostrar una lista de opciones que pueden ser


ajustadas para la construccin. Cada plataforma puede tener diferentes opciones.
Estas opciones estn listadas abajo. Las opciones que son comunes a travs de
muchas plataformas pueden estar listadas al final de esta seccin debajo de los
detalles Generic items across builds.

Web Player (Reproductor Web)


Opcin Propsito
El WebPlayer va a comenzar tan pronto los
datos de la primera escena sean descargados.
Streamed (por streaming)
Las dems escenas continuarn siendo
descargadas.

- 223 -
Opcin Propsito
El WebPlayer no har ninguna conexin a una
Offline Deployment
red

PC, Mac & Linux Standalone


Opcin Propsito
Target Platform (Plataforma destino)
Windows Construccin para Windows
Mac OS X Construccin para Mac
Linux Construccin para Linux
Architecture (Arquitectura) x86
x86 32-bit CPU
x86_64 64-bit CPU
Universal Todos los dispositivos CPU
x86 + x86_64 (Universal) Todos los dispositivos CPU para Linux
Construye juego para uso del servidor sin
Headless Mode
ningn elemento visual

iOS
Opcin Propsito
Run in Xcode as (Corra en Xcode como)
Release Versin de lanzamiento
Debug Versin de prueba
Referencia a las libreras de Unity en vez de
Symlink Unity libraries copiarlas al proyecto de XCode. (Reduce el
tamao del proyecto de XCode.)

Android
Opcin Propsito
Texture Compression (Compresin de Textura)
Dont override
DXT Tegra)
PVRTC (PowerVR)
ATC (Adreno)
ETC (Predeterminado)

- 224 -
Opcin Propsito
ETC2 (GLES 3.0)
ASTC
Google Android Project

Tizen
Los Build Settings para Tizen utiliza los ajustes genricos mostrados luego en esta
pgina.

WebGL (Pre-visualizacin)
Opcin Propsito
Activo cuando Development Build sea
Optimization Level
seleccionado
Slow (Construcciones rpidas)
Fast
Fastest (construcciones muy lentas)

Samsumg TV
Los Build Settings para Samsung TV utiliza ajustes genricos mostrados luego en esta
pgina.

Windows Store
Opcin Propsito
TBD TBD

Windows Phone 8
Opcin Propsito
TBD TBD

Otras plataformas
Plataformas de consola y dispositivos que requieren una licencia de Unity sern
documentados en la seccin de Platform Specific (Especficas de plataforma) de la
gua de usuario.

- 225 -
Items genricos de los builds
Opcin Propsito
Le permite al desarrollador probar y trabajar
Development Build
cmo la build est construyndose.
Cuando la opcin Development Build sea
Autoconnect Profiler (Profiler Auto- seleccionada, esto le permite al profiler
conectado) (perfilador) en estar conectado a la
construccin.
Cuando la opcin Development Build sea
Script Debugging (Depuracin Script) seleccionada, el cdigo script puede ser
depurado. No es disponible en WebGL.

- 226 -
Las Configuraciones de
Administradores(Settings Managers)
Los Settings Managers de Unity estn disponibles desde el men Edit > Project
Settings. Los ajustes afectan aspectos generales de la funcionalidad de Unity, tal como
las Grficas, Fsica y los detalles del reproductor publicado. Los varios administradores
estn descritos en detalle en esta seccin.

- 227 -
Audio Manager (Administrador de Audio)
El Audio Manager le permite ajustar el volumen mximo de todos los sonidos
reproducindose en la escena. Para verlo escoja Edit > Project Settings > Audio.

Propiedades
Propiedad: Funcin:
El volumen de todos los
Volume
sonidos reproducindose.
Ajusta la atenuacin global
del factor rolloff a fuentes
rolloff basadas
logaritmicamente.
(mire Audio Source). Mayor
Rolloff Scale el valor, ms rpido el
volumen se atenuar,
inversamente menor el valor,
ms lento se atena (un valor
de 1 va a simular el mundo
verdadero).
Qu tan escuchable es el
efecto Doppler. Cuando es
cero, est apagado. 1 significa
Doppler Factor
que debe ser bastante
escuchable para objetos en
movimiento rpido.
Default Speaker Mode Define qu modo de alta voz
debe ser el predeterminado
para su proyecto. El valor
predeterminado es 2 para

- 228 -
Propiedad: Funcin:
configuraciones de altavoces
estreo
(mirar AudioSpeakerMode en
las referencias scripting API
para una lista de modos).
El Output sample rate (La
tasa de muestreo del output).
Si es configurado a 0, la tasa
de muestreo del sistema ser
usado. Tambin tenga en
Sample Rate
cuenta que esto solo sirve
como una referencia ya que
ciertas plataformas permiten
cambias esto, como IOS o
Android.
El tamao del bfer DSP se
DSP Buffer Size puede ajustar para optimizar
la latencia o rendimiento
Tamao de bfer
Default
predeterminado
Renunciar al rendimiento en
Best Latency
favor de la latencia.
Balance entre latencia y
Good Latency
rendimiento
Renunciar latencia en favor
Best Performance
del rendimiento
El nmero de voces virtuales
que el sistema de audio
maneja. Este valor debera
siempre ser mayor que el
Virtual Voice Count
nmero de voces
reproducidas por el juego. Si
no, unas advertencias sern
mostradas en la consola.
Nmero de las voces reales
que pueden ser reproducidas
Real Voice Count al mismo tiempo. Cada frame
las voces ms fuertes sern
escogidas.
Disable Audio Desactivar el sistema de
audio en construcciones
independientes. Tenga en
cuenta que esto tambin

- 229 -
Propiedad: Funcin:
afecta el audio de
MovieTextures. En el editor
del sistema de audio est
todava en marcha y apoyar
previsualizar clips de audio,
empero AudioSorce.
Llamados de
reproduccin(Play calls)y
playOnAwake no se
manejarn con el fin de
simular el comportamiento de
la construccin
independiente.

Detalles
Si usted quiere usar el Efecto Doppler establezca Doppler Factor a 1. Luego ajuste
ambos Speed of Sound y Doppler Factor hasta que usted est satisfecho. El Modo de
Altavoz se puede cambiar en tiempo de ejecucin de su aplicacin a travs del
scripting. Mirar Audio Settings.

- 230 -
Ajustes del Editor
The Editor Settings let you choose options that affect the way you work with the
editor.

Propiedades

Propiedad: Funcin:
Unity Remote
Para qu dispositivo es (Android, iOS o
Device
ninguno).
The type of image compression used when
transmitting the game screen to the device.
Compression JPEG typically gives higher compression and
performance while PNG gives a more accurate
representation of the game display.
Selects whether the device should show the
game display at normal resolution (for
Resolution
graphical accuracy) or downsized (for
performance).
Version Control

- 231 -
Propiedad: Funcin:
The version control system that should be
used. Different options are available for
Mode
different systems as described in this
section of the manual.
WWW Security Emulation
Para las pruebas webplayer, el editor puede
Host URL pretender que el juego es un webplayer
alojado en esta direccin URL.
Asset Serialization
Para asistir con fusiones de version control,
Unity puede almacenar archivos de escena en
un formato textual ( mire las pginas textual
scene format para ms detalles). Si no se
Mode llevan a cabo fusiones Unity puede almacenar
escenas en un espacio de formato binario ms
eficiente o permitir que tanto el texto como
archivos de escenas binarios existan al mismo
tiempo.
Default Behavior Mode
Chooses between 2D or 3D editor mode.
Mode
See 2D or 3D Projects for more information.
Sprite Packer
This chooses whether the Sprite Packer is
Mode always enabled, enabled for builds only or
completely disabled.

- 232 -
Administrador de Input (Input Manager)
El Input Manager es dnde usted define todos los diferentes ejes de input(entrada) y
acciones de juego para su proyecto.

El administrador de input

Para ver el Administrador de Input escoja: Edit->Project Settings->Input.

Propiedades
Propiedad: Funcin:
Axes (Ejes) Contiene todos los ejes de input definidos para
el proyecto actual: Size es el nmero de
diferentes ejes de input en este
proyecto, Element 0, 1, son los ejes

- 233 -
Propiedad: Funcin:
particulares para modificar.
El string que se refiere al eje en el inicio del
Name
juego y a travs del scripting.
Una definicin detallada la funcin Positive
Descriptive Name
Button que es mostrada en el inicio del juego.
Descriptive Negative Name Una definicin detallada de la
funcin Negative Button que es mostrada en
el inicio del juego.
El botn que va a mandar un valor negativo al
Negative Button
eje.
El botn que va a mandar un valor positivo al
Positive Button
eje.
El botn secundario que va a mandar un valor
Alt Negative Button
negativo al eje.
El botn secundario que va a mandar un valor
Alt Positive Button
positivo al eje.
Gravity Qu tan rpido el input se centrar.
nicamente usado cuando el Type es key /
mouse button.
Dead Cualquier valor positivo o negativo que sean
menor que este nmero van a ser registrados
como cero. til para joysticks.
Para input de teclado, un valor mayor va a
resultar en una respuesta ms rpida. Un valor
Sensitivity
menor va a ser ms suave. Para Mouse delta el
valor va a escalar el actual mouse delta.
Si habilitado, el valor del eje va a se
inmediatamente reseteado a cero despus de
Snap
recibir inputs opuestos. nicamente usado
cuando el Type es key / mouse button.
Invert Si habilitado, los botones positivos van a
mandar valores negativos a los ejes, y vice
versa.
Use Key / Mouse Button para cualquier tipo
de botones, movimientos de Mouse para
mouse delta y ruedas de
Type desplazamiento, Joystick Axis para ejes
anlogos de joystick y Window
Movement para cuando el usuario sacuda la
ventana.

- 234 -
Propiedad: Funcin:
Eje de Input del dispositivo (joystick, mouse,
Axis
gamepad, etc.)
Qu joystick debera ser utilizado. Por defecto
esto est configurado para tomar la entrada de
Joy Num todos los joysticks. Esto es utilizado
nicamente para ejes de entrada y no para
botones.

Detalles
Todos los ejes que usted configure en el Administrador de Input sirven para dos
propsitos:

Le permite a usted referenciar sus inputs por nombre de eje en el scripting

Le permite a los jugadores de su juego personalizar los controles a sus gustos

Todos los ejes definidos sern presentados al jugador en el inicio del juego, dnde
vern su nombre, descripcin detallada, y botones predeterminados. Desde aqu,
ellos tendrn la opcin de cambiar cualquiera de los botones definidos en los ejes.
Por lo tanto, es mejor escribir sus scripts haciendo uso de ejes en vez de botones
individuales, ya que el jugador querr personalizar los botones de su juego.

- 235 -
La
ventana de input del inicio del juego es mostrado cuando su juego es ejecutado

Tambin vea: Input.

- 236 -
Administrador de Red (Network Manager)
(This class is part of the old networking system and is deprecated.
See NetworkManager for the new networking system).

El Network Manager contiene dos propiedades muy importantes para la creacin de


juegos multijugador en red.

The Network Manager

Usted puede acceder al administrador de red seleccionando Edit->Project Settings-


>Network desde la barra del men.

Propiedades
Propiedad: Funcin:
El nivel de mensajes que son impresos a la
Debug Level
consola.
Off Solo errores sern impresos
Informational Se imprimirn eventos de red significativos
Full Se imprimirn todos los eventos de red
Nmero de veces por segundo que los datos se
Sendrate
envan a travs de la red

Detalles
Ajustar el nivel de depuracin puede ser de gran ayuda en la afinar o depurar los
comportamientos de red de su juego. Primero, ajustndolo a Full va a permitirle ver
cada accin de red que sean realizadas. Esto le dar un sentido general de la
frecuencia con la que se est utilizando la comunicacin de red y la cantidad de ancho
de banda que est utilizando como un resultado.

Cuando lo ajuste a Informational, usted ver los principales eventos, pero no toda
actividad individual. La asignacin nica de Network IDs y buffering llamadas RPC van
a ser registradas aqu.

- 237 -
Cuando est Off, solo los errores de red van a ser impresos a la consola.

La informacin que es enviada en los intervalos Sendrate (1 segundo / Sendrate =


intervalo) va a ser basada en las propiedades del Network View de cada objeto
difundido. Si el Network View est usando Unreliable, su informacin ser enviada en
cada intervalo. Si el Network View est usando Reliable Delta Compressed, Unity
verificar si el objeto observado ha cambiado desde el ltimo intervalo. Si ha sido
cambiado, la informacin ser enviada.

- 238 -
Administrador de Fsica (Physics Manager)
El Physics Manager le permite a usted proporcionar ajustes globales para las fsicas
de 3D (men: Edit > Project Settings > Physics). Tambin hay un administrador
correspondiente para fsicas de 2D, descrito aqu.

Propiedades
Propiedad: Funcin:
La cantidad de gravedad aplicada a todos
los Rigidbodies. Usualmente la gravedad solo
acta en el eje Y (Abajo es negativo). La
gravedad es unidades mundo por segundo al
Gravity
cuadrado. Nota: El aumento de la gravedad
puede requerir el aumento del Solver
Iteration Count para mantener contactos
estables.
El Physics Material por defecto que va a ser
Default Material usados si ninguno ha sido asignado a
un Collider individual.

- 239 -
Propiedad: Funcin:
Dos objetos en colisin con una velocidad
relativa por debajo de este valor no rebotarn.
Bounce Threshold Este valor tambin reduce la oscilacin por lo
que no se recomienda establecerlo en una
valor muy bajo.
El umbral de energa cintica de masa
normalizada mejor al cual un Rididbody no-
kinematic puede irse a dormir. Los
Sleep Threshold
Rigidbodies cuya energa cintica dividida por
su masa es menor a este umbral sern
candidatos para dormir.
Especfica la distancia la cual el sistema de
deteccin de colisiones utiliza para generar
contactos de colisin. El valor debe ser
positivo y si es configurado cercano a cero
Default Contact Offset puede causar jitter (problemas/fluctuaciones).
Predeterminado: 0.01. Solamente los Colliders
cuya distancia es menor que la suma de sus
valores offset de contacto generarn contactos
de colisin.
Determina la precisin con la que se resuelvan
las articulaciones y los contactos. Por lo
Solver Iteration Count
general, un valor de 7 funciona muy bien para
casi todas las situaciones.
Si habilitado, cualquier Raycast, SphereCast,
SphereTest, etc. que tenga una interseccin
con un Collider marcado como Trigger va a
Queries Hit Triggers devolver un hit (golpe). Si es des-habilitado,
estas intersecciones no van a devolver un hit
(golpe). Hay raycasts individuales que pueden
anular este comportamiento.
La adaptive force afecta la manera que las
fuerzas son transmitidas a travs de un montn
o pila de objetos con el propsito de entregar
Enable Adaptive Force un comportamiento ms real. Esta opcin
habilita o des-activa la adaptive force. Note
que de Unity 5.0, esto esta desactivado por
defecto.
Define cmo el sistema de deteccin de layer-
Enable Adaptive Force
based collision va a comportarse.

Detalles
Los ajustes del physics manager (administrador de fsicas) define limites en la
precisin de la simulacin de fsica. Generalmente hablando, una simulacin ms

- 240 -
precisa requiere ms sobre-carga de procesamiento, por lo que estos ajustes ofrecen
una manera de intercambiar precisin contra rendimiento. Ver la seccin de fsica del
manual para informacin adicional.

- 241 -
Administrador de Fsica en 2D(Physics 2D Manager)

Usted puede acceder el Physics 2D Manager desde el men seleccionando Edit-


>Project Settings->Physics2D.

Propiedades

Propiedad: Funcin:
La cantidad de gravedad aplicada a todos los
objetos Rigidbody2D . Generalmente, la
Gravity
gravedad es solamente establecida en la
direccin negativa del eje Y.
Default Material Los Physics Material 2D predeterminados que

- 242 -
Propiedad: Funcin:
sern usados si ninguno ha sido asignado a un
collider individual.
El nmero de iteraciones hechas por el motor
de fsica para resolver efectos de velocidad.
Velocity Iterations
Nmeros mayores resultan en una fsica ms
precisa pero por el precio de tiempo de CPU.
El nmero de iteraciones hechas por el motor
de fsica para resolver cambios de posicin.
Position Iterations
Nmeros mayores resultan en una fsica ms
precisa pero por el precio de tiempo de CPU.
Collisions with a relative velocity lower than
this value will be treated as inelastic collisions
Velocity Threshold
(ie, the colliding objects will not bounce off
each other).
The maximum linear position correction used
Max Linear Correction when solving constraints (range, 0.0001 to
1000000). This helps to prevent overshoot.
The maximum angular correction used when
Max Angular Correction solving constraints (range, 0.0001 to
1000000). This helps to prevent overshoot.
The maximum linear speed of a rigidbody
Max Translation Speed
object during any physics update.
The maximum linear speed of a rigidbody
Max Rotation Speed
object during any physics update.
The minimum contact penetration radius
Min Penetration For Penalty allowed before any separation impulse force is
applied.
Scale factor that determines how fast collision
Baumgarte Scale
overlaps are resolved.
Scale factor that determines how fast time-of-
Baumgarte Time of Impact Scale
impact overlaps are resolved.
The time (in seconds) that must pass after a
Time to Sleep
rigidbody stops moving before it goes to sleep.
The linear speed below which a rigidbody will
Linear Sleep Tolerance
go to sleep after the time to sleep elapses.
The rotational speed below which a rigidbody
Angular Sleep Tolerance will go to sleep after the time to sleep
elapses.
Queries Hit Triggers Si habilitado, cualquier Raycast que
interseccione con un Collider marcado como

- 243 -
Propiedad: Funcin:
Trigger va a devolver un golpe(hit). Si
deshabilitado, estas intersecciones no van a
devolver un golper(hit).
Will any physics queries (Linecasts, Raycasts,
Queries Start In Colliders etc) that start inside a collider detect the
collider they start in? Check the box for yes.
Whether or not to stop reporting collision
Change Stops Callbacks callbacks immediately if any of the objects
involved in the collision are deleted or moved.
Define cmo el sistema de deteccin layer-
Layer Collision Matrix
based collision se va a comportar.
Detalles

The settings of the physics manager define limits on the accuracy of the physical
simulation. Generally speaking, a more accurate simulation requires more processing
overhead, so these settings offer a way to trade off accuracy against performance. See
the Physics section of the manual for further information.

- 244 -
Player Settings
Los Player Settings (men: Edit > Project Settings > Player)le permite a usted
configurar varias opciones para el juego final construido por Unity. Hay unos pocos
ajustes que son los mismo sin importar el objetivo de construccin pero la mayora
son especficos de plataforma y estn divididos en las siguientes secciones:

Resolution and Presentation: ajustes para la resolucin de pantalla y otros detalles


de presentacin como si el juego debera estar por defecto en un modo de pantalla
completa (fullscreen).

Icon: el icono(s) del juego como se muestra en el escritorio.

Splash Image: la imagen mostrada mientras el juego est iniciando.

Other Settings: cualquiera de los ajustes especficos de la plataforma restantes.

Publishing Settings: detalles acerca de cmo la aplicacin construida es preparada


para su lanzamiento desde la app store o pgina web anfitriona.

Los ajustes generales estn cubiertos abajo. Ajustes especficos a una plataforma
pueden encontrarse de manera separada en seccin propia de la plataforma en el
manual.

Ver tambin los ajustes de la Unity Splash Screen.

Ajustes Generales

- 245 -
Propiedad: Funcin:
Cross-Platform Properties
El nombre de su empresa. Esto es usado para
Company Name
ubicar el archivo de preferencias.
El nombre que va aparecer en la barra del
men cuando su juego est corriendo y es
Product Name
usado para ubicar el archivo de preferencias
tambin.
El icono predeterminado que la aplicacin va a
Default Icon tener en cualquier plataforma. Usted puede
anular esto para plataformas especficas.
El cursor por defecto que la aplicacin tendr
Default Cursor
en todas las plataformas compatibles.
Cursor hotspot en pxeles desde la parte
Cursor Hotspot
superior izquierda del cursor predeterminado.

- 246 -
Splash Screen
Unitys buit-in splash screen is uniform across all platforms.

Personal Edition
The Personal Edition of Unity will display the white version of the Splash Screen and it
is marked as Personal Edition.

- 247 -
Pro Edition
The Pro Edition of Unity allows you to select between white and black versions of the
Unity Splash Screen and allows you to turn it off.

- 248 -
- 249 -
- 250 -
- 251 -
- 252 -
- 253 -
- 254 -
- 255 -
Graphics Settings
The graphics settings shown here are mostly useful for customizing and optimizing
graphics-related settings across the project.

Built-in shader settings


These settings allow you to specify which shader is used to do lighting pass
calculations in deferred shading and legacy deferred lighting rendering paths,
respectively.

The default value is to use built-in Unity functionality for this, but you can supply your
own compatible shader if you want deep customization of deferred rendering.

You can also specify No Support if you know you arent using deferred shading or
lighting respectively, and save some space in the built game data files.

======================================================================
======================================================================
================ |Setting: |Description: | |:|:| |Built-in shader (Default
value)| Use Unitys built-in shaders to do the calculation. | |Custom shader| Use

- 256 -
your own compatible shader to do the calculation. This enables you to do deep
customization of deferred rendering. | |No Support| Disable this calculation. Use
this setting if you are not using deferred shading or lighting. This will save some space
in the built game data files. |

Always-included Shaders
Specify a list of Shaders that will always be stored along with the project, even if
nothing in your scenes actually uses them. It is important to add shaders used by
streamed AssetBundles to this list to ensure they can be accessed.

Shader stripping
By default, Unity looks at your scenes and lightmapping settings to figure out which
Fog and Lightmapping modes are used; and skips corresponding shader variants. This
saves game build data size, and improves loading times.

However, if youre building asset bundles or will be changing Fog modes from a script
at runtime, you might want to manually specify used modes here.

Setting:
Automatic(Default value)

Manual

Shader preloading
Specify a list of shader variant collection assets to preload while loading the game.
See Optimizing Shader Load Time page for details.

Vase tambin
Optimizando el rendimiento de los grficos.

Optimizando el rendimiento de los grficos.

Referencia a Shaders.

- 257 -
Ajustes del Orden de Ejecucin de
Scripts(Script Execution Order Settings)
Por defecto, las funciones Awake, OnEnable y Update de diferentes scripts son
llamadas en el orden en el que los scripts son cargados (que es arbitrario). Sin
embargo, es posible modificar este orden usando los ajustes Script Execution Order.

Los Scripts pueden ser agregados al inspector usando el botn + de ms y


arrastrarlo para cambiar el orden relativo. Tenga en cuenta que es posible arrastrar
un script ya sea encima, o abajo de la barra Default Time(tiempo predeterminado);
esos encima van a ejecutarse primero que el default time mientras que esos de abajo
van a ejecutarse despus. El orden de scripts en el cuadro de dilogo de arriba hacia
abajo determina su orden de ejecucin. Todos los scripts que no estn en el cuadro
de dilogo se ejecutarn en el intervalo de default time en un orden arbitrario.

Los nmeros mostrados por cada script son los valores del orden en el que estn los
scripts. Cuando un script es arrastrado a una nueva posicin, el nmero del script es
automticamente cambiado en consecuencia. Cuando un nmero es cambiado, ya
sea manualmente o automticamente, el archivo meta es cambiado por ese script.
Por esta razn, es mejor si un nmero pequeo de nmeros es cambiado cuando el
orden es cambiado. Este es el porqu, cuando se puede, solo el script que es
arrastrado tiene su nmero cambiando, en vez de asignar nuevos nmeros para

- 258 -
todos los scripts.

- 259 -
Etiquetas y Capas(Tags & Layers)
El Tags and Layers Manager le permite establecer Layers, Tags y Sorting Layers. Para
ver el administrador, seleccione Edit > Project Settings > Tags and Layers.

Detalles
Los Tags son valores marcados que pueden ser usados para identificar objetos en su
proyecto ( mire this page para ms detalles). Nuevas etiquetas(tags) pueden ser
agregadas escribiendo en el elemento vaco en la parte inferior de la lista de
etiquetas, o aumentando el valor de Tamao. Disminuir el tamao va a quitar
etiquetas desde el final de la lista.

Los Sorting Layers son usados en conjunto con las grficas de sprites en el sistema

- 260 -
2D. El sorting se refiere al orden de superposicin de los diferentes sprites. Usted
puede agregar y quitar sorting layers usando los botones +/- en la parte inferior
izquierda de la lista y cambiar su orden, arrastrando la manija de la izquierda de cada
elemento de la capa.

Los Layers son usados a lo largo de Unity como una manera de crear un grupo de
objetos que comparten caractersticas particulares. (Mire this page para ms detalles).
Las capas(layers) son usados principalmente para restringir operaciones como
raycasting o renderning para que estas solo sean aplicadas al grupo de objetos que
sean relevantes. En el administrador, las primeras ocho capas son predeterminadas
usadas por Unity y no son editables. No obstante, las capas de 8 a 31 pueden ser
dadas nombres personalizados simplemente escribiendo en la caja de texto
apropiada. Tenga en cuenta que en diferencia a las etiquetas(tags), el nmero de
capas no puede aumentar.

- 261 -
El Administrador de Tiempo(Time Manager)

The Time Manager (menu: Edit > Project Settings > Time) lets you set a number of
properties that control timing within your game.

Propiedades

Propiedad: Funcin:
Un intervalo de imgenes por segundo
independiente que dicta cundo los eventos de
Fixed Timestep
calculacin de fsica y FixedUpdate()son
hechos.
Un intervalo de imgenes por segundo
independiente que limita el peor de los casos,
cuando las imgenes por segundo es baja.
###Mximo Timestep Permitido
Eventos de calculacin de fsica
y FixedUpdate() no se realizarn por un
tiempo ms largo de lo especificado.
La velocidad con la cual progresa el tiempo.
Cambie este valor para simular efectos de
velocidad de bala. Un valor de 1 significa
Time Scale
tiempo real. Un valor de .5 significa la mitad
de velocidad; un valor de 2 es el doble de
velocidad.
Detalles

The Time Manager lets you set properties globally but it is often useful to set them
from a script during gameplay (for example, setting Time Scale to zero is a useful way
to pause the game). See the page on Time and Framerate Management for full details
of how time can be managed in Unity.

- 262 -
Emulacin de Red
Como parte del conjunto de caractersticas de red de Unity, usted puede escoger
emular velocidades lentas de conexin a internet para probar su experiencia de juego
a usuarios en reas con bajo ancho de banda.

Para activar la emulacin de Red(Network emulation), vaya a Edit->Network


Emulation, y escoja la velocidad de emulacin de su deseada conexin.

Activando la Emulacin de la Red

- 263 -
Detalles tcnicos
La emulacin de Red retrasa el envi de paquetes en el trafico de red para las clases
de Red(Network) y NetworkView. El ping es inflado artificialmente para todas las
opciones, el valor de la inflacin aumenta a medida que la velocidad de la conexin de
emulada se vuelva ms lenta. En el ajuste Dial-Up, packet dropping y varianza es
tambin introducida para simular la peor posible conexin de siempre. La Emulacin
va a persistir as sea que est sirviendo como el rol de Servidor o Cliente.

La emulacin de red solo afecta las clases de red(Network) y NetworkView, y no va a


alterar o emular cdigo especializado de red escrito usando sockets .NET.

- 264 -
Integracin en Visual Studio C#

Qu me aporta esta caracterstica?


Un ambiente de desarrollo C# ms sofisticado. Piense en un autocompletado
inteligente, cambios a los archivos fuente con ayuda de la computadora, un resaltado
de sintaxis inteligente y ms.

Cul es la diferencia entre Express y Pro?


VisualStudio C# 2010 es un producto de Microsoft. Viene en una edicin Express o
Profesional. La edicin Express es gratis y se puede descargar aqu. La edicin
Profesional no es gratis, puede encontrar ms informacin sobre esto aqu.

La integracin con VisualStudio de Unity le permite crear y mantener archivos de


proyecto de VisualStudio automticamente. Adems, cuando haga doble click en un
script o en un mensaje de error en la consola de Unity, se abrir VisualStudio.

Tengo Visual Studio Express, cmo lo uso?


En Unity, seleccione del men Assets->Sync MonoDevelop Project

Encuentre el nuevo archivo .sln creado en su proyecto Unity (una carpeta encima de
su carpeta de Assets)

Abra ese archivo con Visual Studio Express.

Ahora puede editar todos sus archivos script, y devolverse a Unity para usarlos.

Tengo Visual Studio Profesional, cmo lo uso?


En Unity, vaya a Edit->Preferences, y asegrese de que Visual Studio est
seleccionado como su editor externo preferido.

Haga doble click en un archivo C# de su proyecto. Visual Studio abrir


automticamente ese archivo para usted.

Puede editar el archivo, guardarlo, y devolverse a Unity.

- 265 -
Un par de cosas a tener en cuenta:
Aunque Visual Studio cuente con su propio compilador de C #, y se puede utilizar
para comprobar si tiene errores en sus scripts de C #, Unity sigue utilizando su propio
compilador de C # para compilar sus scripts. Usar el compilador de Visual Studio es
muy til, ya que significa que usted no tiene que devolverse a Unity todo el tiempo
para ver si tiene algn error o no.

El compilador de C# de Visual Studio tiene ms caractersticas actualmente que el


compilador de C# de Unity. Esto significa que algunos cdigos (especialmente
caractersticas nuevas de C#) no van a dar error en Visual Studio pero darn error en
Unity.

Unity automticamente crea y mantiene un archivo .sln y .csproj de Visual Studio.


Cuando alguien agrega/cambia el nombre/mueve/borra un archivo dentro de Unity,
Unity regenera los archivos .sln y .csproj. Usted puede agregar archivos a su solucin
desde Visual Studio tambin. Unity luego importar esos nuevos archivos, y la
prxima vez que Unity cree nuevos archivos de proyecto, los va a crear con este nuevo
archivo incluido.

Unity no re-genera los archivos del proyecto de Visual Studio despus de una
actualizacin al AssetServer, o una actualizacin SVN. Usted puede preguntarle a
Unity manualmente en re-generar los archivos del proyecto de Visual Studio a travs
del men: Assets->Sync MonoDevelop Project

- 266 -
RenderDoc Integration
The Editor supports integrated launching and capture of the RenderDoc graphics
debugger, for detailed frame introspection and debugging.

The integration is only supported for RenderDoc versions 0.26 or later, so if an earlier
version is currently installed it is required that you update to at least version 0.26.

Note: While the integration is only available in the Editor, it is quite possible to use
RenderDoc as normal with no extra setup in standalone player builds.

Note: Frames can only be captured if Unity is running on a platform and API that
RenderDoc supports - at time of writing that means Windows only, and either DirectX
11 or OpenGL Core profile. If another API is in use, the RenderDoc integration will be
temporarily disabled until a supported API is enabled.

Loading RenderDoc
If a RenderDoc installation is detected, then at any time after loading the Editor you
can right click on the tab for the Game View or Scene View and click the Load
RenderDoc option. This will reload the graphics device so you must save any changes,
but afterwards RenderDoc will be ready to capture without having to restart the editor
or build a standalone player.

Loading RenderDoc at runtime

Note: You can also launch the Editor via RenderDoc as normal, or pass the -load-
renderdoc command line option to load RenderDoc from startup.

Capturing a frame with RenderDoc


When a compatible version of RenderDoc is detected as loaded into the Editor, a new
button will appear on the right side of the toolbar on the Game and Scene Views.

- 267 -
Capturing a frame with RenderDoc

Pressing this button will trigger a capture of the next frame of rendering for the view.
If the RenderDoc tool UI has not been opened, a new instance will be launched to
show the capture, and if it is already running the newest capture will automatically
appear there. From there you can open the capture and debug using the tool.

List of frame captures in RenderDoc

Including shader debug information


By default to optimise the size of DirectX11 shaders, debugging information is
stripped out. This means that constants and resources will have no names, and the
shader source will not be available. To include this debugging information in your

- 268 -
shader, include #pragma enable_d3d11_debug_symbols in your shaders
CGPROGRAM block.

Alternative graphics debugging techniques


If you build a standalone player using D3D11, you can capture a frame and debug
using the Visual Studio graphics debugger.

- 269 -
Analiticas del Editor
El editor de Unity est configurado para enviar datos de uso annimo de regreso a
Unity. Esta informacin se usa para a ayudar a mejorar las caractersticas del editor.
Los anlisis se recogen usando Google Analytics. Unity hace llamadas a una URI
alojada por Google. La parte URN de la URI coniene detalles que describen qu
eventos o caractersticas del editor se han usado.

Ejemplos de datos recolectados


Los siguientes son ejemplos de datos que Unity podra recopilar.

Elementos del men que han sido utilizados. Si algunos elementos del men son
usados rara vez o no del todo, en el futuro podramos simplificar el sistema de mens.

El tiempo de construccin. Al determinar cunto tiempo toma la construccin,


podemos enfocarnos en la ingeniera de optimizar el cdigo correcto.

Lightmap baking. Igualmente, determinar el tiempo de cocinado de las luces y


sombras sobre las texturas nos puede ayudar a decidir cunto esfuerzo se necesita
para optimizar esta rea.

Desactivando las Analticas del Editor


Si usted no quiere enviar datos annimos a Unity entonces el envo de Analticas del
editor se pueden des-activar. Para hacer esto, desmarque la casilla en la pestaa
Unity Preferences General.

- 270 -
Editor analytics en
el panel de preferencias.

- 271 -
Buscar Actualizaciones
Unity comprueba si hay actualizaciones disponibles. Esta comprobacin ocurre ya sea
cuando Unity comienza, o cuando usted escoge el elemento del men Help->Check
for Updates. La comprobacin de actualizacin enva el nmero de revisin de Unity
actual (el nmero de cinco dgitos que aparece entre parntesis tras el nombre de la
versin en el About del cuadro de dilogo de Unity) al servidor de actualizacin en
dnde es comparado con la versin ms actual lanzada. Si hay una versin ms
reciente de Unity disponible, el siguiente cuadro de dilogo se muestra:

Window
displayed when there is a newer version of Unity available for download.

Si la versin en uso es la ms actualizada, se muestra el siguiente cuadro de dilogo:

Window
displayed when Unity is updated to the latest version.

Haga click en el botn Download new version para acceder a la pgina web donde
descargar la nueva versin.

- 272 -
La Frecuencia de la Comprobacin de la Actualizacin
La respuesta del servidor tambin contiene un intervalo de tiempo que sugiere
cuando la siguiente comprobacin de la actualizacin se debe hacer. La respuesta del
servidor tambin contiene un intervalo de tiempo que sugiere cuando la siguiente
comprobacin de la actualizacin se debe hacer. Esto permite que la comprobacin
de la actualizacin se realize con menos frecuencia cuando Unity no espera que las
actualizaciones se hagan disponibles.

Omitiendo Actualizaciones
Si est en mitad de un proyecto, probablemente no desee actualizar a una nueva
versin de Unity. Marcando el botn Skip this versin en el cuadro de dilogo de
actualizaciones del Editor de Unity evitar que Unity le informe sobre esta
actualizacin.

Desactivando la Comprobacin de Actualizacin


No es posible desactivar la comprobacin de actualizaciones. La casilla de verificacin
de Buscar Actualizaciones en el cuadro de dilogo controla si usted es notificado de
actualizaciones ( si estn disponibles) cuando Unity comienza. As sea que usted haya
demarcado la opcin de Buscar Actualizaciones, usted todava puede buscar por
actualizaciones usando el elemento del men Help->Check for Updates.

- 273 -
IME en Unity

Qu es Input Method Editor (IME)?


Un Input Method es un component o programa de un sistema operativo que le
permite a los usuarios introducir caracteres y smbolos que no se encuentran en su
dispositivo de Input. Por ejemplo, en el computador, esto le permite al usuario de
teclados Occidentales introducir caracteres Chinos, Japoneses, Coreanos e indios. En
muchos dispositivos de mano, como los celulares, le permite a uno usar el teclado
numrico para introducir caracteres del alfabeto latino.

El trmino input method generalmente se refiere a una manera en particular de


usar\tel teclado para introducir un lenguaje en particular, por ejemplo el Cangjie
method, el pinyin method, o el uso de teclas muertas.

IME y Unity

Unity proporciona soporte IME, que significa que usted puede escribir caracteres que
no sean ASCII en todas sus interfaces grficas. Este Input Method es completamente
integrado en el motor entonces usted no tiene que hacer nada para activarlo. Para
poder probarlo, simplemente cambie su lenguaje de teclado a un lenguaje no-ASCII

- 274 -
(e.g. Japons) y empiece a escribir su interfaz.

Para ms informacin y optimizacin cuando escriba caracteres no-ASCII, revise la


opcin character en font properties.

Nota: IME en Unity no est soportado por reproductores web de mac en este
momento.

iOS
Esta caracterstica todava no est soportada en dispositivos iOS.

Android
Esta caracterstica todava no est soportada en dispositivos Android.

- 275 -
Nombres de carpetas de especiales
Para la mayora de veces, usted puede escoger cualquier nombre que quiera para las
carpetas que usted crea para organizar su proyecto. Sin embargo, hay un nmero de
nombres de carpeta que Unity va a interpretar como una instruccin que el contenido
de la carpeta debe ser tratado de una manera especial. Por ejemplo, los scripts del
editor deben colocarse en una carpeta llamada Editor con el fin de que funcionen
bien. La lista completa de los nombres especiales de carpeta utilizados por Unity se
da abajo.

Assets
La carpeta Assets es la carpeta principal que contiene los assets que pueden ser
utilizados por un proyecto de Unity. El contenido de la vista del proyecto (Project view)
corresponden directamente a los contenidos de la carpeta Assets. La mayora de
funciones API asume que todo est ubicado en la carpeta Assets por lo que no
requieren que sean mencionados explcitamente. Sin embargo, algunas
funciones s necesitan tener la carpeta Assets incluida como parte del nombre de una
ruta (eg, ciertas funciones en la clase AssetDatabase).

Editor
Todos los scripts que son colocados en una carpeta llamada Editor (o una sub-carpeta
dentro de esta) sern tratados como scripts del editor en vez de scripts de tiempo de
ejecucin. Tales scripts estn diseados para agregarle funcionalidad a Unity en s
durante el desarrollo y no estn disponibles en el juego final en tiempo de ejecucin.
Ms de una carpeta Editor se puede utilizar en un proyecto a la vez pero tenga en
cuenta que la ubicacin exacta de una carpeta Editor afecta el tiempo en el cual lo
scripts sern compilados relativo a otros scripts. Ver la pgina acerca de Carpetas
Especiales y Orden de Compilacin de Scripts para una descripcin completa de
esto. Tenga en cuenta: Unity no permitir que los componentes derivados de
MonoBehaviour sean asignados a GameObjects si los scripts estn en la carpeta del
Editor.

Recursos predeterminados del Editor


Los scripts del editor hacen uso de archivos assets cargados en demanda utilizando la

- 276 -
funcin EditorGUIUtility.Load. Esta funcin buscar los archivos assets en una carpeta
llamada Editor Default Resources que debera ser colocada directamente dentro de
la carpeta Assets.

Gizmos
Los Gizmos de Unity le permiten a usted agregar grficas a la scene view (vista de
escena) para ayudarlo a visualizar detalles de diseo que por el contrario seran
invisibles. La funcin Gizmos.DrawIcon coloca un icono en la escena para que
funcione como un marcador para un objeto especial o posicin. El archivo de imagen
utilizado para dibujar este icono debe ser colocado en una carpeta
llamada Gizmos con el fin de que sea ubicado por la funcin DrawIcon.

Plugins
Unity le permite a usted agregar Plugins a un proyecto para extender las
caractersticas disponibles a Unity. Los Plugins son DLLs nativos que son escritos
tpicamente en C/C++. Pueden acceder cdigo de libreras de terceros, llamados al
sistema y otras cosas que no son proporcionadas por Unity. Los plugins deben ser
colocados en una carpeta llamada Plugins para que sean detectados por Unity y,
como la carpeta del Editor, esto afecta el orden en el que los scripts son compilados.
Ver carpetas especiales y orden de compilacin de scripts por detalles, y Plugin
Inspector para informacin acerca del control del plugin en la plataforma.

Resources
Por lo general, usted crea instancias de assets en la escena que son utilizadas en el
gameplay pero Unity tambin le permite a usted cargar assets en demande desde un
script. Usted hace esto colocando assets en una carpeta llamada Resources o una
sub-carpeta (usted en realidad puede tener cualquier nmero de carpetas Resources
y colocarlas dnde sea en el proyecto). Estos assets se pueden cargar utilizando la
funcin Resources.Load.

Standard Assets
Cuando usted importe un paquete de standard asset (men: Assets > Import
Package) los assets son colocados en una carpeta llamada Standard Assets. Al igual
que contener los assets, estas carpetas tambin tienen un efecto en el orden de

- 277 -
compilacin scripts; ver la pgina acerca de carpetas especiales y orden de
compilacin scripts por detalles adicionales.

StreamingAssets
La mayora de assets del juego son incorporados directamente al reproductor
construido pero hay algunos casos dnde usted quiere que el asset est disponible
como un archivo separado en su formato original. Por ejemplo, reproducir un video
en iOS, usted debe acceder el archivo del video desde el filesystem (sistema de
archivos) en vez de utilizarlo como una MovieTexture. Si usted coloca un archivo en
una carpeta llamada StreamingAssets, este ser copiado sin cambiar a la maquina
objetivo dnde estar disponible de una carpeta especfica. Ver la pgina acerca
de Streaming Assets para detalles adicionales.

WebPlayerTemplates
Para construcciones del webplayer, Unity le permite a usted proporcionar una pgina
de alojamiento personalizada para entregar el reproductor. La pgina anfitriona es
proporcionada en la forma de un template que puede incorpora informacin
especifica del proyecto como su nombre. Estos templates (planillas) deben ser
colocados en una carpeta llamada WebPlayerTemplates para que estn disponibles
a Unity; ver la pgina acerca de utilizar Web Player templates para detalles
adicionales. Tambin vale la pena tener en cuenta que cualquier script colocado en la
carpeta WebPlayerTemplates ser ignorado por el compilador. Colocar los archivos
scripts puede ser una manera til temporal de pararlos en ser compilados, digamos si
contienen cdigo incompleto que evitar que el juego corra.

Hidden Assets (Assets ocultos)


Durante el proceso de importacin, Unity completamente ignora los siguientes
archivos y carpetas en la carpeta Assets (o una sub-carpeta dentro de esta):

Carpetas Hidden (ocultas).

Archivos y carpetas que empiezan con ..

Archivos y carpetas que terminan con ~.

Archivos y carpetas llamadas cvs.

Archivos con una extensin tmp.

- 278 -
Esto es utilizado para prevenir que se importen archivos especiales y temporales
creados por el sistema operativo u otras aplicaciones.

- 279 -
Exporting Packages
A medida que construyes tu juego, Unity almacena muchos metadatos de tus assets
(configuraciones de importacin, enlaces a otros assets, etc.) Si quieres tomar tus
assets para usarlos en un proyecto diferente, hay una forma especfica de hacerlo. A
continuacin se muestra cmo mover fcilmente assets entre proyectos, de modo
que sea conservada toda esta informacin:

See Asset Packages for detailed information on using packages, including importing
and exporting.

Exporting New Packages


Use Export Package to create your own Custom Package.

1.Abre el proyecto al que quieres traer los assets.

2.Desde la barra de men, escoge Assets->Export Package (See Fig 1: Exporting


Package dialog box.)

3.In the dialog box, select the assets you want to include in the package by clicking on
the boxes so they are checked.

4.Leave the include dependencies box checked to auto-select any assets used by the
ones you have selected.

5.Click on Export to bring up File Explorer (Windows) or Finder (Mac) and choose
where you want to store your package file.

6.Nombra y guarda el paquete en la ubicacin de tu preferencia.

HINT: When exporting a package Unity can export all dependencies as well. So, for
example, if you select a Scene and export a package with all dependencies, then all
models, textures and other assets that appear in the scene will be exported as well.
This can be a quick way of exporting a bunch of assets without manually locating
them all.

- 280 -
Fig 1: Exporting Package dialog box

Exporting Updated Packages


Sometimes you may want to change the contents of a package and create a newer,
updated version of your asset package. To do this:

Select the asset files you want in your package (select both the unchanged ones and
the new ones).

Export the files as described above in Export Package, above.

NOTE: You can re-name an updated package and Unity will recognise it as an update,
so you can use incremental naming, for example: MyAssetPackageVer1,
MyAssetPackageVer2.

HINT: It is not good practise to remove files from packages and then replace them
with the same name: Unity will recognise them as different and possibly conflicting
files and so display a warning symbol when they are imported. If you have removed a
file and then decide to replace it, it is better to give it a different, but related name to
the original.

- 281 -
Control de Versiones
Usted puede utilizar Unity en conjunto con la mayora de herramientas de control de
versiones, incluyendo Perforce y PlasticSCM. Esta seccin da detalles acerca de las
herramientas y las opciones disponibles y cmo trabajar con ellas.

2016 Todos los derechos reservados. Unity Technologies. Publication 5.3-Q

TutorialesRespuestas de

- 282 -
Integracin con control de versiones (solo
Licencias de Equipo)
Unity soporta la integracin con los controladores de versiones Perforce y Plastic SCM,
consulte estas pginas para informacin especfica sobre la eleccin de control de
versiones.

Por qu debera usar control de versiones?


Usar un version control system es ms fcil para un usuario o mltiplos usuarios
manejar su cdigo. Es un repositorio de archivos con acceso monitorizado, que en el
caso de Unity, van a ser todos los archivos asociados con un proyecto de Unity. Con
versin control es posible seguir cualquier cambio a la fuente junto con informacin
acerca de quin hizo el cambio, por qu lo hiciera y qu cambiaron/agregaron. Esto
hace que sea fcil revertirse a una versin anterior del cdigo, o para comparar las
diferencias en las versiones. Tambin se vuelve fcil ubicar cundo un error por
primera vez ocurri junto con el cdigo que lo pudo causar.

Configurando su control de versiones en Unity


Siga estos pasos una vez que tenga la configuracin de su software de control de
versiones configurado de acuerdo a sus propias instrucciones:

1.Configure, o sincronice un espacio de trabajo en su ordenador usando su cliente


elegido (dirjase a la Plastic SCM Integration guide o la Perforce Integration guide para
ayuda con este paso).

2.Copie un proyecto existen al espacio de trabajo o arranque Unity y cree un proyecto


nuevo en el espacio de trabajo.

3.Abra el proyecto y vaya al men Edit->Project Settings->Editor

4.Escoja su Mode de control de versiones de acuerdo a la versin del sistema de

- 283 -
control de versiones que elija.

5.Llene los ajustes de su version control, como el nombre de usuario / contrasea/


servidor / espacio de trabajo.

6.Deje Automatic add marcado si quiere que sus archivos sean automticamente
agregados al control de versiones cuando se agregan al proyecto (o a la carpeta en el
disco). De lo contrario tendr que aadir archivos nuevos manualmente.

7.Tiene la opcin de trabajar desconectado. Este modo solo es recomendado para


usuarios avanzados que sepan cmo integrar manualmente los cambios de nuevo a
su opcin de version control (Working offline with Perforce).

8.Las opciones Asset Serialization, Default Behaviour Mode y Sprite Packer pueden ser
editadas para adaptarse a las preferencias de su equipo y su opcin de version
control.

9.Haga click en connect y verifique que Connected es mostrado encima del botn de
connect despus de un pequeo rato.

10.Use su cliente estndar (e.g. p4v) para asegurarse de que todos loas archivos en las
carpetas de Assets y ProjectSettings (incluyendo archivos terminando con .meta) son
agregados.

N.B. En cualquier punto usted puede ir al men de Prefences y seleccionar External


Tools y ajustar la herramienta Diff/Merge de su Revision Control.

Usando Version Control


En este punto usted debe ser capaz de hacer la mayora de operaciones importantes
de version control directamente haciendo click derecho en lo assets en el project view,
en vez de ir a travs del cliente de version control. Las operaciones de version control
varan dependiendo en qu version control escoja, esta tabla muestra qu acciones
estn directamente disponibles para cada version control:

Operacin de Descripcin Perforce Plastic SCM

- 284 -
Version Control
Permite que se hagan
Check Out S S
cambios al archivo
Compara las
diferencias entre los
Diff against head S S
archivos a nivel local
y en el encabezado
Obtiene los ltimos
Get Latest cambios y el archivo S No*
de actualizacin
Previene que otros
Lock usuarios hagan S No**
cambios al archivo
Agrega localmente
Mark Add pero no a version S S
control
Para resolver
conflictos en un
Resolve Conflicts archivo que ha sido S No***
cambiado por
mltiplos usuarios
Descarta los cambios
Revert realizados a archivos S S
abiertos cambiados
Descarta los cambios
Revert Unchanged realizados a archivos S S
abiertos sin modificar
Somete el estado
Submit actual del archivo a S S
version control
Suelta lock y permite
Unlock que se hagan cambios S No**
por cualquiera
* Para obtener los ltimos cambios y actualizar el archivo usando Plastic SCM, usted
necesita usar la ventana de version control.

** Bloquear y desbloquear usando Plastic SCM requiere que usted edite un archivo
bloqueado especfico de Plastic SCM externamente, mire la pgina para ms
informacin

*** Los conflictos son mostrados dentro el men de version control pero resueltos en

- 285 -
el GUI de Plastic SCM.

Plastic SCM Version Control Operations on Mac

Perforce Version Control Operations on Windows

Ventana del Version Control


Usted puede mirar sus archivos en su changelist desde Version Control
Window (Window->Version Control). Se muestra aqu acoplado junto al Inspector en el
editor:

- 286 -
La pestaa Outgoing lista todos los cambios locales que estn pendientes de una
confirmacin en el version control, mientras que la pestaa Incoming lista todos los
cambios que necesitan ser sacados del version control.

Haciendo click derecho en los assets o en changelists en esta ventana hace que usted
realice operaciones en estos. Para mover assets entre changelists simplemente
arrastre los assets desde una changelist al encabezado del changelist de destino.

Iconos
Los siguientes iconos son mostrados en el editor de Unity para visualizar el estatus
del version control para archivos/assets:

Iconos Significado Informacin adicional


Adicin pendiente a version
Archivo agregado localmente
control
Archivo agregado a version Adicin pendiente a version
control por otro usuario control
El archivo es checked out por
Checked out localmente
usted
El archivo es checked out por
Checked out a distancia
otro usuario

- 287 -
Ha habido un conflicto
Necesita ser resuelto
fusionando este archivo
El archivo ha sido eliminado Una eliminacin pendiente en
por usted version control
El archivo ha sido eliminado Una eliminacin pendiente en
por otro usuario version control
El archivo an no est bajo
n/a
version control
El archivo est bloqueado por No puede ser modificado por
usted otros usuarios
El archivo est bloqueado por No puede ser modificado por
otro usuario usted
Otro usuario ha checked in Use Apply Incoming
una nueva versin de este Changes para obtener la
archivo ltima versin
Cosas para tener en cuenta:

Ciertos version controls o va a permitirle editar assets hasta que estn marcados
como Checked out ( al menos de que tenga marcado Work offline).

Cuando guarde cambios a un archivo .scene automticamente va a ser


demarcado(Checked out).

Los Inspectors de Project Settings tienen un botn checkout en la parte inferior a la


derecha que le permite marcar los ajuste.

Una advertencia amarilla va a aparecer normalmente para recordarle demarcar


elementos con el fin de hacer cambios en ellos, esto en la mayora aplica a los
inspectors de Project Settings.

En Plastic SCM, los assets automticamente generados como los lightmaps son
automticamente agregados/checked out.

Reversin automtica de los archivos no modificados enviados


Al trabajar con Assets, Unity comprueba automticamente ambos el archivo asset
como el archivo .meta asociado. En la mayora de situaciones, sin embargo, el
archivo .meta no es modificado, lo que podra causar un poco de trabajo adicional e.g.
al combinar ramas en un momento posterior.

- 288 -
Modo Sin Conexin
Unity apoya trabajar en modo fuera de linea, e.g, para continuar trabajando sin una
conexin de red con el repositorio de su versin de control.

Seleccione Work offline desde los ajustes del version control, si quiere ser capaz de
trabajar desconectado del version control.

Solucin de Problemas(Troubleshooting)
Si Unity por alguna razn no puede confirmar los cambios a su cliente de version
control, e.g. si el servidor est cado o problemas de licencia, los cambios se guardan
en un conjunto de cambios(changeset) por separado.

Trabajando con el Asset Server


Para trabajo con el Asset Server (el sistema de Version Control interno de Unity)
dirigirse a Asset Server documentation.

Trabajando con otros sistemas de control de versiones


Para trabajar con sistema de version control no soportado por Unity,
seleccione MetaData como el Mode para version control en las Editor Settings. Esto le
permite manejar los assets fuente y metadatos para esos assets con un sistema de
version control de su eleccin. Para ms sobre esto, mire la documentacin acerca
de External Version Control Systems

- 289 -
Integracin Perforce
Para ms informacin acerca de Perforce, puede visitar la website.

Configurando Perforce
Dirjase a perforce documentation si encuentra cualquier problema con el proceso de
configuracin en version control page.

Trabajando sin conexin con Perforce


Solo use esto si sabe how to work offline in Perforce without a Sandbox. Dirjase
a Perforce documentation para ms informacin en trabajar en el modo sin conexin
para Perforce.

Solucin de Problemas(Troubleshooting)
Si por alguna razn Unity no puede realizar sus cambios a Perforce, e.g. si el servidor
est cado, problemas de licencia etc., sus cambios van a ser almacenados en un
changeset separado. Si la consola no lista cualquier informacin acerca del problema,
usted puede usar el cliente P4V de Perforce para presentar este changeset para ver el
mensaje de error exacto.

Reversin automtica de archivos no modificados en


enviar(submit)
Es posible configar Perforce en revertir archivos no modificados al enviar (submit),
que es hecho en P4V seleccionando Connection->Edit Current
Workspace, mirando la pestaa Advanced y ajustando el valor de On submit
a Revert unchanged files:

- 290 -
Integracin de Plastic SCM
Para ms informacin acerca de Plastic SCM usted puede visitar la website.

Configurando Plastic SCM


Dirjase a Plastic SCM documentation si encuentra cualquier problema con el proceso
de configuracin en version control page.

Checking out archivos con Plastic SCM


Plastic SCM automticamente checks out archivos si estos han sido modificados, esto
es muy conveniente para usted. Los nicos archivos que requieren instrucciones
especficas de checking out son archivos de Project Settings, de lo contrario, no los
puede modificar.

Resolviendo Conflictos y fusionando con Plastic SCM


Una fusin es probable que suceda cuando ha editado algo en su proyecto
localmente, que tambin ha sido editado a distancia (un conflicto). Esto significa que
usted tendr que revisar los cambios antes de que la fusin sea realizada. Si Unity
reconoce que una fusin debe ocurrir antes que los cambios puedan ser enviados,
entonces va a ser solicitado por Unity en completar la fusin, esto lo va a llevar al
cliente de Plastic SCM.

Si los cambios entrantes entran en conflicto con los cambios locales, entonces un
icono de signo de interrogacin va a aparecer en los archivos en conflicto en la
ventana de cambios entrantes. He aqu una gua rpida en resolver conflictos y
fusionar con Plastic SCM.

En la ventana de Version Control haga click en el botn Apply all incoming changes,
esto automticamente lo llevar al cliente GUI de Plastic SCM.

Dentro de la ventana del cliente, usted va a ser capaz de hacer click en Explain
merge, para un entendimiento ms visual de los cambios. Ahora haga click en
Process all merges y otra ventana va a ser mostrada.

Aqu usted va a ser mostrado los conflictos individuales y tener la opcin de escoger
qu cambios quiere mantener o descartar.

- 291 -
Una vez haya solucionado los conflictos haga click en guardar y salir, esto har que la
operacin de fusin se haya completado.

Usted ahora tiene que empujar los cambios como normal a travs de la ventana de
version control de Unity.

Bloquear Archivos con Plastic SCM


Para poder bloquear archivos usando Plastic SCM hay unos pequeos pasos a seguir:

La primer cosa que tiene que hacer es crear un archivo lock.conf y asegurarse que
est ubicado dentro del directorio del servidor. Usted puede encontrar el directorio
del servido desde ../PlasticSCM/server.

En su archivo lock.conf usted debe especificar el repositorio en el que est


trabajando y el servidor va a completar las verificaciones de bloqueo . He aqu un
ejemplo:
rep:default lockserver:localhost:8087
*.unity
*.unity.meta
En este caso todos los archivos .unity y.unity.meta van a ser bloqueados para
checkout en un repositorio default.

Usted va querer reiniciar su servidor en este punto, usted puede hacer esto abriendo
una ventana de una linea de terminal/command y ubicando el directorio del servido.
Una vez en el directorio, puede reiniciar el servidor escribiendo:
./plasticsd restart
Ahora vaya devuelta a Unity y check out un archivo que usted espera que se bloquee,
luego vaya devuelta a la linea del terminal/command y escriba:
cm listlocks
Si los pasos han sido seguidos correctamente, la ventana de la linea de
terminal/command debera ahora mostrar una lista de archivos bloqueados. Tambin
puede probar si esto ha funcionando intentando check out el mismo archivo usando
un usuario diferente, un error aparecer en la consola de Unity diciendo que el
archivo est ya checked out por otro usuario.

Para ms informacin usted puede visitar Plastic SCM lock file documentation.

Trabajando sin conexin con Plastic SCM


To find more about working in distributed mode (DVCS) and offline with Plastic SCM

- 292 -
check the Distributed Version Control Guide.

- 293 -
Usando Sistemas de Control de Versiones
Externos con Unity
Unity ofrece un producto agregado Asset Server para una integracin fcil de las
versiones de sus proyectos, y tambin puede utilizar Perforce y PlasticSCM como
herramientas externas ( mire Version Control Integration para ms detalles). Si usted
por alguna razn no puede utilizar estos sistemas, es posible almacenar su proyecto
en cualquier otro sistema de control de versiones, tal como Subversion o Bazaar. Esto
requiere algunas configuraciones manuales iniciales de su proyecto.

Antes de hacer checking a su proyecto, usted debe decirle a Unity en modificar un


poco la estructura del proyecto para hacerlo compatible con assets almacenados en
un sistema de control de versiones externo. Esto se realiza seleccionando Edit-
>Project Settings->Editor en el men de aplicacin y activando el soporte para
External Version Control seleccionando Visible Meta Files en el men desplegable de
Version Control. Esto va a mostrar un archivo de texto para cada asset en el
directorio Assets conteniendo la informacin administrativa necesaria requerida por
Unity. Los archivos tendrn una extensin de archivo .meta, con la primera parte
siendo el nombre completo del archivo Asset que est asociado a l. Mover y re-
nombrar los assets dentro de Unity debera tambin actualizar los archivos
relevantes .meta. No obstante, si usted mueve o re-nombra los assets desde una
herramienta externa, asegrese de sincronizar los archivos .meta relevantes tambin.

Cuando haga checking al proyecto en un sistema de control de versiones, usted


debera agregar los directorios Assets y ProjectSettings al sistema. El
directorio Library debera ser completamente ignorado - cuando use archivos .meta,
es solo un cach local de assets importados.

Cuando cree nuevos assets, asegrese que ambos el asset en s y el


archivo .meta asociado sean agregados al control de versiones.

Ejemplo: Crear un nuevo proyecto e importarlo a un


repositorio de subversion.
Primero, asumamos que tenemos un repositorio de subversion
en svn://my.svn.server.com/ y queremos crear un proyecto

- 294 -
en svn://my.svn.server.com/MyUnityProject. Entonces siga estos pasos para
crear la importacin inicial en el sistema:

1.Cree un nuevo proyecto dentro Unity y llmelo InitialUnityProject. Usted


puede agregar cualquier assets iniciales aqu o agregarlos ms adelante.

2.Active Visible Meta files en Edit->Project Settings->Editor

3.Slgase de Unity (esto asegura que todos los archivos estn guardados).

4.Borre el directorio Library dentro su directorio de proyecto.

5.Importe el directorio del proyecto a Subversion. Si est utilizando el cliente de linea


de comando, esto es hecho as desde el directorio de dnde su proyecto inicial est
ubicado: svn import -m"Initial project import" InitialUnityProject
svn://my.svn.server.com/MyUnityProject Si tiene xito, el proyecto debera
ser importado a subversion y usted puede borrar el
directorio InitialUnityProject si desea.

6.Check out el proyecto devuelta desde subversion svn co


svn://my.svn.server.com/MyUnityProject y revise que el
directorio Assets y ProjectSettings estn versionados.

7.Abra el proyecto checked out con Unity lanzndolo mientras mantiene oprimido las
teclas Option o el Alt izquierdo. Abrir el proyecto va a recrear el
directorio Library en el paso 4 de arriba.

8.Opcional: Configure un filtro de omisin para el directorio


unversioned Library : svn propedit svn:ignore MyUnityProject/ Subversion
va abrir un editor de texto. Agregue el directorio Library.

9.Finalmente confirme los cambios. El proyecto debera ya estar configurado y


listo: svn ci -m"Finishing project import" MyUnityProject

- 295 -
Smart Merge
Unity incorporates a tool called UnityYAMLMerge that can merge scene and prefab
files in a semantically correct way. The tool can be accessed from the command line
and is also available to third party version control software.

Setting Up Smart Merging in Unity


In the Editor Settings (menu: Edit > Project Settings > Editor), you have the option
to select a third party version control tool (Perforce or PlasticSCM, for example). When
one of these tools is enabled, you will see a Smart Merge menu under the Version
Control heading. The menu has four options:

Off: use only the default merge tool set in the preferences with no smart merging.

Premerge: enable smart merging, accept clean merges. Unclean merges will create
premerged versions of base, theirs and mine versions of the file. Then, use these with
the default merge tool.

Ask: enable smart merging but when a conflict occurs, show a dialog to let the user
resolve it (this is the default setting).

Setting up UnityYAMLMerge for Use with Third Party Tools


The UnityYAMLMerge tool is shipped with the Unity editor; assuming Unity is installed
in the standard location, the path to UnityYAMLMerge will be:
C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe

or

C:\Program Files (x86)\Unity\Editor\Data\Tools\UnityYAMLMerge.exe


en Windows y
/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge
on Mac OSX (use the Show Package Contents command from the Finder to access this
folder).

UnityYAMLMerge is shipped with a default fallback file (called mergespecfile.txt, also


in the Tools folder) that specifies how it should proceed with unresolved conflicts or
unknown files. This also allows you to use it as the main merge tool for version control
systems (such as git) that dont automatically select merge tools based on file

- 296 -
extensions. The most common tools are already listed by default in mergespecfile.txt
but you can edit this file to add new tools or change options.

You can run UnityYAMLMerge as a standalone tool from the command line (you can
see full usage instructions by running it without any arguments). Set-up instructions
for common version control systems are given below.

P4V
Vaya a Preferences > Merge.

Seleccione Other application.

Agregue el botn Add.

En el campo de extensin, ingrese .unity.

En el campo de Application, ingrese la ruta a la herramienta UnityYAMLMerge (ver


arriba).

En el campo de Arguments, ingrese merge -p %b %1 %2 %r

Click Save.

Luego, siga el mismo procedimiento para agregar una extensin .prefab.

Git
Agregue el siguiente texto a su archivo .git o .gitconfig
[merge]
tool = unityyamlmerge

[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL"
"$MERGED"

Mercurial
Agregue el siguiente texto a su archivo .hgrc:
[merge-patterns]
**.unity = unityyamlmerge
**.prefab = unityyamlmerge

[merge-tools]
unityyamlmerge.executable = <path to UnityYAMLMerge>
unityyamlmerge.args = merge -p --force $base $other $local $output
unityyamlmerge.checkprompt = True
unityyamlmerge.premerge = False
unityyamlmerge.binary = False

- 297 -
SVN
Agregue lo siguiente a su archivo ~/.subversion/config:
[helpers]
merge-tool-cmd = <path to UnityYAMLMerge>

TortoiseGit
Vaya a Preferences > Diff Viewer > Merge Tool y haga click en el botn Advanced.

En el popup, ingrese .unity en el campo de extensin.

En tipo de campo External Program:


<path to UnityYAMLMerge> merge -p %base %theirs %mine %merged
Luego, siga el mismo procedimiento para agregar una extensin .prefab.

PlasticSCM
Vaya a Preferences > Merge Tools y haga click en el botn Add.

Seleccione External merge tool.

Seleccione Use with files that match the following pattern.

Agregue la extensin .unity.

Ingrese el comando:
<path to UnityYAMLMerge> merge -p @basefile @sourcefile
@destinationfile @output
Luego, siga el mismo procedimiento para agregar una extensin .prefab.

SourceTree
Vaya a Tools > Options > Diff.

Seleccione Custom en el desplegable Merge Tool.

Ingrese la ruta a UnityYAMLMerge en el campo de texto Diff Command.

Ingrese merge -p $BASE $REMOTE $LOCAL $MERGED en el campo de


texto Arguments.

- 298 -
Solucin de Problemas (Troubleshooting) del
Editor
La siguiente seccin explica cmo solucionar problemas(troubleshoot) y evitar
problemas con el editor de Unity. En general, asegrese que su computador cumpla
con todos los system requirements, est actualizado a la fecha, y que usted tenga el
permiso requerido de usuario en su sistema. Tambin haga copias de seguridad
regularmente para proteger sus proyectos.

Versiones
Usted puede instalar diferentes versiones del editor en diferentes carpetas. No
obstante, asegrese de que haga copias de seguridad de sus proyectos ya que estos
pueden ser actualizados por una versin nueva, y no podr abrirlos en una versin
vieja de Unity. Mire la pgina del manual sobre instalando Unity para ms detalles.

Las licencias de complementos son vlidas solamente para versiones de Unity que
compartan el nmero mayor igual, por ejemplo 3.x y 4.x. Si usted actualiza a una
versin menor de Unity, por ejemplo 4.0 a 4.1, los complementos sern mantenidos.

Activacin
Activacin por Internet es el mtodo preferido para generar su licencia de Unity. Pero
si est teniendo problemas, siga estos pasos:

1.Desconecte su computador de la red, de lo contrario, usted podr obtener un error


tx_id invalid.

2.Seleccione Activacin Manual.

3.Haga click en Save License Request.

4.Escoja una ubicacin conocida para guardar, por ejemplo, la carpeta de descargas.

5.Conctese nuevamente a la red y abra https://license.unity3d.com/

6.En el campo de archivo haga click en Browse, y seleccione el archivo de solicitud de


licencia.

7.Escoja la licencia requerida para Unity y llene la informacin solicitada.

- 299 -
8.Haga click en Download License y guarde el archivo.

9.Vaya devuelta a Unity y seleccione Manual Activation si es necesario.

10.Haga click en Read License y luego seleccione el archivo de licencia descargado.

Si todava tiene problemas registrndose o de logging a su cuenta de usuario, por


favor contactar support@unity3d.com.

Fallo al Arranque
Si Unity falla cuando empieza, entonces primero asegrese que su computador
cumpla con los mnimos system requirements. Tambin actualicese a los ltimos
controladores grficos y de sonido.

Si usted obtiene errores de escritura de disco, debera revisar las restricciones de su


cuenta de usuario. Cuando en MacOs, tenga en cuenta que el root user no es
recomendado y Unity no ha sido probado en este modo. Unity debera tener siempre
permiso de escritura para sus carpetas, pero si usted lo est garantizando
manualmente, reviste estas carpetas:

En Windows:

La carpeta de instalacin de Unity

%AllUsersProfile%\Unity (tpicamente C:\ProgramData\Unity)


C:\Documents and Settings\<user>\Local Settings\Application
Data\Unity
C:\Users\<user>\AppData\Local\Unity

MacOS:

Contenidos de paquete de Unity.app


/Library/Application Support/Unity
~/Library/Logs/Unity

Algunos usuarios han experimentado dificultades cuando usan discos duros


formateados con particiones que no sean nativas, y usando cierto software para
trasladar datos entre dispositivos de almacenamiento.

Fuentes
Fuentes corruptas pueden hacer que Unity falle, usted puede encontrar archivos

- 300 -
daados siguiendo estos pasos:

En Windows:

1.Abra la carpeta de fuentes (fonts) de su computador, ubicado en la carpeta


Windows.

2.Seleccione Details desde la Vista del men.

3.Revise la columna de Size (tamao) por fuentes con tamao 0, que indica un
archivo con problema.

4.Borre las fuentes corrompidas y vulvalas a instalar.

En MacOS:

1.Ejecute su aplicacin Font Book.

2.Seleccione todas las fuentes.

3.Abra el men File y escoja Validate Fonts, las fuentes con problemas sern
mostradas como invlidas.

4.Borre las fuentes corrompidas y vulvalas a instalar.

5.El sistema puede tener recursos restringidos, por ejemplo corriendo en una
maquina virtual. Use el Task Manager para encontrar procesos consumiendo bastante
memoria.

Proyecto o Instalacin Corrupta


Unity puede intentar abrir un proyecto que est corrupto, esto puede incluir el
proyecto ejemplo por defecto. En dado caso, renombre o mueva la carpeta del
proyecto. Despus de que Unity comience correctamente, puede restaurar la carpeta
del proyecto si desea.

En el evento de una instalacin corrupta, usted puede que tenga que reinstalar Unity -
vea las instrucciones abajo.

En Windows, puede haber problemas como errores de instalacin, corrupcin de


registro, conflictos, etc. Por ejemplo, el error 0xC0000005 significa que el programa ha
intentado acceder a memoria que no debera. Si usted ha agregado nuevos
controladores o hardware recientemente, retire y remplace el hardware para
determinar si es el causante del problema. Ejecute el software de diagnstico y revise
informacin acerca de solucionar los problemas(trouble-shooting)del sistema

- 301 -
operativo.

Rendimiento y Fallas
Si el editor corre lentamente o falla, particularmente en construcciones, esto puede
ser causado por todos los recursos del sistema disponibles siendo consumidos. Cierre
todas las otras aplicaciones cuando construya el proyecto. Limpie el sistema usando
sus utilidades, y consulte el Task Manager (Windows) o Activity Monitor (MacOS) para
buscar si hay processos usando hartos recursos, por ejemplo memoria. Algunas veces
el software de proteccin de virus puede disminuir o hasta bloquear el sistema de
archivos con su proceso de escaneo.

Perdida del Proyecto


Hay muchos factores que pueden destruir un proyecto, usted debera realizar
constantemente una copia de seguridad de sus proyectos para prevenir
accidentes desafortunados. Cuando est en MacOs, active el TimeMachine usando un
disco duro externo reservado para este nico propsito. Despus de una perdida
usted puede intentar cualquier de las utilidades para recuperar archivos que existan,
pero algunas veces esto es irreversible.

Re-instalacin
Siga estos paso para reinstalar el editor:

1.Desinstale Unity. Cuando se est en MacOs, arrastre la aplicacin de Unity a la


caneca.

2.Borre estos archivos si estn presentes:

3.Windows:

4.%AllUsersProfile%\Unity\ (typically C:\ProgramData\Unity)

5.MacOS:

6./Library/Application Support/Unity/

7.Reinicie el computador.

8.Descargue la ltima versin desde nuestra pgina web, ya que su instalacin


original puede estar corrupta: http://unity3d.com/unity/download/archive

- 302 -
9.Reinstale Unity.

- 303 -
Desarrollo Avanzado

Esta seccin cubre las tcnicas de desarrollo ms avanzadas, la cual ser til para
desarrolladores y equipos quines estn cmodos con lo bsico de desarrollar en
Unity.

Los temas en esta seccin le dan un control ms poderoso sobre trabajar con escena,
manejar assets, y la racionalizacin de su proyecto.

- 304 -
La ventana del Profiler (perfilador)
El Profiler de Unity le ayuda a usted optimizar su juego. Este le reporte qu tanto
tiempo se est gastando en varias reas de su juego. Por ejemplo, puede reportar el
porcentaje de tiempo gastado en renderizando, animandol o en la lgica de su juego.

Usted puede jugar su juego en el Editor con el Profiling prendido, y ste va a grabar
los datos de rendimiento. La ventana del Profiler luego muestra los datos en una linea
de tiempo, para que usted pueda ver los frames o reas que que toman ms tiempo
que otras. Al hacer click en cualquier parte de la linea de tiempo, la seccin inferior de
la ventana del Profiler va a mostrar informacin detallada para el frame seleccionado.

Tenga en cuenta que profiling tiene que instrumentar su cdigo. Esta instrumentacin
tiene un impacto pequeo en el rendimiento de su juego. Tpicamente, esta
sobrecarga es lo suficiente pequea para no afectar la framerate (velocidad de
frames) del juego. Cuando utilice el profiling es tpico considerar solo las relaciones (o
porcentaje) del tiempo gastado en ciertas reas, Tambin, para mejorar el enfoque de
rendimiento de esas partes del juego que consumen la mayora de tiempo. Compere
los resultados de profiling antes y despus de cambios en el cdigo y determine las
mejoras que usted mide. Algunos cambios que usted hace para mejorar el
rendimiento podran tener un efecto negativo en el frame rate (velocidad de frames);
consecuencia inesperadas de optimizacin de cdigo debera esperarse.

Los detalles acerca de la ventana del Profiler son descritos en la siguiente pgina.

Ver tambin
La pgina Optimizing Graphics Performance.

Webplayer (Reproductor Web)


Para el profiling del webplayer, siga estos pasos:

1.Marque la casilla de verificacin Development Build en el dialogo de los Build Settings


(Ajustes de Construccin) de Unity y tambin abra la ventana del Profiler antes de
comenzar la construccin.

2.Cuando el juego est corriendo en el webplayer (reproductor web), asegrese de


que el Release Channel est configurado a Development. Haga click alt+derecho en el

- 305 -
webplayer (reproductor web) para abrir el men de la seccin del release channel.

3.Seleccione OSXWebPlayer(YOURCOMPUTERNAME) o WindowsWebPlayer(YOURCOMPUTE


RNAME) como sea apropiado del men despegable Active Profiler de la Ventana del
Profiler.

iOS
Un profiling remoto puede ser activado en dispositivos iOS siguiendo estos pasos:

1.Conecte su dispositivo iOS a su red WiFI (Red WiFi local/adhoc es utilizada por el
profiler para enviar datos de profiling del dispositivo al Editor de Unity)

2.Marque la casilla de verificacin Autoconnect Profiler en el dialogo de los build


settings (ajustes de construccin) de Unity.

3.Adjunte su dispositivo a su Mac va un cable, marque la casilla de verificacin


Development Build en el dialogo de los build settings (ajustes de construccin) de
Unity, y presione Build & Run en el Editor de Unity.

4.Cuando la app se ejecute en el dispositivo abra la ventana del profiler en el Editor de


Unity (Window->Profiler).

Si usted est usando un firewall, usted necesita asegurarse que los puertos 54998 a
55511 estn abiertos en las reglas de salida del firewall - estos son los puertos
utilizados por Unity para un profiling remoto.

Tenga en cuenta: A veces el Editor de Unity no podr auto-conectarse al dispositivo.


En tales casos, la conexin del profiler puede ser iniciada desde el men
despegable Active Profiler de la Ventana del Profiler al seleccionar el dispositivo
apropiado.

Android
El profiling remoto puede ser activado en dispositivos Android a travs de dos
diferentes caminos : WiFi o ADB.

Para un profiling con WiFi, siga los siguientes pasos:

1.Asegrese de desactivar Mobile Data(datos mviles) en su dispositivo Android.

2.Conecte su dispositivo Android a su red WiFi.

3.Adjunte su dispositivo a su Mac/PC va un cable, marque las casillas de verificacin

- 306 -
Development Build y Autoconnect Profiler en el dialogo de los build settings
(ajustes de construccin) de Unity, y presione Build & Run en el Editor de Unity.

4.Cuando la app se ejecute en el dispositivo, abra la ventana del profiler en el Editor


de Unity (Window->Profiler).

5.Si el Editor de Unity falla para auto-conectarse al dispositivo, seleccione el


dispositivo apropiado desde el men despegable Active Profiler de la Ventana del
Profiler. Tenga en cuenta: El dispositivo Android y computador host (corriendo el
Editor de Unity) deben ambos estar en la misma subnet para que la deteccin del
dispositivo funcione.

Para el profiling ADB, siga estos pasos:

Adjunte su dispositivo a su Mac/PC va un cable y asegrese de que ADB reconozca el


dispositivo (i.e. se muestra en la lista adb devices).

Marque la casilla de verificacin Development Build en el dialog de los build settings


(ajustes de construccin) de Unity, y presione Build & Run.

Cuando la app se ejecute en el dispositivo, abra la ventana del profiler en el Editor de


Unity (Window->Profiler)

Seleccione AndroidProfiler(ADB@127.0.0.1:54999) del men despegable Active


Profiler de la ventana del Profiler. Tenga en cuenta: El editor de Unity va a
automticamente crear un tnel adb para su aplicacin cuando presione Build &
Run. Si usted quiere profile (perfilar) otra aplicacin o reiniciar el servidor adb usted
tiene que configurar este tnel manualmente. Para hacer esto, abra la ventana del
Terminal/ CMD prompt e ingrese:
adb forward tcp:54999 localabstract:Unity-{insert bundle identifier here}
Tenga en cuenta: La entrada en el men despegable es solamente visible cuando el
objeto destino seleccionado sea Android.

Si usted est usando un firewall, usted necesita asegurarse que los puertos 54998 a
55511 estn abiertos en las reglas de salida del firewall - estos son los puertos
utilizados por Unity para un profiling remoto.

- 307 -
Ventana del Perfilador(Profiler window)

- 308 -
Adjuntando a Reproductores de Unity
Para perfilar(profile) su juego corriendo en otro dispositivo o un reproductor
corriendo en otro computador, es posible conectar el editor a ese otro reproductor. El
despegable Active Profiler va a mostrar todos los jugadores corriendo en la red local.
Estos jugadores son identificados por el tipo de reproductor y el nombre del anfitrin
corriendo el reproductor iPhonePlayer (Toms iPhone). Para poderse conectar a un
reproductor, el reproductor debe ser ejecutado con la casilla de
verificacin Development Build encontrada en el dilogo Build Settings . Desde aqu
es tambin posible hacer tick a la casilla de verificacin para hacer que el Editor y el
Reproductor Autoconnect (auto-conecten) en el inicio.

- 309 -
Controles del Profiler

Los controles del Profiler estn en la barra de herramientas en la parte superior de la


ventana. Use estos para activar y desactivar el profiling, navegar a travs de los
frames perfilados y as. Los controles de Transporte estn en el extremo derecho de la
barra de herramientas. Tenga en cuenta que cuando el juego est corriendo y el
profiler est colectando datos, haciendo click en cualquiera de estos controles de
transporte va a pausar el juego. Los controles van al primer cuadro guardado, pasa un
cuadro atrs, pasa un frame adelante y van al ltimo frame respectivamente. El
profiler no mantiene todos los frames guardados, entonces la nocin del primer frame
realmente debera ser entendida como el frame ms antiguo que an se conserva en
la memoria. El botn del transport current (actual) causa que la ventana de
estadsticas del profile muestre datos recolectados en tiempo real. El men
emergente Active Profiler le permite seleccionar si el profiling (perfilamiento) debe ser
hecho en el editor o en un reproductor a parte (por ejemplo, un juego que se ejecuta
en un dispositivo iOS conectado).

Perfilamiento Profundo (Deep Profiling)


Cuando prenda Deep Profile, todo su cdigo script es perfilado - eso es, todas las
funciones llamadas son grabadas. Esto es til para saber exactamente dnde se est
gastando ms tiempo en el cdigo de su juego.

Tenga en cuenta que Deep Profiling incurre una gran sobrecarga y usa mucha
memoria, y como un resultado su juego va a correr significantemente ms lento
mientras est perfilando(profiling). Si usted est usando un cdigo script complejo, el
Deep Profiling puede que no sea para nada posible. Deep Profiling debera trabajar lo
suficientemente rpido para juegos pequeos con un scripting simple. Si usted
encuentra que Deep Profiling su juego entero causa la velocidad de frames caer lo
suficiente para que su juego apenas corra, usted debera considerar no usar este
acercamiento, y ms bien utilizar el acercamiento descrito abajo. Usted puede
encontrar Deep Profiling ms til mientras usted est diseando su juego y
decidiendo cmo es la mejor manera de implementar las caractersticas claves. Tenga
en cuenta que para juegos grandes Deep Profiling puede causar que Unity se quede
sin memoria y por esta razn deep profiling puede no ser posible.

Manualmente perfilando sus bloques de cdigo script va a tener una menor

- 310 -
sobrecarga en vez de usar Deep Profiling. Use estas funciones de
scripting Profiler.BeginSample y Profiler.EndSample para habilitar y deshabilitar el
perfilamiento alrededor de secciones de cdigo.

Mirar el Tiempo de Sincronizacin


Cuando se corra a una velocidad de cuadro fija o se corra en una sincronizacin con el
vertical blank, Unity graba el tiempo de espera en Wait For Target FPS. Por defecto
esta cantidad de tiempo no es mostrada en el perfilador. Para ver cunto tiempo se
gasta esperando, usted puede activar View SyncTime. Esto tambin es una medida
de cunto espacio para el encabezado tiene antes de pierda cuadros.

Linea de Tiempo del Perfilador

La parte superior de la ventana del perfilador muestra los datos de rendimiento en el


tiempo. Cuando usted corre un juego, la informacin es guardada en cada cuadro, y la
historia de los ltimos cientos de cuadros se muestra. Haciendo click en un cuadro en
particular va a mostrar sus detalles en la parte inferior de la ventana. Los detalles
diferentes son mostrados dependiendo de cul rea de la linea del tiempo est
actualmente seleccionada.

La escala vertical de la linea del tiempo es administrada automticamente y va


intentar llenar el espacio vertical de la ventana. Tenga en cuenta que para obtener
ms detalles de digamos del rea del uso del CPU usted puede quitar las reas de
Memory y Rendering. Adems, el divisor entre la lnea de tiempo y el rea de
estadsticas se puede seleccionar y arrastrar hacia abajo para aumentar el rea de la
pantalla utilizada para la grfica de la linea del tiempo.

La linea de tiempo consiste en varias reas: El uso del CPU, Rendering y Memory.
Estas reas pueden ser quitadas al hacer click en el botn de cerrar en el panel, y re-
agregadas nuevamente usando el despegable Add Area en la barra de los controles del
perfilador.

Tenga en cuenta que los cuadrados coloreados en el rea de la etiqueta pueden


controlar si se muestra la lnea de tiempo asociada o no. Para quitar una muestra de
la pantalla haga click en la tecla de color. La tecla se atenuar, y los datos sern
removidos de la grfica. Esto puede ser til para identificar la causa de los picos de la
grfica de la CPU, por ejemplo.

- 311 -
- 312 -
rea de Uso del CPU(CPU Usage Area)

El rea de Uso del CPU muestra dnde el tiempo es gastado en su juego. Cuando es
seleccionado, el panel inferior muestra informacin jerrquica de tiempo para el
frame seleccionado.

Modo Jerrquico: Muestra informacin jerrquica de tiempo.

Modo de Grupo Jerrquico: Agrupa informacin de tiempo en grupos lgicos


(Rendering, Physics, Scripts etc.). Porque los hijos de cualquier grupo pueden estar en
un grupo diferente (e.g. algunos scripts pueden llamar funciones de renderizacin), el
porcentaje del tiempo de grupo a menudo se aade a ms de 100%. (Esto no es un
bug)

La manera en que el grfico del CPU es apilado puede ser reordenado simplemente
arrastrando las etiquetas del grfico arriba y abajo.

Seleccionando Items Individuales


Cuando un tem es seleccionado en el panel inferior, su contribucin a la grfica del
CPU es subrayada (y el resto se atenan). Haciendo click en el elemento tem lo de-

- 313 -
selecciona.

Render.OpaqueGeometry es seleccionado y su contribucin es subrayada en la


grfica.

En la informacin jerrquica de tiempo, el tiempo de uno mismo (self time) se refiere


a la cantidad de tiempo gastado en una funcin en particular no incluyendo el tiempo
gastado llamando sub-funciones. En la foto de pantalla de arriba, pro ejemplo 41.1%
del tiempo es gastado en la funcin Camera.Render. Esta funcin hace mucho trabajo
y llama varias funciones de dibujo y de culling. Excluyendo todas estas funciones solo
un 2.1% del tiempo es gastado en la funcin Camera.Render. Las columnas Time ms y
Self ms muestran la misma informacin, pero presentada en mili-segundos. Por lo
que, Camera.Render toma solo 0.01ms, pero incluyendo todas las funciones que
llama, 0.21 ms son consumidos. La columna GC Alloc muestra qu tanta memoria ha
sido asignada en el frame actual, el cual ser coleccionado despus por el recolector
de basura (garbage collector). Al disear su cdigo para mantener este valor en cero,
usted puede evitar que el Garbage Collector (recolector de basura) de causar
contratiempos en su framerate (velocidad de frames).

La seccin Others del perfilador del CPU graba el total de todas las reas que no caen
en Renderer, Scripts, Physics, Garbage Collection o VSync. Esto incluye Animacin, AI,
Audio, Particles, Networking, Loading y PLayerLoop.

- 314 -
Physics Markers (Marcadores de fsica)
La descripcin a continuacin proporciona una breve resea de lo que cada de los
varios marcadores de alto nivel de fsica del profiler (high level physics profiler)
significa:

Physics.Simulate: Llamado desde FixedUpdate. Esto actualiza el estado actual de


fsica al instruir PhysX en correr su simulacin.

Physics.Processing: Llamado desde FixedUpdate. Esto es dnde todos los trabajos


de fsica sin-cloths son procesados. Expandiendo este marcador va a mostrar un
detalle de bajo nivel del trabajo que se est haciendo internamente en PhysX.

Physics.ProcessingCloth: Llamado desde FixedUpdate. Esto es dnde todos los


trabajos de fsica de cloth son procesados. Expandiendo este marcador va a mostrar
un detalle de bajonivel del trabajo que se est haciendo internamente en PhysX.

Physics.FetchResults: Llamado desde FixedUpdate. Esto es dnde los resultados de


la simulacin de fsica son colectados desde PhysX.

Physics.UpdateBodies: Llamado desde FixedUpdate. Esto es dnde todos los


cuerpos de fsica tienen sus posiciones y rotaciones actualizadas al igual que dnde
los mensajes que comunican estas actualizaciones son enviados.

Physics.ProcessReports: Llamado desde FixedUpdate. Este escenario es ejecutado


una vez que el fixed update de fsica haya concluido y es dnde todos los varios
escenarios de la respuesta de los resultados de la simulacin son procesados. Los
Contactos, rupturas de articulaciones y triggers son actualizados e informados aqu.
Hay cuatro sub-escenarios distintos:

Physics.TriggerEnterExits: Llamado desde FixedUpdate. Aqu es dnde los eventos


OnTriggerEnter y OnTriggerExit son procesados.

Physics.TriggerStays: Llamado desde FixedUpdate. Aqu es dnde eventos


OnTriggerStay son procesados.

Physics.Contacts: Llamado desde FixedUpdate. Aqu es dnde los eventos


OnCollisionEnter, OnCollisionExit y OnCollisionStay son procesados.

Physics.JointBreaks: Llamado desde FixedUpdate. Aqu es dnde las actualizaciones


y mensajes relacionados a articulaciones (joints) siendo rotas es son procesados.

Physics.UpdateCloth: Llamado desde Update. Aqu es dnde actualizaciones

- 315 -
relacionadas a Cloth y sus skinned meshes son hechos.

Physics.Interpolation: Llamado desde Update. Este escenario trata con la


interpolacin de posiciones y rotaciones para todos los objetos de fsica.

Advertencias de Rendimiento
Hay algunos problemas de rendimiento comunes que el profiler es posible de
detectar y advertirle sobre ello. Estas advertencias aparecen en la columna warning
del panel inferior, cuando vea el CPU Usage.

Una advertencia del profiler indicando que static colliders han sido movidos.

Los problemas especficos que el profiler puede detectar son:

Static Collider.Modify (Costo caro de retraso)

Static Collider.Move (Costo caro de retraso)

Static Collider.Create (Costo caro de retraso)

Animation.DestroyAnimationClip [Triggers RebuildInternalState]

Animation.AddClip [Triggers RebuildInternalState]

Animation.RemoveClip [Triggers RebuildInternalState]

- 316 -
Animation.Clone [Triggers RebuildInternalState]

Animation.Deactivate [Triggers RebuildInternalState]

En la foto de pantalla de arriba, el profiler est mostrando la advertencia Static


Collider.Move . La columna warning muestra que esta advertencia ha sido activada 12
veces en el frame actual. El trmino Delayed Cost (Costo de retraso) significa que
aunque la entrada en el profiler puede mostrar un bajo costo (en este caso de
0.00ms) la accin puede activar una operacin ms cara ms adelante.

- 317 -
rea de Renderizacin(Rendering Area)

El rea de Renderizacin muestra estadsticas de renderizacin. El nmero de


Batches, SetPass Calls, Triangles y Vertices renderizados es mostrado grficamente en
la linea del tiempo. El panel inferior muestra ms estadsticas de renderizacin y stos
se asemejan ms a las que se muestran en la ventana del GameView Rendering
Statistics.

- 318 -
rea de Memoria(Memory Area)
Hay dos modos en los cuales usted puede inspeccionar el uso de memoria de su
aplicacin. Esto es seleccionado en el despegable en la parte superior del panel
inferior.

Vista Simple(Simple View)


El modo simple muestra cmo la memoria es usada a travs de Unity en un nivel
superior en tiempo real en una funcin por cuadro.

Unity reserva grupos de memoria para unas asignaciones con el fin de evitar pedirle al
OS por la memoria con demasiada frecuencia. Esto se muestra como una cantidad
reservada y cunto se usa. Las reas cubiertas por esto son:

Unity La cantidad de memoria rastreada por las asignaciones en el cdigo nativo de


unity

Mono El tamao de la pila (heap) completa y el tamao de la pila (heap) utilizada por
Managed Code - en esta memoria se realiza recoleccin de basura.

GfxDriver El monto estimado de la memoria que el controlador est usando en


Textures, Rendertargets, shaders y Meshdata

FMOD El uso de memoria estimado para los controladores de Audio

Profiler La memoria usada para la profilerdate Los nmeros que se muestran no van

- 319 -
a mostrar la misma cantidad que el Task Manager o el Activity Monitor, porque hay
algunos usos que no tienen seguimiento por el perfilador de memoria. Esto incluye
memoria usada por algunos controladores y memoria usada por cdigo ejecutable.

Las estadsticas de memoria son mostradas para algunos de los tipos de asset/object
ms comunes e incluyen el conteo y la memoria usada (memoria principal y de video)

Textures

Meshes

Materials

Animations

Audio

Object Count es el nmero total de Objetos que se crean. Si este nmero crece a
travs del tiempo entonces esto significa que su juego est creando algunos objetos
que nunca se destruyen.

Vista detallada(Detailed View)


El Detailed View, le va a permitir tomar una foto instantnea del estado actual. Use el
botn Take Sample para capturar un uso de memoria detallado. Obtener esta
informacin toma un tiempo, entonces no se debera esperar del Detailed View en dar
detalles en tiempo real. Despus de tomar una muestra, la ventana del perfilador va a
ser actualizada con una vista de rbol en dnde usted puede explorar diferentes usos
de memoria.

- 320 -
Esto mostrar el uso de memoria del asset individual y game object. Tambin
mostrar una razn para un objeto de estar en memoria. La razn puede ser una de
las siguientes:

Referenciado desde el cdigo nativo

Built-in Resources Unity editor resources or Unity default resources

Not Saved Objects marked as DontSave

Scene Memory Game object and components

Other Objects not marked in the above categories

Cuando se est en el editor, hacer click en un objeto de la lista, lo va a llevar al objeto


ya sea en el proyecto o el scene view.

Cuando se perfile en el editor, todos los nmeros mostrados por el perfilador de


memoria son el uso por el editor. Estos sern algo mayores a cuando se ejecutan en
un reproductor, a causa de una sobrecarga del editor. Para nmeros y un uso de
memoria ms preciso para sus aplicacin, utilice la conexin del perfilador para
conectarse al reproductor en ejecucin. Esto le dar el uso actual de su dispositivo.

La memoria reportada bajo System.ExecutableAndDlls es memoria que solo se


puede leer, por lo tanto el OS podra omitir estas pginas en caso de necesidad y
despus re-cargarlas desde el sistema de archivos. Por lo que hace poca presin de
memoria y rara vez contribuye directamente a la decisin del OS de matar la
aplicacin. Tambin, algunas de estas pginas podran estar compartidas con otras
aplicaciones (que estn utilizando el mismo frameworks (macros) ).

- 321 -
rea de Audio(Audio Area)
In the Profiler window there is a pane called Audio. The pane monitors significant
performance meters about the audio system, such as total load and voice counts.
When you highlight the pane, the lower part of the window changes into a detailed
view about various parts of the audio system not covered by the graphs.

Playing Sources son el total de fuentes de reproduccin en la escena en un frame


especfico. Monitorear esto para ver si el audio est sobrecargado.

Paused Sources es el total de las fuentes pausadas en la escena en un frame


especfico.

Audio Voice es el nmero actual de voces de audio (Canales FMOD) usadas.


PlayOneShot es el uso de voces no mostradas en los Playing Sources.

Audio Memory es el total de RAM usado por el motor de audio.

El uso de CPU se puede ver en la parte inferior. Monitorear esto para ver si el audio en
s est tomando mucho CPU.

Additionally, by clicking the Channels / Groups / Channels and groups buttons detailed
per-frame logging of sound events can be obtained and scrubbed, just like the
renderer and memory graphs. The rows in the frame log reveal information about
which audio sources played which clips, the volume at which these were played, the
distance to the listener, relative playback time etc. Clicking on one of these rows
highlights the associated audio source and clip in the project browser and hierarchy.

- 322 -
Channel view. When clicking a row first the AudioClip asset is highlighted, then the
AudioSource in the hierarchy that played it.

- 323 -
Channels and groups view. Here the AudioSource that played the sound in the
selected row is highlighted.

- 324 -
Perfilador de Fsica(Physics Profiler)

rea de Fsica (Physics Area)

El rea de fsica muestra las siguientes estadsticas acerca de la fsica en la escena:-

Active Rigidbodies es el nmero de rigidbodies que no estn actualmente durmiendo


(ie, se estn moviendo o simplemente vienen a descansar).

Los Sleeping Rigidbodies son el nmero de rigidbodies que estn completamente


descansando y por lo tanto no necesitan ser actualizados activamente por el motor de
fsica (mirar Rigidbody Sleeping para ms detalles).

Number of Contacts es el nmero total de puntos de contacto entre todos los


colliders en la escena.

Static Colliders es el nmero de colliders anexados a objetos que no sean rigidbody


(ie, objetos que nunca se mueven bajo fsica).

Dynamic Colliders es el nmero de colliders anexados a objetos rigidbody (ie, objetos


que s se mueven bajo fsica).

- 325 -
rea GPU (GPU Area)

El perfilador GPU es similar al perfilador CPU con las diversas contribuciones al


tiempo de renderizacin mostrado como una jerarqua en el panel inferior. Al
seleccionar un elemento de la jerarqua aparecer una ruptura en el panel a la
derecha.

Por favor tenga en cuanta que en Mac, el perfilado GPU est solo disponible bajo OSX
10.9 Mavericks y versiones posteriores.

- 326 -
Multi Scene Editing (Edicin de varias
escenas)
El Multi Scene Editing le permite a usted tener mltiples escenas abiertas en el editor
simultneamente, y hace que sea ms fcil el manejo de escenas en tiempo de
ejecucin.

La habilidad de tener mltiples escenas abiertas en el editor le permite a usted crear


grandes mundos de streaming y mejora el flujo de trabajo cuando se colabora en la
edicin de escenas.

Esta pgina describe:

La integracin multi scene editing en el Editor

El scripting del Editor y los APIs del scripting en tiempo de ejecucin

Problemas actualmente conocidos

En el Editor
Para abrir una nueva escena y agregarla a la lista actual de escenas en la jerarqua,
puede seleccionar Open Scene Additive en el men de contexto para un asset de
escena, o arrastre una o ms escenas desde la ventana del Proyecto a la ventana de
Jerarqua.

Open Scene Additive will add the selected scene asset to the current scenes shown in

- 327 -
the hierarchy

When you have multiple scenes open in the editor, each scenes contents are
displayed separately in the hierarchy window. Each scenes contents appears below a
scene divider bar which shows the scenes name and its save state.

The Hierarchy window showing multiple scenes open


simultaneously

While present in the hierarchy, scenes can be loaded or unloaded to reveal or hide
the gameobjects contained within each scene. This is different
to adding and removing them from the hierarchy window.

The scene dividers can be collapsed in the hierarchy to the scenes contents which
may help you to navigate your hierarchy if you have lots of scenes loaded.

When working on multiple scenes, each scene that is modified will need its changes
saved, so it is possible to have multiple unsaved scenes open at the same time.
Scenes with unsaved changes will have an asterisk shown next to the name in the
scene divider bar.

- 328 -
An asterisk in the scene divider indicating this scene
has unsaved changes

Each Scene can be saved separately via the context menu in the divider bar. Selecting
Save Scene from the file menu or pressing Ctrl/Cmd + S will save changes to all open
scenes.

El men de contexto en el las barras divisoras de la escena le permiten a usted


realizar otras acciones en la escena seleccionada.

The Scene Divider Menu For Loaded Scenes:

Esto le permite a usted especificar en qu


escena nuevos Game Objects son
Set Active Scene
creados/instanciados. Siempre tiene que haber
una escena marcada como la escena activa
Guarda los cambios de la escena seleccionada
Save Scene
solamente.
Guarda la escena seleccionada (junto con otras
Save Scene As modificaciones actuales) como un nuevo asset
de Escena.
Save All Guarda cambios a todas las escenas.
Descarga la escena, pero mantiene la escena
Unload Scene
en la ventana de Jerarqua.
Descarga y quita la escena de la ventana de
Remove Scene
jerarqua.
Select Scene Asset Selecciona el asset de escena en la ventana del

- 329 -
Proyecto.
Proporciona un sub-men permitindole crear
GameObjects en la escena seleccionada. El
GameObject men refleja los items disponibles para crear
en el men GameObject principal de Unity.
(Mostrado abajo)

The GameObject sub-menu


in the Scene divider bar menu

The Scene Divider Menu For Unloaded Scenes:

Load Scene Carga el contenido de la escena


Remove Scene Quita la escena de la ventana de Jerarqua.
Selecciona el asset de escena en la ventana del
Select Scene Asset
Proyecto.

Baking Lightmaps with Multiple Scenes


To bake Lightmap data for multiple scenes at once, you should open the scenes that
you want to bake, turn off Auto mode in the Lighting Window, and click the Build
button to build the lighting.

The input to the lighting calculations is the static geometry and lights from all scenes.
Therefore shadows and GI light bounces will work across all scenes. However, the

- 330 -
lightmaps and realtime GI data are separated out into data that is loaded / unloaded
separately for each scene. The lightmaps and realtime GI data atlases are split
between scenes. This means lightmaps between scenes are never shared and they
can be unloaded safely when unloading a scene. Lightprobe data is currently always
shared and all lightprobes for all scenes baked together are loaded at the same time.

Alternatively, you can automate building lightmaps for multiple scenes by using
the Lightmapping.BakeMultipleScenes function in an editor script.

Baking Navmesh data with Multiple Scenes


To make Navmesh data for multiple scenes at once, you should open the scenes that
you want to bake, and click the Bake button in the Navigation Window. The navmesh
data will be baked into a single asset, shared by all loaded scenes. The data is saved
into the folder matching the name of the current active scene (e.g.
ActiveSceneName/NavMesh.asset). All loaded scenes will share this navmesh asset.
After baking the navmesh, the scenes affected should be saved to make the scene-to-
navmesh reference persistent.

Alternatively, you can automate building navmesh data for multiple scenes by using
the NavMeshBuilder.BuildNavMeshForMultipleScenes function in an editor script.

Playmode
In Playmode, whith multiple scenes in the Hierarchy, an additional scene will show up
called DontDestroyOnLoad.

Prior to Unity 5.3, any objects you would instantiate in Playmode marked as
DontDestroyOnLoad would still show up in the hierarchy. These objects are not
considered part of any scene but for Unity to still show the objects, and for you to
inspect them, these objects are now shown as part of the special DontDestroyOnLoad
scene.

You do not have access to the DontDestroyOnLoad scene and it is not available at
runtime.

Scene-specific settings
A number of settings are specific to each scene. These are:

RenderSettings and LightmapSettings (both found in the Lighting Window)

- 331 -
NavMesh settings

Scene settings in the Occlusion Culling Window.

The way it works is that each scene will manage its own settings and only settings
associated with that scene will be saved to the scene file.

If you have multiple scenes open, the settings that are used for rendering and
navmesh are the ones from the active scene. This means that if you want to change
the settings of a scene, you must either open only one scene and change the settings,
or make the scene in question the active scene and change the settings.

When you switch active scene in the editor or at runtime, all the settings from the new
scene will be applied and replace all previous settings.

Scripting
Editor Scripting
For editor scripting we provide a Scene struct and EditorSceneManager API and
a SceneSetup utility class.

The Scene struct is available both in the editor and at runtime and contains a handful
of read-only properties relating to the scene itself, such as its name and asset path.

The EditorSceneManager class is only available in the editor. It is derived from


SceneManager and has a number of functions that allow you to implement all the
Multi Scene Editing features described above via editor scripting.

The SceneSetup class is a small utility class for storing information about a scene
currently in the hierarchy.

The Undo and PrefabUtility classes have been extended to support multiple scenes.
You can now instantiate a prefab in a given scene using
[PrefabUtility.InstantiatePrefab], and you can move objects to the root of a scene in an
un-doable manner using (Undo.MoveGameObjectToScene)
[ScriptRef:Undo.MoveGameObjectToScene]

NOTE: To use Undo.MoveGameObjectToScene, you must make sure the GameObject is


already at the root of the scene it is currently in.

Runtime Scripting
For scripting at Runtime, the functions to work with multiple scenes such

- 332 -
as LoadScene and UnloadScene are found on the SceneManager class.

Notes
In the File menu Save Scene As will only save the active scene. Save Scene will save all
modified scenes, including prompting you to name the Untitled scene if it exists.

Creating a new Scene asset from the Project


windows Create menu

Tips and Tricks


It is possible to add a scene to the hierarchy while keeping it its unloaded state by
holding Alt while dragging. This gives you the option to load the scene later, when
desired.

New scenes can be created using the Create menu in the project window. New scenes
will contain the default setup of Game Objects.

To avoid having to set up your hierarchy every time you restart unity or to make it
easy to store different setups you can
use EditorSceneManager.GetSceneManagerSetup to get a list of SceneSetup objects
which describes the current setup. You can then serialize these into a ScriptableObject
or something else along with any other information you might want to store about
your scene setup. To restore the hierarchy simply recreate the list of SceneSetups and
use EditorSceneManager.RestoreSceneManagerSetup.

- 333 -
At runtime to get the list of loaded scenes simply get sceneCount and iterate over the
scenes using GetSceneAt.

You can get the scene a GameObject belongs to through GameObject.scene and you
can move a GameObject to the root of a scene
using SceneManager.MoveGameObjectToScene.

It is recommended to avoid using DontDestroyOnLoad to persist manager


GameObjects that you want to survive across scene loads. Instead, create a manager
scene that has all your managers and use SceneManager.LoadScene(<path>,
LoadSceneMode.Additive) and SceneManager.UnloadScene to manage your game
progress.

Problemas conocidos:
Cross-scene references are not supported but also not prevented.

Occlusion culling data from Umbra can still not be loaded additively.

- 334 -
Cargando recursos en tiempo de ejecucin
En algunas situaciones, es til hacer que un asset sea disponible a un proyecto sin
necesidad de cargarlo como parte de una escena. Por ejemplo, puede haber un
personaje u otros objetos que aparezcan en cualquier escena del juego pero que
sern utilizadas infrecuentemente (esto podra ser una caracterstica secreta, un
mensaje de error o una alerta de un puntaje mximo, digamos). Adicionalmente,
usted podra incluso querer cargar los assets de un archivo separado o URL para
reducir el tiempo de descarga inicial o permitir el intercambio de contenido de juegos.

Unity soporta Resource Folders en el proyecto para permitir que el contenido sea
suministrado en el archivo principal del juego, pero no ser cargado hasta que sea
solicitado. Usted puede tambin crear Asset Bundles. Estos son archivos
completamente separados de un archivo del juego principal que contiene assets en
ser accedidos por el juego en demanda de un archivo o URL.

Asset Bundles
Un Asset Bundle es una coleccin externa de assets. Usted puede tener muchos Asset
Bundles y por lo tanto tener diferentes colecciones externas de assets. Estos archivos
existen afuera del reproductor de Unity construido, usualmente sentando en un
servidor web para que los usuarios finales sean accedidos de manera dinmica.

Para construir un Asset Bundle, usted llama BuildPipeline.BuildAssetBundles() desde


adentro de un script del editor. En los argumentos, usted especifica un arreglo
de Objects en ser incluidos en el archivo construido, en conjunto con otras opciones.
Esto va a construir un archivo el cual usted puede cargar luego de manera dinmica
en el tiempo de ejecucin al utilizar AssetBundle.LoadAsset().

Resource Folders (Carpetas de Recursos)


La carpeta de recursos son colecciones de assets que son incluidos en el reproductor
de Unity construido, pero no son necesariamente enlazados a cualquier GameObject
en el inspector.

Para colocar cualquier cosa en una Resource Folder (Carpeta de recursos), usted
puede simplemente crear una nueva carpeta dentro del Project View, y nombrar la
carpeta Resources. Usted puede tener mltiples Resource Folders organizadas

- 335 -
diferentemente en su proyecto. Cuando sea que usted quiera cargar un asset de una
de estas carpetas, usted puede llamar Resources.Load().

Si su destino de implementacin es Streaming Web Player, usted puede definir qu


escena va a incluir todo en sus Resource Folders (Carpetas de Recursos). Usted puede
hacer esto en los Player Settings, accesibles vas Edit->Project Settings->Player, la
cola de stream es determinada por el orden de escena de las Build Settings (Ajustes
de Construccin)

Tenga en cuenta:
Todos los assets encontrados en las carpetas Resources y sus dependencias son
almacenados en un archivo llamado resources.assets. Si un asset ya est en uso por
otro nivel es almacenado en el archivo .sharedAssets para ese nivel. Los ajustes de
los Edit -> PlayerSettings First Streamed Leveldeterminan el nivel al cual
los resources.assets sern coleccionados e incluidos en la construccin.

Si un nivel anterior al First streamed Level est incluyendo un asset en una carpeta
Resource, el asset ser almacenado en los assets para ese nivel. si es incluidos
despus, el nivel va a referenciar el asset del archivo resources.assets.

Solamente los assets que estn almacenados en la Resources folder pueden ser
accedidos a travs de Resources.Load(). Sin embargo, hay ms assets que podran
terminar en el archivo resources.assets ya que son dependencias. (Por ejemplo un
Material en la carpeta Resources podra referenciar una Textura afuera de la carpeta
Resources)

Descarga de Recursos
Usted puede descargar recursos de un AssetBundle al llamar AssetBundle.Unload(). Si
usted pasa true para el parmetro unloadAllLoadedObjects, ambos el objeto
mantenido internamente por el AssetBundle y los cargados del AssetBundle
utilizando AssetBundle.LoadAsset()](../ScriptReference/AssetBundle.LoadAsset.html)
ser destruido y la memoria utilizado por el bundle ser soltada.

A veces usted puede preferir cargar un AssetBundle, instanciar los objetos deseados y
soltar la memoria utilizada por el bundle mientras mantiene los objetos alrededor. El
beneficio es que usted libra memoria para otras tareas, por ejemplo, cargar otro
AssetBundle. En este escenario usted podra pasar false como el parmetro. Despus
de que el bundle es destruido usted no ser capaz de cargar los objetos de este no

- 336 -
ms.

Si usted quiere destruir objetos de escena cargados utilizando Resources.Load() antes


de que cargar otro nivel, llame Object.Destroy() en estos. Para soltar los assets,
utilice Resources.UnloadUnusedAssets().

- 337 -
Plugins
En Unity, usted normalmente utiliza scripts para crear funcionalidad pero usted puede
tambin incluir cdigo creado afuera de Unity en forma de un Plugin. Hay dos tipos
de plugins que usted puede utilizar en Unity: Managed plugins y Native plugins.

Los Managed plugins son assemblies .NET manejadas creadas con herramientas como
Visual Studio o MonoDevelop. Estos contienen solo cdigo .NET que significa que no
tienen acceso a cualquier caractersticas que no son soportadas por las libreras .NET.
Sin embargo, el cdigo (managed) manejado es accesible a las herramientas .NET
estndar que Unity utiliza para compilar scripts. Por lo tanto hay poca diferencia en el
uso entre cdigo plugin managed (manejado) y cdigo script de Unity, excepto por el
hecho que los plugins son compilados afuera de Unity y entonces la fuente puede que
no est disponible.

Los Native plugins son libreras de cdigo nativo especifico a plataformas. Pueden
acceder a caractersticas como llamados OS y libreras de cdigo de terceros que por
el contrario no estn disponible en Unity. Sin embargo, estas libreras no son
accesibles a las herramientas de Unity en la manera que las libreras managed
(manejadas) lo son. Por ejemplo, si a usted se le olvida agregar un archivo plugin
managed (manejado) al proyecto, usted obtendr mensajes de error de compilacin
estndares. Si usted hace lo mismo con el plugin nativo, usted solamente ver un
reporte de error cuando intente ejecutar el proyecto.

Esta seccin explica cmo crear plugins y utilizarlos en sus proyectos de Unity.

- 338 -
Inspector de Plugins
The Plugin Inspector is used to select and manage target platforms for the plugins in
your project. Simply select a plugin file to view its Inspector.

Inspector para un plugin


llamado CustomConnection

Under Select platforms for plugin, choose which platforms will use the plugin by
checking the appropriate boxes. If you select Any Platform, the plugin will apply to all
platforms, including the Unity editor.

La pestaa Platforms le permite a usted escoger las plataformas que utilizarn el


plugin. Si usted selecciona Any como la plataforma, entonces el plugin ser aplicado a
todas las plataformas, incluyendo el editor de Unity. Una vez usted haya seleccionado
las plataformas, usted puede escoger una opciones adicionales (tipo de CPU,OS
especifico, etc) de la seccin separada Platform Settings. Esta contiene una pestaa
para cada plataforma seleccionada por las casillas de verificacin. La mayora de
plataformas no tienen ajustes o solo un poco (eg, CPU y seleccin OS).

The current list of file extensions that are treated as plugins and display the Plugin
Inspector in the Unity Editor is found

- 339 -
in PluginImporter::CanLoadPathNameFile(). The following file extensions
identify files that are treated as plugins:

.dll

.winmd

.so

.jar

.aar

.xex

.def

.suprx

.prx

.sprx

.rpl

.cpp

.cc

.c

.h

.jslib

.jspre

.bc

.a

.m

.mm

.swift

.xib

Certain folders are treated as a single bundle plugin. No additional plugins are
detected within such folders. The following extensions identify folders that are treated

- 340 -
as bundle plugins:

.framework

.bundle

.plugin

Ajustes Predeterminados
Para hacer una transicin ms fcil de versiones anteriores de Unity, Unity intentar
configurar ajustes de plugin predeterminados, dependiendo en la carpeta dnde los
plugins estn ubicados.

Folder ####Ajustes Predeterminados


El plugin ser configurado solamente
Assets/**/Editor compatible con el editor, no ser utilizado
cuando se construya a una plataforma.
El plugin ser configurado solamente
Assets/**/Editor/(x86 o x86_64 o x64) compatible con el Editor, el valor del CPU
ser asignado dependiendo en la sub-carpeta.
x64 Standalone plugins sern configurados
Assets/Plugins/x86_64(or x64)
como compatibles.
x86 Standalone plugins sern configurados
Assets/Plugins/x86
como compatible.
Plugin ser configurado solamente compatible
Assets/Plugins/Android/(x86 o armeabi o con Android, si la sub-carpeta CPU est
armeabi-v7a) presente, el valor CPU ser configurado
tambin.
Plugin ser configurado solamente compatible
Assets/Plugins/iOS
con iOS.
Plugin ser configurado solo compatible con
Apps de la Windows Store y Windows Phone
8.1, si la sub-carpeta CPU est presente, el
Assets/Plugins/WSA/(x86 o ARM)
valor CPU ser configurado tambin. Nota. La
palabra clave Metro puede ser utilizada en vez
de WSA.
Lo mismo que arriba, un valor SDK adicional
ser configurado, usted tambin puede agregar
Assets/Plugins/WSA/(SDK80 o SDK81 o una sub-carpeta CPU despus. Por razones de
PhoneSDK81) compatibilidad, SDK80 es el mismo que
Win80, SDK81 - Win81, PhoneSDK81 -
WindowsPhone81.
Assets/Plugins/Tizen Plugin ser solamente configurado compatible

- 341 -
Folder ####Ajustes Predeterminados
con Tizen.
Plugin ser solamente compatible con
Assets/Plugins/Xbox360
Xbox360.
Plugin ser compatible solamente con
Assets/Plugins/PSVita
Playstation Vita.
Plugin ser solamente compatible con
Assets/Plugins/PS4
Playstation 4.
Plugin ser solamente compatible con
Assets/Plugins/SamsungTV
Samsung Tv.

Device-specific settings
Ajustes del Editor

Opciones en la pestaa
editor

Por ejemplo, si usted selecciona CPU X86, el plugin ser utilizado en el 32 bit Editor,
pero no ser utilizado en 64 bit Editor.

Si usted selecciona OS Windows, el plugin ser utilizado solamente en el Windows


Editor, pero no ser utilizado por el OS X Editor.

Ajustes Standalone
Ver Stand Alone Player Settings.

Windows Store Apps


Ver:

windowsstore-plugins.html

windowsstore-plugins.html

iOS
When building for Android, folders found with a parent path matching
exactly Assets/Plugins/Android/ are treated as an Android Library plugin folder. They

- 342 -
are then treated in the same way as folders with the special extensions .plugin,
.bundle and .framework.

iOS

Ajustes del plugin iOS, mostrando dependencias del


Framework

- 343 -
Managed Plugins
Usualmente, los scripts se mantienen en un proyecto como los archivos fuente y son
compilados por Unity cuando la fuente cambia. Sin embargo, tambin es posible
compilar un script a una dynamically linked library** (DLL) utilizando un compilador
externo. El DLL resultante puede luego ser agregado al proyecto y las clases que
contiene pueden ser adjuntadas a los objetos como los scripts normales.

Por lo general es ms fcil trabajar con scripts que DLLs en Unity. No obstante, usted
podra tener acceso a cdigo Mono de terceros que es suministrado en forma de un
DLL. Cuando desarrolle su propio cdigo, usted podra utilizar compiladores no
soportados por Unity (F#, por ejemplo) al compilar el cdigo a un DLL y agregndolo a
su proyecto de Unity. Tambin, usted podra querer suministrar cdigo de Unity sin la
fuente (para un producto de la Asset Store, digamos) y un DLL es una manera fcil de
hacer esto.

Creando un DLL
Para crear un DLL, usted primero necesitara un compilador adecuado. No todos los
compiladores que producen cdigo .NET son garantizados a que funcionen con Unity,
por lo que puede ser sabio probar el compilador con algo de cdigo disponible antes
de hacer trabajo significante con este. si el DLL contiene ningn cdigo que depende
en el API de Unity, entonces usted podra simplemente compilarlo a un DLL utilizando
las opciones apropiadas de compilacin. Si usted no quiere utilizar el API de Unity
entonces usted necesitar que los DLLs propios de Unity estn disponibles al
compilador. En Mac, estos estn contenido en el bundle de aplicacin (usted puede
ver la estructura interna del bundle al utilizar el comando Show Package Contents del
men contextual; haga click derecho o ctrl- click en la aplicacin de Unity):-

La ruta a los DLLs de Unity tpicamente sern


/Applications/Unity/Unity.app/Contents/Frameworks/Managed/
En Windows, los DLLs pueden encontrarse en las carpetas que acompaa la
aplicacin de Unity. La ruta tpicamente ser
C:\Program Files\Unity\Editor\Data\Managed
Las opciones exactas para compilar el DLL van a variar dependiendo en el compilador
utilizado. Como ejemplo, la linea de comando para el compilador Mono C#, mcs,
podra verse algo as en Mac OS:-

- 344 -
mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
-target:library ClassesForDLL.cs

Usando la DLL
Una vez compilado, el archivo DLL puede ser simplemente arrastrado al proyecto de
Unity como cualquier otro asset. El asset DLL tiene un triangulo que se dobla que
puede ser utilizado para revelar las clases separadas dentro de la librera. Las clases
que deriven de MonoBehaviour pueden ser arrastradas a los Game Objects como
cualquier script ordinario. Las clases No-MonoBehaviour pueden ser utilizadas
directamente desde otro scripts de una manera usual.

Un DLL doblado con las clases visibles

Gua paso a paso para MonoDevelop y Visual Studio


Esta seccin explica cmo construir e integrar un ejemplo DLL simple con
MonoDevelop y Visual Studio y tambin cmo preparar una sesin de depuracin
para el DLL.

Configurando el proyecto
Primero, abra MonoDevelop o Visual Studio y cree un nuevo proyecto. En
MonoDevelop, usted puede hacer esto al seleccionar File > New > Solutiony luego
escoger C# > Library. En Visual Studio, usted debera seleccionar File > New >
Project y luego escoger Visual C# > Class Library.

Usted luego necesita llenar la informacin para la nueva librera:

Name es el namespace (para este ejemplo utilice DLLTest como el nombre).

Location es la carpeta padre del proyecto.

Solution name es la carpeta del proyecto.

Luego, usted debera agregar referencias a los DLLs de Unity. En Monodevelop, usted
debera abrir el men contextual para References en el explorador de Solution y luego
escoger Edit References. Despus, escoja la opcin .Net Assembly tab > File System
> select file. En Visual Studio, abra el men contextual para References en el

- 345 -
explorador Solution y escoja Add Reference. Luego, escoja la opcin Browse >
Browse > select file.

En este punto, usted tendr la opcin de seleccionar el archivo DLL requerido. En Mac
OSX, el archivo puede encontrarse en
Applications/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll

Program Files\Unity\Editor\Data\Managed\UnityEngine.dll
Para este ejemplo, re-nombre la clase a MyUtilities en el explorador Solution y
remplace su cdigo con el siguiente:
using System;
using UnityEngine;

namespace DLLTest {

public class MyUtilities {

public int c;

public void AddValues(int a, int b) {


c = a + b;
}

public static int GenerateRandom(int min, int max) {


System.Random rand = new System.Random();
return rand.Next(min, max);
}
}
}
Con este cdigo en su lugar, construya el proyecto para generar el archivo DLL con
sus smbolos de depuracin.

Usando la DLL en Unity


Para este ejemplo, cree un nuevo proyecto en Unity y copie el archivo construido
`project folder/bin/Debug/DLLTest.dll a la carpeta Assets. Luego, cree un script C#
llamado Test en los Assets, y remplace su contenido con el siguiente cdigo:
using UnityEngine;
using System.Collections;
using DLLTest;

public class Test : MonoBehaviour {

void Start () {
MyUtilities utils = new MyUtilities();
utils.AddValues(2, 3);
print("2 + 3 = " + utils.c);
}

void Update () {
print(MyUtilities.GenerateRandom(0, 100));

- 346 -
}
}
Cuando usted adjunte este script a un objeto en la escena y presione Play, usted ver
el output del cdigo del DLL en la ventana de la Consola.

Preparando una sesin de depuracin para la DLL


Primero, usted debe preparar los smbolos de depuracin para el DLL. En
MonoDevelop, copie el archivo construido project
folder/bin/Debug/DLLTest.dll.mdb a la carpeta Assets/Plugins. En Visual Studio,
ejecute.
Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe
Despus, abra el script Test en MonoDevelop. Asegrese de que el depurador de
Unity est activado del men Tools (Windows) o el men MonoDevelop-Unity (MacOS).
La opcin que usted necesita de este men es Add-in Manager > Installed tab >
Unity > seleccione Mono Soft Debugger Support de Unity > Enable.

Con esta configuracin completada, usted puede depurar el cdigo que utiliza DLL en
Unity en la manera usual. Ver la seccin Scripting Tools para ms informacin acerca
de la depuracin. y los dos DLLs son llamados UnityEngine.dll y UnityEditor.dll.
mientras los nombres de los DLLs son los mismos para Mac OS. Aqu, la opcin -
r especifica una ruta a la librera en ser incluida en la construccin, en este caso, la
librera UnityEngine. La opcin -target especifica qu tipo de construccin es
requerida; la palabra library (librera) es utilizada para seleccionar una construccin
DLL. Finalmente el nombre del archivo fuente en compilar es ClassesForDLL.cs (se
asume que este archivo est en la carpeta actual de trabajo, pero usted podra
especificar el archivo utilizando una ruta completa si es necesario). Asumiendo que
todo va bien, el archivo DLL resultante va a aparecer cortamente en la misma carpeta
que el archivo fuente. mientras en Windows, la ruta es

Cdigo
en la linea de comandos, pasar project folder\bin\Debug\DLLTest.pdb como
un parmetro. Luego, copie el archivo convertido project
folder\bin\Debug\DLLTest.dll.mdb a Assets/Plugins.

- 347 -
Plugins Nativos
Unity tiene un soporte extensivo para Plugins nativos, los cuales son libreras de
cdigo nativo escrito en C, C++, Objective-C, etc. Los plugins le permiten a su cdigo
del juego (escrigo en Javascript o C#) para llamar funciones de estas libreras. Esta
caracterstica le permite a Unity integrarse con libreras middleware o cdigo de juego
C/C++ existente.

Tenga en cuenta: Por razones de seguridad, los plugins no se pueden utilizar en un


reproductor web.

Para poder utilizar un plugin nativo usted primero necesita escribir funciones en un
lenguaje basado en C para acceder a cualquiera de las caractersticas que usted
necesite y compilarlas a una librera. En Unity, usted tambin va a necesitar crear un
script C# que llama las funciones en un cdigo en la librera nativa.

El plugin nativo debera proporcionar una interfaz simple en C que el script en C#


luego se expone a otros scripts del usuario. Tambin es posible para Unity llamar
funciones exportadas por el plugin nativo cuando ciertos eventos de renderizacin de
bajo-nivel ocurren (por ejemplo, cuando un dispositivo grfico es creado), ver la
pgina Native Plugin Interface para detalles.

Ejemplo
Una librera simple nativa con una sola funcin podra tener cdigo fuente que se ve
as:
float FooPluginFunction () { return 5.0F; }
Parra acceder este cdigo dentro de Unity, usted puede utilizar cdigo como el
siguiente:
using UnityEngine;
using System.Runtime.InteropServices;

class SomeScript : MonoBehaviour {

#if UNITY_IPHONE || UNITY_XBOX360

// On iOS and Xbox 360 plugins are statically linked into


// the executable, so we have to use __Internal as the
// library name.
[DllImport ("__Internal")]

#else

- 348 -
// Other platforms load plugins dynamically, so pass the name
// of the plugin's dynamic library.
[DllImport ("PluginName")]

#endif

private static extern float FooPluginFunction ();

void Awake () {
// Calls the FooPluginFunction inside the plugin
// And prints 5 to the console
print (FooPluginFunction ());
}
}
Tenga en cuenta que cuando utilice Javascript usted va a necesitar utilizar la siguiente
sintaxis, dnde el DLLNAME es el nombre del plugin que usted ha escrito, o
__Internal si usted est escribiendo cdigo nativo vinculado estaticamente.
@DllImport (DLLName)
static private function FooPluginFunction () : float {};

Creando un Plugin Nativo


En general, los plugins estn construidos con compiladores de cdigo nativo en las
plataformas destino. Ya que las funciones de plugin utilizan una interfaz de llamado
basado en C, usted debe evitar problemas de nombres que se pasa por alto cuando
utilice C++, u Objective-C.

Ms Informacin
Interface del Plugin Nativo - esto se necesita si usted quiere hacer algo de renderizado
con su plugin.

Mono Interop con libreras nativas.

Documentacin P-invoke en MSDN.

- 349 -
Construyendo Plugins para Plataformas de
Escritorio
Esta pgina describe los Plugins de Cdigo Nativo para las plataformas de escritorio
(Windows/Mac OS X/Linux). Tenga en cuenta que los plugins estn intencionalmente
desactivados en los reproductores web por razones de seguridad.

Construyendo un Plugin para Mac OS X


En Mac OSX, los plugins son implementados como bundles. Usted puede crear un
proyecto bundle con XCode al seleccionar File->NewProject y luego
seleccionar Bundle -> Carbon/Cocoa Loadable Bundle (en XCode 3) o OS X -
> Framework & Library -> Bundle (en XCode 4)

Si usted est utilizando C++ (.cpp) u Objective-C (.mm) para implementar el plugin
entonces usted necesita asegurar que las funciones estn declaradas con un vinculo
en C para evitar name mangling issues.
extern "C" {
float FooPluginFunction ();
}

Construyendo un Plugin para windows


Los PLugins en Windows son archivos DLL con funciones exportadas. Prcticamente
cualquier lenguaje o ambiente de desarrollo que puede crear archivos DLL pueden ser
utilizados para crear plugins. Como en Mac OSX, usted debera declarar cualquier
funcin C++ con un vinculo a C para evitar name mangling issues.

Construyendo un Plugin para Linux


Los Plugins en Linux son archivos .so con funciones exportadas. Estas libreras son
tpicamente escritas en C o C++, pero cualquier lenguaje puede ser utilizado. Como
con otras plataformas, usted debera declarar cualquier funcin en C++ con un vnculo
a C con el fin de evitar name mangling issues.

Libreras de 32 y 64 bits
El problema de necesitar plugins de 32-bit y/o 64-bit se maneja diferente

- 350 -
dependiendo en la plataforma.

Windows y Linux
En windows y Linux, los plugins pueden ser manejados manualmente (e.g, antes de
construir un reproductor 64-bit, copie la librera de 64-bit a la
carpeta Assets/Plugins, y antes de construir un reproductor 32-bit, copie la librera
32-bit a la carpeta Assets/Plugins) o usted puede colocar una versin 32-bit del
plugin en la versin Assets/Plugins/x86 y de 64-bit del plugin
en Assets/Plugins/x86_64. Por defecto, el editor va a mirar en el sub-directorio
architecture-specific primero, y si ese directorio no existe, va a copiar los plugins de la
carpeta raz Assets/Plugins mas bien.

Tenga en cuenta que para la construccin Universal Linux, a usted se le requiere


utilizar los sub-directorios architecture-specific (cuando construya una construccin
Universal Linux, el Editor no va a copiar cualquier plugins de la carpeta
raz Assets/Plugins).

Mac OS X
Para Mac OS X, usted debera construir su plugin como binario universal que contiene
ambas las arquitecturas 32-bit y 64-bit.

Utilizando su plugin de C#
Una vez construido, el bundle debera ser colocado en la carpeta Assets->Plugins (o el
sub-directorio apropiado de architecture-specific) en el proyecto de Unity. Unity va a
luego lo va a encontrar por nombre cuando usted defina una funcin como esta en
script C# :-
[DllImport ("PluginName")]
private static extern float FooPluginFunction ();

Por favor tenga en cuenta que el PluginName no debera incluir el prefijo de la librera
o la extensin del archivo. Por ejemplo, el nombre actual del archivo plugin sera
PluginName.dll en Windows y libPluginName.so en Linux. Por favor tenga en cuenta
que cuando usted cambia el cdigo en el Plugin usted va necesitar re-compilar las
scripts en su proyecto, o de lo contrario el plugin no tendr el ltimo cdigo
compilado.

- 351 -
Implementacin
Para plugins multiplataformas, usted debe incluir los archivos .bundle (para Mac), .dll
(para Windows), y .so (para Lixun) en la carpeta Plugins. No se requiere ms trabajo
por su lado - Unity automticamente coge el plugin correcto para la plataforma
destino y la incluye con el reproductor.

Ejemplos
Plugins Ms Simple
Este proyecto plugin implementa solo algunas operaciones bsicas (imprima un
nmero, imprima un string, agregue dos floats, agregue dos int). Este ejemplo puede
ayudarlo si este es su primer plugin en Unity. El proyecto se puede encontrar aqu e
incluye los archivos de proyecto de Windows, Mac, y Linux

Renderizando desde cdigo C++


Un plugin ejemplo multi-plataforma que funciona con un renderizado multitheaded
(multi-hilo) puede encontrarse en la pgina de Native Plugin Interface.

- 352 -
Interfaz de Plugin Nativo de Bajo Nivel
Adicionalmente a la interfaz bsica de script, los Native Code Plugins en Unity pueden
recibir callbacks cuando ciertos eventos ocurre. Esto en su mayora es utilizado para
implementar un renderizado de bajo nivel en su plugin y le permite funcionar con el
renderizado multi-hilo (multithread) de Unity.

Headers defining interfaces exposed by Unity are provided with the editor.

Interface Registry
A plugin should export UnityPluginLoad and UnityPluginUnload to handle main
Unity events. See IUnityInterface.h for the correct
signatures. IUnityInterfaces is provided to the plugin to access further Unity APIs.
#include "IUnityInterface.h"
#include "IUnityGraphics.h"
// Unity plugin load event
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
UnityPluginLoad(IUnityInterfaces* unityInterfaces)
{
IUnityGraphics* graphics = unityInterfaces->Get<IUnityGraphics>();
}

Acceso al Dispositivo de Grficas


A plugin can access generic graphics device functionality by getting
the IUnityGraphics interface. In earlier versions of Unity
a UnitySetGraphicsDevice function had to be exported in order to receive
notification about events on the graphics device. Starting with Unity 5.2 the new
IUnityGraphics interface (found in IUnityGraphics.h) provides a way to register a
callback.
#include "IUnityInterface.h"
#include "IUnityGraphics.h"

static IUnityInterfaces* s_UnityInterfaces = NULL;


static IUnityGraphics* s_Graphics = NULL;
static UnityGfxRenderer s_RendererType = kUnityGfxRendererNull;

// Unity plugin load event


extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
UnityPluginLoad(IUnityInterfaces* unityInterfaces)
{
s_UnityInterfaces = unityInterfaces;
s_Graphics = unityInterfaces->Get<IUnityGraphics>();

s_Graphics->RegisterDeviceEventCallback(OnGraphicsDeviceEvent);

- 353 -
// Run OnGraphicsDeviceEvent(initialize) manually on plugin load
// to not miss the event in case the graphics device is already
initialized
OnGraphicsDeviceEvent(kUnityGfxDeviceEventInitialize);
}

// Unity plugin unload event


extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
UnityPluginUnload()
{
s_Graphics->UnregisterDeviceEventCallback(OnGraphicsDeviceEvent);
}

static void UNITY_INTERFACE_API


OnGraphicsDeviceEvent(UnityGfxDeviceEventType eventType)
{
switch (eventType)
{
case kUnityGfxDeviceEventInitialize:
{
s_RendererType = s_Graphics->GetRenderer();
//TODO: user initialization code
break;
}
case kUnityGfxDeviceEventShutdown:
{
s_RendererType = kUnityGfxRendererNull;
//TODO: user shutdown code
break;
}
case kUnityGfxDeviceEventBeforeReset:
{
//TODO: user Direct3D 9 code
break;
}
case kUnityGfxDeviceEventAfterReset:
{
//TODO: user Direct3D 9 code
break;
}
};
}

Callbacks del Plugin en el hilo renderizando


El renderizado en Unity puede ser multi-hilo si la plataforma y el nmero de CPUs
disponibles lo permiten. Cuando el renderizado multi-hilo es usado, los comandos del
API de renderizado sucede en un hilo que es completamente diferente del que est
ejecutando los scripts de MonoBehaviour. En consecuencia, no es siempre posible
para su plugin que empiece hacer algo de renderizacin inmediatamente, ya que
podra interferir con lo que el hilo de renderizado est haciendo en ese tiempo.

Con el fin de hacer cualquier renderizado desde el plugin, usted debera


llamar GL.IssuePluginEvent desde su script, lo cual va a causar que su plugin sea

- 354 -
llamado del hilo que renderiza. Por ejemplo, si usted llama GL.IssuePluginEvent de la
funcin de la cmara OnPostRender, usted puede obtener un callback del plugin
inmediatamente despus de que la cmara ha finalizado de renderizar.

Signature for the UnityRenderingEvent callback is provided in IUnityGraphics.h.


Native plugin code example:
// Plugin function to handle a specific rendering event
static void UNITY_INTERFACE_API OnRenderEvent(int eventID)
{
//TODO: user rendering code
}

// Freely defined function to pass a callback to plugin-specific scripts


extern "C" UnityRenderingEvent UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
GetRenderEventFunc()
{
return OnRenderEvent;
}
Managed plugin code example:
#if UNITY_IPHONE && !UNITY_EDITOR
[DllImport ("__Internal")]
#else
[DllImport("RenderingPlugin")]
#endif
private static extern IntPtr GetRenderEventFunc();

// Queue a specific callback to be called on the render thread


GL.IssuePluginEvent(GetRenderEventFunc(), 1);
Tales callbacks pueden ser tambin agregados a CommandBuffers
va CommandBuffer.IssuePluginEvent.

Ejemplo
Un ejemplo de un plugin de renderizado de bajo nivel puede ser descargado aqu.
Este muestra dos cosas:

Renderiza un tringulo girando desde cdigo C++ despus de que todo el renderizado
regular se ha hecho.

Llena una textura de procedimiento desde cdigo C++, utilizando


Texture.GetNativeTexturePtr para acceder a ello.

El proyecto funciona con:

Windows (Visual Studio 2008) y Mac OS X (Xcode 3.2) y utiliza Direct3D 9, Direct3D 11 o
OpenGL dependiendo en la plataforma. Cdigo de la pieza de Direct3D 9 tambin
demuestra cmo manejar dispositivos perdidos.

- 355 -
Windows Store Apps (ver RenderingPlugin\WSAVisualStudio2012 para ms
informacin)

- 356 -
AssetBundles
Los AssetBundles son archivos que puedes exportar desde Unity, y que contienen
assets de tu preferencia. Estos archivos utilizan un formato de compresin propio y
pueden ser descargados por demanda por su aplicacin. Esto le permite a usted
stream el contenido, como lo son modelos, texturas, audio clips o escenas completas,
de manera separado desde la escena que sern utilizados.

Los AssetBundles han sido diseados para simplificar la descarga del contenido a su
aplicacin. Los AssetBundles pueden contener cualquier tipo de asset reconocido por
Unity, segn lo determine la extensin en el nombre de archivo. Si quieres incluir
archivos con datos binarios personalizados, deben tener la extensin .bytes. Unity
importar estos archivos como TextAssets.

Al trabajar con AssetBundles, el flujo de trabajo tpico es:

Durante el desarrollo, el desarrollador prepara los AssetBundles y los sube a un


servidor.

1. Construyendo AssetBundles. Los AssetBundles son creados en el editor a partir de


los assets en tu escena. El proceso de contruccin de AssetBundles est descrito en
ms detalle en la seccin Construccin de AssetBundles

2. Subiendo los AssetBundles a un medio de almacenamiento externo. Este paso no


involucra al Unity Editor o a alguno otro de los canales de Unity, pero se coloca para
mostrar el procedimiento completo. Puedes usar un cliente de FTP para subir tus
AssetBundles al servidor de tu preferencia.

En tiempo de ejecucin, en el lado de la mquina del usuario, la aplicacin cargar los


AssetBundles bajo demanda y emplear los assets individuales en cada AssetBundle
conforme los vaya necesitando.

- 357 -
1. Descargando los AssetBundles en tiempo de ejecucin desde tu aplicacin. Esto
se realiza usando scripts dentro de una escena de Unity, y los AssetBundles son
cargados bajo demanda desde el servidor. Ms informacin sobre esto en Descargar
AssetBundles.

2. Cargando objetos a partir de AssetBundles. Una vez el AssetBundle es descargado,


ya puedes acceder a cada asset contenido en el Bundle. Mas informacin sobre esto
en Cargar recursos desde AssetBundles

Favor leer detalladamente esta seccin de la documentacin para te familiarizes con


el flujo de trabajo para el uso de AssetBundles, descubrir las diferentes caractersticas
que proporcionan y aprender buenas prcticas que puedan ahorrarte tiempo y
esfuerzo durante el desarrollo.

Ver tambin: AssetBundles y Resources (recursos) mejores prcticas

- 358 -
Construyendo Asset Bundles
Para comenzar a crear un Asset Bundle, usted primero necesita seleccionar un asset
desde la carpeta del proyecto que a usted le gustara incluir en un bundle. Al final de
la ventana del inspector para ese asset, hay un men Asset Bundle. Al hacer click se va
a revelar los nombres de cualquier asset bundles actualmente definidos, adems de
la opcin de definir un nuevo bundle:

Creacin AssetBundle

Si usted todava no ha definido el bundle, haga click en New, e ingrese un nombre


para su bundle.

- 359 -
Then, to add further assets to this bundle, use the menu at the bottom of the
Inspector window to select an asset in the Project window and assign it to the named
bundle.

Por defecto, la opcin del AssetBundle para Asset es configurada a ninguna


significando que el Asset no ser escrito a un AssetBundle y ms bien estar
empaquetado con el proyecto principal en s mismo. Utilizando este men, usted
puede crear uno o ms Asset Bundles, darle nombres, y luego utilizar esto nuevos
nombres de AssetBundle como el destino para el asset.

Creacin de
AssetBundle

En esta foto el Asset asset ha sido agregado a un AssetBundle llamado


environment/desert. Este AssetBundle puede contener otros assets que han sido
previamente agregados. Los nombres de los AssetBundle siempre estn en
minscula. Si usted utilizar caracteres de mayscula en el nombre estos sern
convertidos a minscula. Utilizando una barra inclinada en el nombre del AssetBundle
efectivamente crea carpetas, y el men tendr submenus, como el te la foto de arriba
muestra.

Si usted crea AssetBundles que no tienen assets asignados a estos, entonces la opcin
"Remove Unused Names) puede ser utilizada. Esto va a borrar el AssetBundle vaco.

El archivo meta perteneciendo a un Asset va a tener el nombre del AssetBundle


escogido escrito en l.

Exportando AssetBundles
Los AssetBundles son exportados del editor utilizando cdigo script. El siguiente script
exporta AssetBundles:
using UnityEditor;

public class CreateAssetBundles

- 360 -
{
[MenuItem ("Assets/Build AssetBundles")]
static void BuildAllAssetBundles ()
{
BuildPipeline.BuildAssetBundles ("Assets/AssetBundles",
BuildAssetBundleOptions.None, BuildTarget.StandaloneOSXUniversal);
}
}
Este script crea un item de men al final del men Assets. Cuando usted selecciona
este item del men para llamar la funcin y construir los AssetBundles, usted ver un
dialogo de construccin con una barra de progreso. La
funcin BuildPipeline.BuildAssetBundles crea los AssetBundles que han sito
etiquetados, y los coloca a una carpeta output llamada AssetBundles. (Por favor
tenga en cuenta que usted necesita crear la carpeta AssetBundles en la carpeta de
su proyecto con anterioridad de correr este script.)

Cada AssetBundle que es exportado tendr el mismo nombre creado en el men


AssetBundle. Adicionalmente, cada AssetBundle tendr un archivo asociado con una
extensin -manifest. Este archivo manifest es un archivo texto que usted puede abrir
con cualquier editor de texto. Este proporciona informacin como el CRC del archivo y
las dependencias del asset. El AssetBundle en este ejemplo de arriba tiene un archivo
manifest que se ve as:
ManifestFileVersion: 0
CRC: 2422268106
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 8b6db55a2344f068cf8a9be0a662ba15
TypeTreeHash:
serializedVersion: 2
Hash: 37ad974993dbaa77485dd2a0c38f347a
HashAppended: 0
ClassTypes:
- Class: 91
Script: {instanceID: 0}
Assets:
Asset_0: Assets/Mecanim/StateMachine.controller
Dependencies: {}
Adicionalmente a estos, hay otros archivos creados: OTro AssetBundle y otro archivo
manifest. Estos dos siempre son creados cuando los AssetBundles son creados. Estos
son creados para cada carpeta que los AssetBundles son creados, y por lo tanto si
usted siempre crea AssetBundles en el mismo lugar usted obtendr solamente dos
archivos extra. El archivo manifest adicional - en este ejemplo AssetBundles.manifest -
puede ser utilizado de la misma manera que otros archivos manifest pero mostrarn
informacin acerca de cmo los AssetBundles se relacionan y dependen de cada uno.
En este caso, ya que nosotros solamente tenemos un solo AssetBundle, no tiene otras

- 361 -
dependencias.
ManifestFileVersion: 0
AssetBundleManifest:
AssetBundleInfos:
Info_0:
Name: scene1assetbundle
Dependencies: {}

Shader stripping
When you include shaders in your bundle, the Unity editor looks at the current scene
and lightmapping settings to decide which Lightmap modes to use. This means that
you need to have a configured scene open when building the bundle.

However, you can also manually specify which scene to calculate Lightmap modes
from. This is necessary when building bundles from the command line.

Open the scene you would like to use. In the Graphics Settings Inspector (Edit >
Project Settings > Graphics), go to Shader stripping/Lightmap modes and
select Manual, then select From current scene.

Herramientas de Edicin del AssetBundle


Obteniendo nombres de AssetBundles
El siguiente script del editor puede mostrar los nombres de AssetBundles los cuales el
proceso de construccin pueden crear.
using UnityEditor;
using UnityEngine;

public class GetAssetBundleNames


{
[MenuItem ("Assets/Get AssetBundle names")]
static void GetNames ()
{
var names = AssetDatabase.GetAllAssetBundleNames();
foreach (var name in names)
Debug.Log ("AssetBundle: " + name);
}
}

Decirme cuando un asset cambia AssetBundle


Usted puede utilizar el mtodo OnPostprocessAssetbundleNameChanged de la clase
AssetPostprocessor, para obtener un callback cuando el AssetBundle, un asset es
asociado con cambios.
using UnityEngine;

- 362 -
using UnityEditor;

public class MyPostprocessor : AssetPostprocessor {

void OnPostprocessAssetbundleNameChanged ( string path,


string previous, string next) {
Debug.Log("AB: " + path + " old: " + previous + " new: " + next);
}
}

Variantes de AssetBundle
Las Variantes de AssetBundle es una nueva caractersticas de 5.x. Estas pueden ser
utilizadas para lograr un resultado similar a unos assets virtuales. Por ejemplo, usted
puede configurar un AssetBundle como una variante como MyAssets.hd y
MyAssets.sd. Asegrese de que los assets coincidan exactamente. Los objetos en
estas dos variantes de AssetBundles van a tener el mismo IDs internos el cual son
asegurados por el pipeline de construccin de Unity. Por lo que estas dos variantes de
AssetBundles van a ser cambiadas arbitrariamente con AssetBundles de diferentes
extensiones de variante en tiempo de ejecucin.

Cmo configurar variantes de Assetbundle:

1. Desde el editor utilice una variante de nombre extra, a la derecha de la etiqueta de


asset GUI.

2. En cdigo utilice la opcin AssetImporter.assetBundleVariant

Variantes de AssetBundle

El nombre completo de AssetBundle va a ser la combinacin del nombre del


AssetBundle y el nombre de la variante. Por ejemplo, si usted quiere agregar
MyAssets.hd como un AssetBundle de variante, usted debera configurar el nombre
del AssetBundle a MyAssets y la variante de AssetBundle a hd. Y el AssetBundle
final es MyAssets.hd.

Pero si usted solamente configura el nombre del AssetBundle como MyAssets.hd,


entonces este es solamente un AssetBundle normal que no es un AssetBundle
variante. MyAssets+hd y MyAssets.hd+no pueden co-existir ya que pueden
llevar al mismo nombre del AssetBundle completo.

- 363 -
Consejos de Scripting
API para marcar el asset a un AssetBundle
Usted puede utilizar el AssetImporter.assetBundleName para configurar el nombre
del AssetBundle.

Construyendo Asset Bundles


APIs ms simples estn disponible para construir
AssetBundles, BuildPipeline.BuildAssetBundles(). Estos APIs son bastante simple,
usted solamente necesita proporcionar:

La ruta output para todos loas AssetBundles.

BuildAssetBundleOptions que ser descrito despus.

BuildTarget que es lo mismo que antes.

Tambin tenga una versin sobrecargada para proporcionar un arreglo de


AssetBundleBuild que contienen un mapa de los assets a los AssetBundles. Esto
proporciona flexibilidad para usted, usted puede configurar la informacin de
mapping por script y construirla. Y esta informacin de mapping no va a
romper/remplazar la existente en la base de datos de assets.

APIs para manipular los nombres de AssetBundle en la base de datos de assets


AssetDatabase.GetAllAssetBundleNames() que devuelve todos los nombres de los
AssetBundle en la base de datos de assets.

AssetDatabase.GetAssetPathsFromAssetBundle para devolver la ruta de los assets


marcados en el AssetBundle dado.

AssetDatabase.RemoveAssetBundleName() que quita el nombre de un AssetBundle


dado en la base de datos de asset.

AssetDatabase.GetUnusedAssetBundleNames() que devuelve los nombres de los


AssetBundle sin utilizar.

AssetDatabase.RemoveUnusedAssetBundleNames() que quita todos los nombres de


AssetBundle sin utilizar en la base de datos de Assets.
*AssetPostProcessor.OnPostprocessAssetbundleNameChanged un callback que ser

- 364 -
llamado si el usuario cambia el nombre del AssetBundle de un asset.

BuildAssetBundleOptions

BuildAssetBundleOptions
CollectDependencies y DeterministicAssetBundle siempre estn activadas.

CompleteAssets es ignorado a medida que nosotros siempre comenzamos de assets


en vez de objetos, debera estar completo por defecto.

ForceRebuildAssetBundle es agregado. Incluso si no hay cambio a los assets, usted


puede obligar la re-construccin de los AssetBundles al configurar esta flag.

IngoreTypeTreeChanges es agregado. Incluso el tipo de cambios de rboles, usted


puede ignorar los cambios al tipo de rbol con esta flag.

DisableWriteTypeTree entra en conflicto con IngoreTypeTreeChanges Usted no puede


ignorar el cambio de tipo de rbol si usted desactiva el tipo de rbol.

Archivo Manifest
Un archivo manifest es creado para cada AssetBundle que contiene la siguiente
informacin:

El archivo manifest est alado del AssetBundle.

CRC

El hash de un archivo Asset. Un solo hash para todos los assets incluidos en este
AssetBundle, solamente utilizarlo para una revisin de construccin incremental.

El hash del Type tree. Un solo hash para todos los tipos incluidos en este AssetBundle,
solamente utilizarlo para una revisin incremental de construccin.

Tipos de clases. todos los tipos de clase incluidos en el AssetBundle. Estos son
utilizados para obtener un solo hash nuevo cuando se haga la revisin de la
construccin incremental del type tree.

Nombres de los Asset. Todos los assets explcitamente incluyen este AssetBundle.

Los nombres de AssetBundle dependientes. Todos los AssetBundles que este


AssetBundle depende.

Este archivo manifest es solamente utilizada para construcciones incrementales, no


son necesarias para el tiempo de ejecucin.

- 365 -
Un solo archivo manifest
Nosotros generamos un solo archivo manifest que incluye:

Todos los AssetBundles.

Todas las dependencias de AssetBundle.

Un solo manifest AssetBundle


Solamente contiene un objeto AssetBundleManifest que tiene las siguiente APIs:

GetAllAssetBundles() que devuelve todos los nombres de los AssetBundle en esta


construccin.

GetDirectDependencies() que devuelve los nombres de AssetBundle dependientes


directamente.

GetAllDependencies() que devuelve todos los nombres de AssetBundle dependientes.

GetAssetBundleHash(string) que deveulve el hash para el AssetBundle especifico.

GetAllAssetBundlesWithVariant() que devuelve todos los AssetBundles con variante.

El APIs para cargar AssetBundles ha cambiado


AssetBundle.GetAllAssetNames(). Devuelve todos los nombres de Asset en el
AssetBundle.

AssetBundle.GetAllScenePaths(). Devuelve todas las rutas de los assets de la escena si


es un AssetBundle en streaming.

AssetBundle.LoadAsset(). Carga los Assets de un AssetBundle.

AssetBundle.LoadAllAssets().

AssetBundle.LoadAssetWithSubAssets().

Una versin asincrnica tambin son proporcionadas.

El tipo de componente ya no es devuelto. En vez cargue el GameObject primero y


luego mire el componente(s) en el objeto.

Typetrees (TiposDerboles)
Un typetree es escrito al AssetBundle por defecto. La nica excepcin es Metro ya que
tiene una solucin de serializacin diferente.

- 366 -
- 367 -
Compresin de Asset Bundles
Unity soporta tres opciones de compresin para Asset Bundles: LZMA, LZ4 y sin
comprimir.

Formato LZMA
Por defecto, cuando los Asset Bundles son construidos, estos son almacenados en un
formato comprimido. El formato estndar de compresin es un stream LZMA de solo
archivos de datos serializados, y necesitan ser des-comprimidos en su totalidad antes
de ser usados.

Los bundles comprimidos con LZMA dan el tamao de descarga ms pequeo


posible, pero tiene una des-compresin relativamente lenta resultando en tiempos de
carga mayores.

Formato LZ4
Unity tambin soporta la compresin LZ4, la cual resulta en tamaos de archivo
comprimidos mayores, pero no requiere que el bundle en su totalidad sea
descomprimido antes de su uso. LZ4 es un algoritmo que se basa en porciones
(chunks), y por lo tanto cuando los objetos son cargados desde un bundle
comprimido mediante LZ4, solamente las porciones (chunks) correspondientes para
ese objeto son descomprimidos. Esto ocurre en la marcha (on the fly), significando
que no hay tiempos de espera para que el bundle entero sea descomprimido antes
de su uso. El formato LZ4 fue introducido en Unity 5.3 y no estaba disponible en
versiones anteriores.

Formato sin comprimir


La tercera opcin de compresin es sin comprimir en absoluto. Los bundles sin
comprimir son grandes en tamao, pero son los ms rpidos para acceder una vez
hayan sido descargados.

El almacenamiento en Cach de Bundles Comprimidos


La funcin WWW.LoadFromCacheOrDownload descarga y almacena en cach los
asset bundles en disco por lo tanto acelera en gran medida la carga despus. Desde
Unity 5.3 para adelante, los datos en cach tambin pueden ser comprimidos con el

- 368 -
algoritmo LZ4. Esto ahorra entre 40%60% de espacio comparado a los bundles sin
comprimir. La re-compresin sucede durante la descarga y por lo tanto casi no se
nota por los usuarios finales. A medida que los datos llegan del socket, Unity lo va a
descomprimir y re-comprimirlo en un formato LZ4. Esta re-compresin ocurre
durante la descarga del streaming, lo cual significa que la compresin en cach
empieza tan pronto la mayora de datos hayan sido descargados, y continua de
manera incremental hasta que la descarga se haya completado. Despus de esto, los
datos son ledos desde el bundle en cach al descomprimirlo por porciones en la
marcha (on the fly) cuando sea necesario.

La compresin en cach es habilitada por defecto y es controlada por la


propiedad Caching.compressionEnabled. Esta afecta los bundles almacenados en
cach en disco y en memoria.

Visin general del API de la carga (load) de AssetBundles


Esta tabla proporciona una comparacin de sobrecarga de memoria y rendimiento
cuando se utilice diferentes tipos de compresin y diferentes mtodos para cargar.

WWW *

LoadFromCacheOrDownload
LoadFromMemory (Async)
LoadFromFile(Async)
WebRequest (tambin soporta el almacenamiento en cach)
* Cuando descargue un bundle utilizando WWW, WebRequest, tambin hay un buffer
acumulador 8x64KB que almacena datos desde un socket.

Por lo tanto, utilice los siguientes lineamientos utilizando un API para cargar de bajo
nivel en sus juegos:

1. Despliegue de asset bundles con su juego como StreamingAssets - utilice


BuildAssetBundleOptions.ChunkBasedCompression cuando construya bundles y
AssetBundle.LoadFromFileAsync para cargarlos. Esto le da una compresin de datos y
la manera ms rpida para el rendimiento de cargar con una sobre carga de memoria
igual a leer buffers.

2. Descargando asset bundles como DLCs (contenido para descargar) - utilice las

- 369 -
opciones por defecto (compresin LZMA) y LoadFromCacheOrDownload/WebRequest
para descargarlo y almacenarlo en cach. Aqu usted tendr la mejor posible tasa de
compresin y AssetBundle.LoadFromFile para un rendimiento optimo de cargar para
futuras cargas.

3. Bundles encriptados -escoja BuildAssetBundleOptions.ChunkBasedCompression y


utilice LoadFromMemoryAsync para cargar (este probablemente sea el nico
escenario dnde LoadFromMemory[Async] debera ser utilizado).

4. Compresin personalizada - utilice


BuildAssetBundleOptions.UncompressedAssetBundle para construir y
AssetBundle.LoadFromFileAsync para cargar un bundle despus de que haya sido
descomprimido por su algoritmo de compresin personalizado.

En general, usted debera siempre escoger funciones asincrnicas - estas no estacan


el thread (hilo) principal y permiten que las operaciones de cargan sean pasadas en
cola (queued) de manera ms eficiente. Y absolutamente evite llamar funciones
asincrnicas y sincrnicas al mismo tiempo - esto podra introducir contratiempos al
thread principal.

Compatibilidad
El formato contenedor del Asset Bundle fue cambiado con el fin de soportar nuevos
tipos de compresin, y para proporcionar una base para mejoras futuras. Unity 5
todava soporta bundles creados en Unity 4, sin embargo los bundles creados en
versiones previas (2.x, 3.x) no son soportados.

- 370 -
Estructura Interna de Asset Bundle
Un AssetBundle es esencialmente un conjunto de objetos agrupados a un archivo
serializado. Es desplegado como un archivo de datos que tienen una estructura
diferente dependiendo si es un bundle normal o un bundle de escena.

La estructura normal del AssetBundle.

La estructura interna de un Asset Bundle normal

Estructura de un AssetBundle de escena por streaming.

La estructura interna de un Asset Bundle de escena por streaming

Ambos tipos son archivados y comprimidos de la misma manera.

Compresin de AssetBundles
El contenedor ArchiveFileSystem tiene la siguiente estructura:

- 371 -
La estructura contenedora del ArchiveFileSystem

Los bloques comprimidos mostrados arriban podran tener una compresin por
trozos o una compresin basada en stream. La compresin por trozos (LZ4) significa
que los datos originales estn divididos en trozos (sub-bloques) del mismo tamao y
esos trozos estn comprimidos independientemente. Usted debera utilizar esto si
usted quiere una des-compresin en tiempo real - la sobrecarga de lectura aleatoria
es pequea. La compresin basada en stream (LZMA) utiliza el mismo diccionario al
procesar el bloque entero, este proporciona la tasa ms alta de compresin pero
soporta solamente lecturas secuenciales.

- 372 -
Descargar AssetBundles
En esta seccin se asume que conoces sobre cmo construir AssetBundles. Si no es
as, favor ver la pgina Construccin de AssetBundles

Hay dos formas de descargar un AssetBundle:

1. Non-caching: Esta se hace creando un nuevo objeto WWW. Los AssetBundles no


estn cacheados en la carpeta Cache de Unity en el dispositivo de almacenamiento
local.

2. Caching: Esto se hace usando el mtodo WWW.LoadFromCacheOrDownload. Los


AssetBundles son cacheados a la carpeta Cache de Unity en el dispositivo local de
almacenamiento. El cach compartido del WebPlayer permite hasta 50 MB de
AssetBundles cacheados. Las aplicaciones autnomas para PC/Mac y las aplicaciones
iOS/Android tienen un lmite de 4 GB. Las aplicaciones de WebPlayer que hacen uso
de un cach dedicado estn limitadas al nmero de bytes especificado en el acuerdo
de licencia de caching. Para otras plataformas, favor remitirse a la documentacin de
scripting.

A continuacin hay un ejemplo de descarga con non-caching:


using System;
using UnityEngine;
using System.Collections; class NonCachingLoadExample : MonoBehaviour {
public string BundleURL;
public string AssetName;
IEnumerator Start() {
// Download the file from the URL. It will not be saved in the Cache
using (WWW www = new WWW(BundleURL)) {
yield return www;
if (www.error != null)
throw new Exception("WWW download had an error:" + www.error);
AssetBundle bundle = www.assetBundle;
if (AssetName == "")
Instantiate(bundle.mainAsset);
else
Instantiate(bundle.LoadAsset(AssetName));
// Unload the AssetBundles compressed contents to conserve
memory
bundle.Unload(false);

} // memory is freed from the web stream (www.Dispose() gets called


implicitly)
}
}

La manera recomendada para descargar AssetBundles es


usando WWW.LoadFromCacheOrDownload. Por ejemplo:

- 373 -
using System;
using UnityEngine;
using System.Collections;

public class CachingLoadExample : MonoBehaviour {


public string BundleURL;
public string AssetName;
public int version;

void Start() {
StartCoroutine (DownloadAndCache());
}

IEnumerator DownloadAndCache (){


// Wait for the Caching system to be ready
while (!Caching.ready)
yield return null;

// Load the AssetBundle file from Cache if it exists with the same
version or download and store it in the cache
using(WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version)){
yield return www;
if (www.error != null)
throw new Exception("WWW download had an error:" + www.error);
AssetBundle bundle = www.assetBundle;
if (AssetName == "")
Instantiate(bundle.mainAsset);
else
Instantiate(bundle.LoadAsset(AssetName));
// Unload the AssetBundles compressed contents to conserve
memory
bundle.Unload(false);

} // memory is freed from the web stream (www.Dispose() gets called


implicitly)
}
}

Cuando accedes a la propiedad .assetBundle, los datos descargados son extrados y


el objeto AssetBundle es creado. A este punto, ests listo para cargar los objetos
contenidos en el bundle. El segundo parmetro que se pasa a
LoadFromCacheOrDownload especifica la versin del AssetBundle que ser
descargada. Si el AssetBundle no existe en el cach o si tiene una versin ms baja
que la solicitada, LoadFromCacheOrDownload descargar el AssetBundle. De lo
contrario el AssetBundle ser descargado desde el cach.

Favor notar que mximo una sola descarga del AssetBundle puede finalizarse por
cada marco, cuando son descargados con WWW.LoadFromCacheOrDownload.

Poniendo todo junto


Ahora que los componentes estn en su lugar, puedes construir una escena que
podrs cargar tu AssetBundle y mostrar el contenido en la pantalla.

- 374 -
Final project structure

Primero crea un GameObject vaco con GameObject->CreateEmpty. Arrastra el script


CachingLoadExample al GameObject vaco que acabaste de crear. Luego escribe el
URL de tu AssetBundle en el campo BundleURL. Como se ha colocado en el directorio
del proyecto, puedes copiar el path del archivo y luego se agrega el prefijo file://,
por
ejemplo file://C:/UnityProjects/AssetBundlesGuide/Assets/AssetBundle
s/Cube.unity3d.

Ahora puedes dar play en el Editoy, y deberas ver al prefab Cube siendo cargado
desde el AssetBundle.

Cargar AssetBundles en el Editor


Al estar trabajando en el Editor con AssetBundles requeridos para ser construidos y
cargados, esto puede volver lento el proceso de desarrollo. Por ejemplo: si un Asset
de un AssetBundle es modificado, entonces esto requerir que el AssetBundle sea
reconstruido y en ambiente de produccin es muy probable que todos los
AssetBundles sean construidos juntos, por lo que realizar el proceso de actualizar un
solo AssetBundle pueda volverse una operacin de mucho tiempo. Un mejor enfoque
es tener una ruta de cdigo por separado en el Editor que cargar el Asset
directamente en vez de cargarlo desde un AssetBundle. Para hacer esto, se puede
usar Resources.LoadAssetAtPath (slo en Editor).
// C# Example
// Loading an Asset from disk instead of loading from an AssetBundle
// when running in the Editor
using System.Collections;
using UnityEngine;

class LoadAssetFromAssetBundle : MonoBehaviour


{
public Object Obj;

public IEnumerator DownloadAssetBundle<T>(string asset, string url, int


version) where T : Object {

- 375 -
Obj = null;

#if UNITY_EDITOR
Obj = Resources.LoadAssetAtPath("Assets/" + asset, typeof(T));
yield return null;

#else
// Wait for the Caching system to be ready
while (!Caching.ready)
yield return null;

// Start the download


using(WWW www = WWW.LoadFromCacheOrDownload (url, version)){
yield return www;
if (www.error != null)
throw new Exception("WWW download:" + www.error);
AssetBundle assetBundle = www.assetBundle;
Obj = assetBundle.LoadAsset(asset, typeof(T));
// Unload the AssetBundles compressed contents to conserve memory
bundle.Unload(false);

} // memory is freed from the web stream (www.Dispose() gets called


implicitly)

#endif
}
}

- 376 -
Cargar y quitar objetos desde un AssetBundle
Al haber creado un objeto AssetBundle a partir de los datos descargados, puedes
cargar los Assets utilizando tres mtodos diferentes:

AssetBundle.Load cargar un objeto usanto su identificador de nombre como un


parmetro. El nombre ser el nico visible en el Project View. Opcionalmente puedes
pasar un tipo de objeto como un argumento al mtodo Load para asegurar que el
objeto cargado es de un tipo especfico.

AssetBundle.LoadAsync funciona igual que el mtodo Load descrito arriba, pero no


bloquear el hilo principal mientras el asset sea cargado. Esto es til cuando se cargan
assets grandes o muchos assets de una vez, a fin de evitar pausas en tu aplicacin.

AssetBundle.LoadAll cargar todos los objetos que hayan en tu AssetBundle. As como


en AssetBundle.Load, puedes opcionalmente filtrar objetos de acuerdo a su tipo.

Para quitar assets necesitar usar AssetBundle.Unload. Este mtodo toma un


parmetro booleano que le dice a Unity si se quitan todos los datos (incluyendo los
objetos de asset cargados) o slo los datos comprimidos desde el bundle descargado.
Si tu aplicacin est usando algunos objetos del AssetBundle y quieres liberar algo de
memoria, puedes colocar false para quitar de la memoria los datos comprimidos. Si
quieres quitar por completo todo lo del AssetBundle debes colocar true, con lo que se
destruirn los Assets cargados desde el AssetBundle.

Cargar objetos desde un AssetBundle de forma asncrona


Puedes usar el mtodo AssetBundle.LoadAsync para cargar objetos de forma
asncrona y reducir la probabilidad de tener interrupciones en la ejecucin de tu
aplicacin.
using UnityEngine;

// Note: This example does not check for errors. Please look at the example in
the DownloadingAssetBundles section for more information
IEnumerator Start () {
while (!Caching.ready)
yield return null;
// Start a download of the given URL
WWW www = WWW.LoadFromCacheOrDownload (url, 1);

// Wait for download to complete


yield return www;

// Load and retrieve the AssetBundle


AssetBundle bundle = www.assetBundle;

- 377 -
// Load the object asynchronously
AssetBundleRequest request = bundle.LoadAssetAsync ("myObject",
typeof(GameObject));

// Wait for completion


yield return request;

// Get the reference to the loaded object


GameObject obj = request.asset as GameObject;

// Unload the AssetBundles compressed contents to conserve memory


bundle.Unload(false);

// Frees the memory from the web stream


www.Dispose();
}

- 378 -
Llevar un Seguimiento de los AssetBundles cargados
Unity solamente le va a permitir a usted tener una sola instancia de un AssetBundle
en particular cargado a la vez en su aplicacin. Lo que esto significa es que usted no
puede recuperar un AssetBundle de un objeto WWW si el mismo ha sido cargado
previamente y no ha descargado (unload) completamente. En trminos prcticos
significa que cuando usted intente acceder a un AssetBundle previamente cargado
as:
AssetBundle bundle = www.assetBundle;

Cannot load cached AssetBundle. A file of the same name is already loaded from
another AssetBundle
Por favor tenga en cuenta que antes de Unity 5 todos los bundles terminaban de
cargar antes de que cualquiera de los bundles fueran descargados (unload). Entonces
llamar la funcin AssetBundle.Unload mientras algunos de los bundles todava estn
siendo cargados va a bloquear la ejecucin del resto del cdio hasta que todos los
bundles sean cargados. Esto aadir un hipo de rendimiento. Esto ha sido re-
trabajado en Unity 5.

Si usted no quiere hacerle un seguimiento a qu AssetBundles ha descargado, usted


puede utilizar una clase wrapper para ayudarlo a manejar sus descargas as:
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;

static public class AssetBundleManager {


// A dictionary to hold the AssetBundle references
static private Dictionary<string, AssetBundleRef> dictAssetBundleRefs;
static AssetBundleManager (){
dictAssetBundleRefs = new Dictionary<string, AssetBundleRef>();
}
// Class with the AssetBundle reference, url and version
private class AssetBundleRef {
public AssetBundle assetBundle = null;
public int version;
public string url;
public AssetBundleRef(string strUrlIn, int intVersionIn) {
url = strUrlIn;
version = intVersionIn;
}
};
// Get an AssetBundle
public static AssetBundle getAssetBundle (string url, int version){
string keyName = url + version.ToString();
AssetBundleRef abRef;
if (dictAssetBundleRefs.TryGetValue(keyName, out abRef))

- 379 -
return abRef.assetBundle;
else
return null;
}
// Download an AssetBundle
public static IEnumerator downloadAssetBundle (string url, int version){
string keyName = url + version.ToString();
if (dictAssetBundleRefs.ContainsKey(keyName))
yield return null;
else {
while (!Caching.ready)
yield return null;

using(WWW www = WWW.LoadFromCacheOrDownload (url, version)){


yield return www;
if (www.error != null)
throw new Exception("WWW download:" + www.error);
AssetBundleRef abRef = new AssetBundleRef (url, version);
abRef.assetBundle = www.assetBundle;
dictAssetBundleRefs.Add (keyName, abRef);
}
}
}
// Unload an AssetBundle
public static void Unload (string url, int version, bool allObjects){
string keyName = url + version.ToString();
AssetBundleRef abRef;
if (dictAssetBundleRefs.TryGetValue(keyName, out abRef)){
abRef.assetBundle.Unload (allObjects);
abRef.assetBundle = null;
dictAssetBundleRefs.Remove(keyName);
}
}
}

Un ejemplo de uso de la clase sera:


using UnityEditor;

class ManagedAssetBundleExample : MonoBehaviour {


public string url;
public int version;
AssetBundle bundle;
void OnGUI (){
if (GUILayout.Label ("Download bundle"){
bundle = AssetBundleManager.getAssetBundle (url, version);
if(!bundle)
StartCoroutine (DownloadAB());
}
}
IEnumerator DownloadAB (){
yield return StartCoroutine(AssetBundleManager.downloadAssetBundle (url,
version));
bundle = AssetBundleManager.getAssetBundle (url, version);
}
void OnDisable (){
AssetBundleManager.Unload (url, version);
}
}

- 380 -
Por favor tenga en cuenta que la clase AssetBundleManager en este ejemplo es
esttica, y cualquier Assetbundles que usted est referenciando no sern destruidos
cuando cargue una nueva escena. Utilice esta clase como una gua pero como se
recomienda en el inicio es mejor si usted unload de los AssetBundles despus de que
han sido utilizados. Usted siempre puede clonar un objeto de una instancia previa,
quitando la necesidad de cargar (load) los AssetBundles nuevamente.

el siguiente error sera lanzado y la propiedad de assetbundle devolvera null. Ya que


usted no puede recuperar el AssetBundle durante la segunda descarga si la primera
todava est cargada (loaded), lo que usted necesita hacer es ya sea unload el
AssetBundle cuando usted ya no lo est utilizando, o mantener una refernecia a este
y evitar que se descargue si todava sigue en memoria. Usted puede decidir el curso
correcto de accin basndose en sus necesidades, pero nuestra recomendacin es
que usted unload el AssetBundle tan pronto como usted haya finalizado de cargar
(loading) los objetos. Esto va a liberar la memoria y usted ya no va a obtener un error
acerca de cargar (load) AssetBundles en cach.

- 381 -
Almacenando y cargando datos binarios en un
AssetBundle
El primer paso es guardar su archivo de datos binarios con la extensin .bytes. Unity
va a tratar este archivo como un TextAsset. Como un TextAsset, el archivo puede ser
incluido cuando usted construya su AssetBundle. Una vez usted haya descargado el
AssetBundle en su aplicacin y cargado el objeto TextAsset, usted puede utilizar la
propiedad .bytes del TextAsset para recuperar sus datos binarios.
string url =
"http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
while (!Caching.ready)
yield return null;

// Start a download of the given URL


WWW www = WWW.LoadFromCacheOrDownload (url, 1);

// Wait for download to complete


yield return www;

// Load and retrieve the AssetBundle


AssetBundle bundle = www.assetBundle;

// Load the TextAsset object


TextAsset txt = bundle.Load("myBinaryAsText", typeof(TextAsset)) as
TextAsset;

// Retrieve the binary data as an array of bytes


byte[] bytes = txt.bytes;
}

- 382 -
Protegiendo contenido
Whilst it is possible to use encryption to secure your Assets as they are being
transmitted, once the data is in the hands of the client it is possible to find ways to
grab the content from them. For instance, there are tools out there which can record
3D data at the driver level, allowing users to extract models and textures as they are
sent to the GPU. For this reason, our general stance is that if users are determined to
extract your assets, they will be able to.

However, it is possible for you to use your own data encryption on AssetBundle files if
you still want to.

One way to do this is making use of the TextAsset type to store your data as bytes. You
can encrypt your data files and save them with a .bytes extension, which Unity will
treat as a TextAsset type. Once imported in the Editor the files as TextAssets can be
included in your AssetBundle to be placed in a server. In the client side the
AssetBundle would be downloaded and the content decrypted from the bytes stored
in the TextAsset. With this method the AssetBundles are not encrypted, but the data
stored which is stored as TextAssets is.
string url =
"http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
while (!Caching.ready)
yield return null;

// Start a download of the encrypted assetbundle


WWW www = new WWW.LoadFromCacheOrDownload (url, 1);

// Wait for download to complete


yield return www;

// Load the TextAsset from the AssetBundle


TextAsset textAsset = www.assetBundle.Load("EncryptedData",
typeof(TextAsset));

// Get the byte data


byte[] encryptedData = textAsset.bytes;

// Decrypt the AssetBundle data


byte[] decryptedData = YourDecryptionMethod(encryptedData);

// Use your byte array. The AssetBundle will be cached


}

An alternative approach is to fully encrypt the AssetBundles from source and then
download them using the WWW class. You can give them whatever file extension you

- 383 -
like as long as your server serves them up as binary data. Once downloaded you
would then use your decryption routine on the data from the .bytes property of your
WWW instance to get the decrypted AssetBundle file data and create the AssetBundle
from memory using AssetBundle.CreateFromMemory.
string url =
"http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
// Start a download of the encrypted assetbundle
WWW www = new WWW (url);

// Wait for download to complete


yield return www;

// Get the byte data


byte[] encryptedData = www.bytes;

// Decrypt the AssetBundle data


byte[] decryptedData = YourDecryptionMethod(encryptedData);

// Create an AssetBundle from the bytes array

AssetBundleCreateRequest acr = AssetBundle.CreateFromMemory(decryptedData);


yield return acr;

AssetBundle bundle = acr.assetBundle;

// You can now use your AssetBundle. The AssetBundle is not cached.
}

The advantage of this latter approach over the first one is that you can use any
method (except AssetBundles.LoadFromCacheOrDownload) to transmit your bytes
and the data is fully encrypted - for example sockets in a plugin. The drawback is that
it wont be Cached using Unitys automatic caching. You can in all players except the
WebPlayer store the file manually on disk and load it
using AssetBundles.CreateFromFile

A third approach would combine the best of both approaches and store an
AssetBundle itself as a TextAsset, inside another normal AssetBundles. The
unencrypted AssetBundle containing the encrypted one would be cached. The original
AssetBundle could then be loaded into memory, decrypted and instantiated
using AssetBundle.CreateFromMemory.
string url =
"http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
while (!Caching.ready)
yield return null;

// Start a download of the encrypted assetbundle


WWW www = new WWW.LoadFromCacheOrDownload (url, 1);

- 384 -
// Wait for download to complete
yield return www;

// Load the TextAsset from the AssetBundle


TextAsset textAsset = www.assetBundle.Load("EncryptedData",
typeof(TextAsset));

// Get the byte data


byte[] encryptedData = textAsset.bytes;

// Decrypt the AssetBundle data


byte[] decryptedData = YourDecryptionMethod(encryptedData);

// Create an AssetBundle from the bytes array


AssetBundleCreateRequest acr = AssetBundle.CreateFromMemory(decryptedData);
yield return acr;

AssetBundle bundle = acr.assetBundle;

// You can now use your AssetBundle. The wrapper AssetBundle is cached
}

- 385 -
Incluyendo scripts en AssetBundles
Los AssetBundles pueden contener scripts como TextAssets, pero de esta forma, no
pueden realmente ser cdigo ejecutable. Si desea incluir cdigo en su AssetBundles
que pueda ser ejecutado en su aplicacin, este requiere ser pre-compilado en
lenguaje ensamblador (assembly) y cargado usando la clase Mono Reflection (Nota:
Reflection no est disponible en iOS). Puede crear ensamblados (assemblies) en
cualquier IDE de C# normal (ej. Monodevelop, Visual Studio) o cualquier editor de
texto usando compiladores mono/.net.

Tenga en cuenta: Carga scripts desde asset bundles no es soportado en Windows


Store Apps y Windows Phone.
//c# example
string url =
"http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
while (!Caching.ready)
yield return null;

// Start a download of the given URL


WWW www = WWW.LoadFromCacheOrDownload (url, 1);

// Wait for download to complete


yield return www;

// Load and retrieve the AssetBundle


AssetBundle bundle = www.assetBundle;

// Load the TextAsset object


TextAsset txt = bundle.Load("myBinaryAsText", typeof(TextAsset)) as
TextAsset;

// Load the assembly and get a type (class) from it


var assembly = System.Reflection.Assembly.Load(txt.bytes);
var type = assembly.GetType("MyClassDerivedFromMonoBehaviour");

// Instantiate a GameObject and add a component with the loaded class


GameObject go = new GameObject();
go.AddComponent(type);
}

- 386 -
AssetBundles PF (Preguntas Frecuentes)

Cmo uso un AssetBundle?


Hay dos pasos principales involucrados cuando trabaje con AssetBundles. El primer
paso es descargar el AssetBundle desde un servidor o una ubicacin en disco. Esto se
realiza a travs de la clase WWW. El segundo paso es cargar los Assets desde el
AssetBundle, en ser utilizados en la aplicacin. Aqu hay un ejemplo de un script en C#
de esto:
using UnityEngine;
using System.Collections;

public class BundleLoader : MonoBehaviour{


public string url;
public int version;
public IEnumerator LoadBundle(){
while (!Caching.ready)
yield return null;
using(WWW www = WWW.LoadFromCacheOrDownload(url, version)) {
yield return www;
AssetBundle assetBundle = www.assetBundle;
GameObject gameObject = assetBundle.mainAsset as GameObject;
Instantiate(gameObject);
assetBundle.Unload(false);
}
}
void Start(){
StartCoroutine(LoadBundle());
}
}

Este script es agregado al GameObject como Componente. El AssetBundle es cargado


en la siguiente manera:

El url y los valores de la versin deben ser configurados en el Inspector antes de


correr este script. El url es la ubicacin del archivo AssetBundle, usualmente un
servidor en el internet. El nmero de versin le permite al desarrollador asociar un
nmero al AssetBundle cuando sea escrito en cach en disco. Cuando descargue un
AssetBundle Unity va a revisar si el archivo ya existe en el cach. Si s, compara la
versin del asset almacenado con la versin pedida. Si es diferente entonces el
AssetBundle ser re-descargado. Si es el mismo, entonces va a cargar el AssetBundle
de disco y va a evitar que se re-descargue el archivo. Por favor referirse a la funcin
WWW.LoadFromCacheOrDownload en la referencia de scripting para ms informacin
acerca de estos parmetros.

- 387 -
Cuando la funcin Start de este script es llamada, va a comenzar a cargar el
AssetBundle al llamar la funcin como una Coroutine. La funcin va a esperar (yield)
en el objeto WWW a medida que descarga el AssetBundle. Al utilizar esto, la funcin
va simplemente parar en ese punto hasta que el objeto WWW haya terminado de
descargar, pero no va a bloquear la ejecucin del resto del cdigo, este espera (yields)
hasta que haya terminado. Hasta una sola descarga de AssetBundle puede finalizar
por frame cuando son descargados con WWW.LoadFromCacheOrDownload.

Una vez el objeto WWW ha descargado el archivo AssetBundle, la propiedad


.assetBundle es utilizada para obtener un objeto AssetBundle. Este objeto es la
interfaz para cargar objetos del archivo AssetBundle.

En este ejemplo una referencia a un prefab en el AssetBundle es obtenida del


AssetBundle utilizando la propiedad .mainAsset (asset principal). Esta propiedad es
configurada cuando se construye el AssetBundle pasando un objeto como el primer
parmetro. El asset principal en el AssetBundle puede ser utilizado para almacenar un
TextAsset con una lista de objetos dentro del AssetBundle y cualquier otra
informacin acerca de ellos.

Por favor tenga en cuenta que por simplicidad el ejemplo previo no est haciendo
ninguna revisin de seguridad. Por favor ver el cdigo aqu para un ejemplo ms
complejo.

Cmo uso AssetBundles en el editor?


Como crear aplicaciones es un proceso iterativo, usted seguramente va a modificar
sus Assets muchas veces, lo cual requerira que se re-construyan los AssetBundles
despus de cada cambio para ser capaz de probarlos. Aunque sea posible cargar
AssetBundles en el Editor, este no es flujo de trabajo recomendado. Ms bien,
mientras pruebe en el Editor, usted debera utilizar la funcin de ayuda
Resources.LoadAssetAtPath para evitar que tenga que utilizar y re-construir
AssetBundles. La funcin le permite a usted cargar el Asset como si fuera cargado
desde un AssetBundle, mientras omite el proceso de construccin y sus Assets
siempre estn actualizados.

Lo siguiente es un ejemplo de un script de ayuda, que usted puede utilizar para cargar
sus Assets dependiendo si usted est corriendo en el Editor o no. Coloque este cdigo
en un script C# llamado AssetBundleLoader.cs:
using UnityEngine;

- 388 -
using System.Collections;

public class AssetBundleLoader {


public Object Obj; // The object retrieved from the AssetBundle

public IEnumerator LoadBundle<T> (string url, int version, string assetName,


string assetPath) where T : Object {
Obj = null;

#if UNITY_EDITOR
Obj = Resources.LoadAssetAtPath(assetPath, typeof(T));
if (Obj == null)
Debug.LogError ("Asset not found at path: " + assetPath);
yield break;

#else

WWW download;
if ( Caching.enabled ) {
while (!Caching.ready)
yield return null;
download = WWW.LoadFromCacheOrDownload( url, version );
}
else {
download = new WWW (url);
}

yield return download;


if ( download.error != null ) {
Debug.LogError( download.error );
download.Dispose();
yield break;
}

AssetBundle assetBundle = download.assetBundle;


download.Dispose();
download = null;

if (assetName == "" || assetName == null)


Obj = assetBundle.mainAsset;
else
Obj = assetBundle.Load(assetName, typeof(T));

assetBundle.Unload(false);

#endif
}
}

Ahora nosotros podemos utilizar el script AssetBundleLoader para cargar un Asset


desde un AssetBundle si estamos corriendo la aplicacin construida o cargar el Asset
directamente desde la carpeta del Proyecto si est corriendo en el Editor:
using UnityEngine;
using System.Collections;

public class ExampleLoadingBundle : MonoBehaviour {


public string url = "http://www.mygame.com/myBundle.unity3d"; // URL where
the AssetBundle is

- 389 -
public int version = 1; // The version of the AssetBundle

public string assetName = "MyPrefab"; // Name of the Asset to be loaded from


the AssetBundle
public string assetPath; // Path to the Asset in the Project folder

private Object ObjInstance; // Instance of the object


void Start(){
StartCoroutine(Download());
}

IEnumerator Download () {
AssetBundleLoader assetBundleLoader = new AssetBundleLoader ();
yield return StartCoroutine(assetBundleLoader.LoadBundle <GameObject>
(url, version, assetName, assetPath));
if (assetBundleLoader.Obj != null)
ObjInstance = Instantiate (assetBundleLoader.Obj);
}

void OnGUI(){
GUILayout.Label (ObjInstance ? ObjInstance.name + " instantiated" : "");
}
}

El script previo debera ser guardado a un archivo llamado ExampleLoadingBundle.cs


dentro de la carpeta de Assets. Despus de configurar las variables pblicas a sus
valores correctos y correrlas, se va a utilizar la clase AssetBundleLoader para cargar
un Asset. Luego es instanciado y esto ser mostrado al utilizar el GUI.

Cmo puedo almacenar en cach los AssetBundles?


Usted puede utilizar WWW.LoadFromCacheOrDownload el cual automticamente se
ocupa de guardas sus AssetBundles en disco. Por favor tenga en cuenta que en el
Webplayer usted est limitado a 50MB en total (compartido entre todos los
webplayers). Usted puede comprar una licencia para almacenar en cach por
separado para su juego si usted requiere ms espacio.

Si sus AssetBundles estn almacenados en la carpeta StreamingAssets como


AssetBundles descomprimidos, usted puede utilizar AssetBundle.CreateFromFile para
referenciar el AssetBundle en disco. Si los AssetBundles en la carpeta StreamingAssets
estn comprimidos, usted va a necesitar utilizar WWW.LoadFromCacheOrDownload
para crear una copia descomprimida del AssetBundle en cach.

Los AssetBundles son multi-plataforma?


Los AssetBundles son compatibles entre algunas plataformas. Utilice la siguiente tabla
como una gua.

- 390 -
Compatibilidad de plataforma para AssetBundles
Webplayer
Standalone (Reproductor iOS Android
Web)
Editor Y Y Y* Y*
Standalone Y Y
Webplayer
(Reproductor Y Y
Web)
iOS Y
Android Y
Por ejemplo, un bundle creado mientras el que el objetivo de construccin Webplayer
estaba activo sera compatible con el editor y con las construcciones strandalone. Sin
embargo, no sera compatible con apps construidas para las plataformas iOS o
Android.

(*) Los AssetBundles construidos para plataformas mviles podran contener datos
almacenados en un formato de plataforma especfico y optimizado que es
incompatible con la plataforma en dnde el editor est corriendo. Tenga en cuenta
que es seguro asumir que los juegos publicados necesitan diferentes asset bundles
por plataforma. Especficamente los shaders son diferentes entre plataformas.

E.G los datos de GI son almacenados en un formato optimizado por la arquitectura


ARM y por lo tanto no se pueden cargar en CPUs x86. Los shaders son almacenados
para una configuracin OpenGLES 2 y no se pueden cargar por el Editor que utiliza el
renderizador DX9/11 (pero funciona con el renderizador OpenGLCore). Durante el
desarrollo, a usted se le recomienda utilizar el Simulation Mode (modo de simulacin)
mencionado en el tutorial AssetBundles y el AssetBundle Manager para evitar la
incompatibilidad del Editor y plataformas mviles.

Cmo son los assets en AssetBundles identificados?


Cuando usted construya AssetBundles los assets son identificados internamente por
su nombre de archivo sin la extensin. Por ejemplo, una Textura ubicada en la carpeta
Project en Assets/Textures/myTexture.jpg es identificada y cargada utilizando
myTexture si usted utiliza el mtodo por defecto. Usted puede tener ms control
sobre esto al proporcionar su propio arreglo de ids (strings) para cada objecto cuando

- 391 -
construya su AssetBundle con BuildPipeline.BuildAssetBundleExplicitAssetNames.

Puedo yo re-utilizar mis AssetBundles en otro juego?


Los AssetBundles le permiten a usted compartir contenido entre diferentes juegos. El
requerimiento is que cualquier assets que sea referenciado por GameObjects en su
AssetBundle debe ser incluido en el AssetBundle. Para asegurarse que los assets
referenciados sean incluidos en el AssetBundle cuando son construidos usted puede
pasar la opcin BuildAssetBundleOptions.CollectDependencies.

Un AssetBundle construido ahora puede ser utilizable con


versiones futuras de Unity?
Los AssetBundles pueden contener una estructura llamada un type tree que permite
informacin acerca de los tipos de assets para entender correctamente entre
diferentes versiones de Unity. En plataformas de escritorio, el type tree es incluido por
defecto pero puede desactivarse al
pasar BuildAssetBundleOptions.DisableWriteTypeTree a la funcin BuildAssetBundle.
Los Webplayers intrinsecamente dependen en el type tree por lo que siempre son
incluido (ie, la opcin DisableWriteTypeTree no tiene efecto). Type trees nunca son
incluidos para los assetbundles mviles o de consola y por lo tanto usted necesitar
re-construir estos bundles cuando el formato de serializacin cambie. Esto puede
suceder en nuevas versiones de Unity. (Excepto para lanzamientos de arreglos a bugs)
Tambin sucede si usted agrega o quita campos serializados en monobehaviour que
son incluidos en el assetbundle. Cuando cargue un AssetBundle, Unity va a intentar
darle un mensaje de error si el AssetBundle debe ser re-construido.

Cmo puedo listar los objetos en un AssetBundle?


Usted puede utilizar AssetBundle.LoadAllAssets para recuperar un arreglo que
contenga todos los objetos del AssetBundle. No es posible obtener una lista de los
identificados directamente. Una solucin alternativa comn es mantener un TextAsset
(asset de texto) separado para mantener los nombres de los assets en el AssetBundle.

Cmo los AssetBundles pueden referenciar otros assets en


otros AssetBundles
Suponga que el Bundle A contiene un Prefab que tiene un material y una textura.

- 392 -
Bundle B tiene una escena que tiene una instancia del mismo prefab. Bundle B
necesita acceder al material. Al menos de que el material sea incluido en un asset
bundle especfico, ser incluido en ambos bundle A y B.

- 393 -
Reduciendo el Tamao del Archivo de la
Construccin
Mantener el tamao del archivo de la app construida a un mnimo a menudo es
importante, especialmente para dispositivos mviles o para tiendas de apps que
imponen un limite de tamao. El primer paso en reducir el tamao es determina qu
assets contribuyen ms a esto, ya que estos assets son los candidatos ms probables
para la optimizacin. Usted puede encontrar esta informacin del Editor Log (Registro
del Editor) justo despus de que usted ha realizado la construccin (seleccione Open
Editor Log del men panel pequeo en la esquina derecha de la ventana de la
Consola).

El Editor log (registro del editor) justo despus de una construccin

El registro proporciona un resumen de assets clasificados por el tipo y luego escucha


a todos los assets en individual en orden de su contribucin al tamao. Tpicamente,
cosas como texturas, msica y videos tomar la mayora de espacio mientras que
scripts, niveles y shaders son insignificante. Tenga en cuenta que el File
Headers (encabezado del archivo) mencionado en el resumen no son assets en s. Los
headers (encabezados) son en realidad datos extra que son agregados a los archivos
assets raw (crudos) para almacenar referencias y ajustes. Los headers normalmente
hacen muy poca diferencia al tamao del asset pero el valor puede ser ms grande si
usted tiene un nmero de assets grandes en la carpeta Resources.

El log (registro) le ayuda a usted identificar assets que usted podra querer quitar o
optimizar pero usted debera considerar lo siguiente antes de trabajar:

Unity re-programa los assets importados a sus propios formatos internos, por lo que
la opcin del tipo de fuente de asset no es relevante. Por ejemplo, si usted tiene una
textura multi-capa de Photoshop en el proyecto entonces ser aplanado y
comprimido antes de construir. Al exportar la textura como un archivo PNG no va
hacer diferencia al tamao de construccin, por lo que debe atenerse al formato que
sea ms conveniente para usted durante el desarrollo.

Unity despoja la mayora de los assets no utilizados durante la construccin, por lo


que usted no gana nada al quitar los assets manualmente del proyecto. Los nicos

- 394 -
assets que no son quitados son los scripts (por lo por lo general son muy pequeos
igual) y los assets en la carpeta Resources (ya que Unity no puede determina cules
de esto sern necesitados y cules no). Con esto en mente, usted debera asegurarse
que los assets en la carpeta Resources solo son aquellos que realmente se necesitan
en el juego. Usted podra remplazar los assets en los Resources
con AssetBundles para cargar los assets dinmicamente y por lo tanto reducir el
tamao del reproductor.

Sugerencias para Reducir el Tamao de Construccin


Texturas
En la mayora las texturas ocupan el mayor espacio en la construccin. La primera
cosa para hacer es utilizar formatos de texturas comprimidos (DXT(Desktop
platforms) o PVRTC) dnde usted pueda.

Si eso no hace que el tamao disminuya, intente reducir el tamao de las texturas. El
truco aqu es que usted no necesita modificar el contenido actual de la fuente.
Simplemente seleccione la textura en la vista del Proyecto y configure el Max Size de
los Import Settings (Ajustes de Importacin). Es una buena idea acercarse en un
objeto que utiliza la textura, luego ajustar el Max Size hasta que comience a verse
peor en la Scene View.

- 395 -
Cambiar el tamao mximo de la textura no va a
afectar su asset de textura, simplemente su resolucin en el juego

La siguiente tabla muestra qu tanto espacio del formato de la imagen toma en bytes
por pixel:

Compresin Consumo de Memoria (bytes/pixel)


Standalone & WebGL
RGB Crunched DXT1 variable
RGBA Crunched DXT5 variable
RGB Compressed DXT1 0.5 bpp
RGBA Compressed DXT5 1 bpp
RGB 16bit 2 bpp
RGB 24bit 3 bpp
Alpha 8bit 1 bpp

- 396 -
Compresin Consumo de Memoria (bytes/pixel)
RGBA 16bit 2 bpp
RGBA 32bit 4 bpp
iOS
RGB Compressed PVRTC 2 bits 0.25 bpp (bytes/pixel)
RGBA Compressed PVRTC 2 bits 0.25 bpp
RGB Compressed PVRTC 4 bits 0.5 bpp
RGBA Compressed PVRTC 4 bits 0.5 bpp
RGB 16bit 2 bpp
RGB 24bit 3 bpp
Alpha 8bit 1 bpp
RGBA 16bit 2 bpp
RGBA 32bit 4 bpp
Android
RGB Compressed DXT1 0.5 bpp (bytes/pixel)
RGBA Compressed DXT5 1 bpp
RGB Compressed ETC1 0.5 bpp
RGB Compressed PVRTC 2 bits 0.25 bpp (bytes/pixel)
RGBA Compressed PVRTC 2 bits 0.25 bpp
RGB Compressed PVRTC 4 bits 0.5 bpp
RGBA Compressed PVRTC 4 bits 0.5 bpp
RGB 16bit 2 bpp
RGB 24bit 3 bpp
Alpha 8bit 1 bpp
RGBA 16bit 2 bpp
RGBA 32bit 4 bpp
La formula para el tamao total de almacenamiento de imagen es width * height *
bpp. Si usted est utilizando mipmaps entonces el almacenamiento ser tres veces
ms grande que una sola imagen.

Por defecto Unity comprime todas las texturas cuando se importe. Para un flujo de
trabajo rpido en el editor, usted puede apagar la compresin desde las Preferences
(preferencias) pero todas las texturas sern comprimidas en la construccin sin
importar acerca de este ajuste.

- 397 -
Meshes y Animaciones
Meshes y los Clips de Animacin importados pueden ser comprimidos para que
tomen menos espacio en el archivo de su juego. Las compresiones pueden prenderse
en los ajustes de importacin del Mesh.

La compresin Mesh y de Animaciones utiliza quantization (cuantizacin), lo cual


significa que toma menos espacio pero la compresin puede introducir algunas
imprecisiones. Experimente con qu nivel de compresin es aceptable para sus
modelos.

Tenga en cuenta que la compresin mesh solamente produce archivos de datos


pequeos y no utiliza menos memoria en tiempo de ejecucin. La reduccin de
keyframe de animacin produce archivos de datos ms pequeos y utiliza menos
memoria en tiempo de ejecucin y generalmente usted siempre debera tenerlo
activado.

DLLs
Por defecto, Unity incluye solamente los siguientes DLLs en el reproductor construido:

mscorlib.dll

Boo.Lang.dll

UnityScript.Lang.dll

UnityEngine.dll

Cuando se construya un reproductor, usted debera evitar cualquier dependencia


en System.dll o System.Xml.dll. Unity no incluye estas en el reproductor construido por
defecto pero si usted utiliza sus clases, entonces sern incluidas. Estos DLLs van a
agregar aproximadamente un megabyte al tamao de almacenamiento del
reproductor. Si usted necesita parse XML en su juego, usted puede utilizar una librera
como Mono.Xml.zip como una pequea alternativa a las libreras del sistema.
Mientras que la mayora de los contenedores genricos son contenidos en mscorlib,
Stack<> y otros pocos estn en System.dll, por lo que usted debera evitar estos como
sea posible.

- 398 -
Como usted puede ver, Unity est incluyendo System.Xml.dll y System.dll, cuando
construya un reproductor

Reduciendo El tamao de la Librera Mvil .NET


Unity soporta dos niveles de compatibilidad de API .NET para algunos dispositivos
mviles: .NET 2.0 y un sub-conjunto de .NET 2.0. Usted puede seleccionar el nivel
apropiado para su construccin en los Player Settings.

El perfil de API .NET 2.0 es muy similar al API completo .NET 2.0. La mayora de rutinas
de libreras estn completamente implementadas por lo que esta opcin ofrece la
mejor compatibilidad con cdigo .NET pre-existente. Sin embargo, para muchos de los
juegos, la librera completa no se necesita y el cdigo superfluous toma un espacio de
memoria valioso.

Para evitar memoria desperdiciada, Unity tambin soporta el perfil de API que es sub-
conjunto de .NET 2.0. Este es muy similar al perfil Mono monotouch, por lo que
muchas limitaciones del perfil monotouch tambin aplica al perfil del sub-
conjunto .NET 2.0 de Unity. (Ms informacin acerca de las limitaciones del perfil
monotouch puede encontrarse aqu). Muchas library routines que no son
comnmente necesitadas en los juegos son dejadas afuera de este perfil con el fin de
ahorrar memoria. Sin embargo, esto tambin significa que el cdigo con
dependencias en esas routines no van a funcionar correctamente. Esta opcin puede
ser una optimizacin til pero usted debera revisar que ese cdigo existente todava

- 399 -
funciona despus de que es aplicado.

- 400 -
Social API (API Social)
El API Social es el punto de acceso de Unity para caractersticas sociales, tal como:

Perfiles de usuario

Lista de amigos

Logros

Estadsticas / Clasificaciones

Proporciona una interfaz unificada a diferentes back-ends sociales, tal como XBox
Live o el GameCenter, y es utilizado principalmente por programadores en el proyecto
del juego.

La API Social es una API asincrnica, y la manera tpica de utilizarla es al hacer un


llamado de funcin y registrar un callback a cuando esa funcin se complete. La
funcin asincrnica puede tener efectos secundarios, tal como popular ciertas
variables de estado en el API, y el callback debera contener los datos del servidor en
ser procesados.

La clase Social reside en el namespace de UnityEngine por lo que siempre est


disponible pero otras clases de la API Social se mantienen en sus propios namespace,
UnityEngine.SocialPlatforms. Adicionalmente, las implementaciones de la API Social
estn en un sub-namespace, como SocialPlatforms.GameCenter.

Aqu hay un ejemplo (JavaScript) acerca de cmo uno podra utilizar la API Social:
import UnityEngine.ocialPlatforms;

function Start () {
// Authenticate and register a ProcessAuthentication callback
// This call needs to be made before we can proceed to other calls in the
Social API
Social.localUser.Authenticate (ProcessAuthentication);
}

// This function gets called when Authenticate completes


// Note that if the operation is successful, Social.localUser will contain data
from the server.
function ProcessAuthentication (success: boolean) {
if (success) {
Debug.Log ("Authenticated, checking achievements");

// Request loaded achievements, and register a callback for processing


them
Social.LoadAchievements (ProcessLoadedAchievements);

- 401 -
}
else
Debug.Log ("Failed to authenticate");
}

// This function gets called when the LoadAchievement call completes


function ProcessLoadedAchievements (achievements: IAchievement[]) {
if (achievements.Length == 0)
Debug.Log ("Error: no achievements found");
else
Debug.Log ("Got " + achievements.Length + " achievements");

// You can also call into the functions like this


Social.ReportProgress ("Achievement01", 100.0, function(result) {
if (result)
Debug.Log ("Successfully reported achievement progress");
else
Debug.Log ("Failed to report achievement");
});
}

Aqu hay un ejemplo usando C#.


using UnityEngine;
using UnityEngine.SocialPlatforms;

public class SocialExample : MonoBehaviour {

void Start () {
// Authenticate and register a ProcessAuthentication callback
// This call needs to be made before we can proceed to other calls in
the Social API
Social.localUser.Authenticate (ProcessAuthentication);
}

// This function gets called when Authenticate completes


// Note that if the operation is successful, Social.localUser will contain
data from the server.
void ProcessAuthentication (bool success) {
if (success) {
Debug.Log ("Authenticated, checking achievements");

// Request loaded achievements, and register a callback for


processing them
Social.LoadAchievements (ProcessLoadedAchievements);
}
else
Debug.Log ("Failed to authenticate");
}

// This function gets called when the LoadAchievement call completes


void ProcessLoadedAchievements (IAchievement[] achievements) {
if (achievements.Length == 0)
Debug.Log ("Error: no achievements found");
else
Debug.Log ("Got " + achievements.Length + " achievements");

// You can also call into the functions like this


Social.ReportProgress ("Achievement01", 100.0, result => {
if (result)

- 402 -
Debug.Log ("Successfully reported achievement progress");
else
Debug.Log ("Failed to report achievement");
});
}
}

Para ms informacin en la API Social, revise la referencia de Scripting de la API Social

- 403 -
Serializacin JSON
La caracterstica de serializacin JSON convierte objetos a y del formato JSON. Esto
puede ser til cuando interactu con servicios web, o simplemente para empacar y
desempacar datos a un formato de texto fcil.

Para informacin acerca de la clase JsonUtility, por favor ver la pgina de ScriptRef de
Unity JsonUtility.

Su simple uso
La caraterstica de serializacin JSON est construida alrededor de una nocin de un
JSON estructurado, que significa que usted describe que variables sern almacenadas
en sus datos JSON al crear una clase o estructura. Por ejemplo:
[Serializable]
public class MyClass
{
public int level;
public float timeElapsed;
public string playerName;
}
Esto define una clase plana de C# que contiene tres variables - level, timeElapsed,
y playerName- y la marca como Serializable, que es necesario para que trabaje con el
serializador JSON. Usted luego puede crear una instancia de esto as:
MyClass myObject = new MyClass();
myObject.level = 1;
myObject.timeElapsed = 47.5f;
myObject.playerName = "Dr Charles Francis";
Y serializarlo a formato JSON utilizando JsonUtility.ToJson:
string json = JsonUtility.ToJson(myObject);
Esto resultara en la variable json conteniendo el string:
{"level":1,"timeElapsed":47.5,"playerName":"Dr Charles Francis"}
Para convertir el JSON devuelta a un objeto, utilice JsonUtility.FromJson:
myObject = JsonUtility.FromJson<MyClass>(json);
Esto va a crear una nueva instancia de MyClass y va a configurar los valores el este
utilizando los datos JSON. Si los datos JSON contiene valores que no mapean a
campos en MyClass entonces esos valores sern simplemente ignorados, y si a los
datos JSON le estn faltando valores para los campos en MyClass, entonces esos
campos sern dejados en sus valores construidos en el objeto devuelto.

El serializador JSON actualmente no soporta trabajar con JSON sin estructura (i.e.

- 404 -
navegar y editar el JSON como un rbol arbitrario de valores-key en pares). Si used
necesita hacer esto, usted debera mirar una librera JSON que contenga ms
caractersticas.

Sobre-escribiendo objetos con JSON


Tambin es posible tomar datos JSON y serializarlos sobre un objeto que est ya
creado, sobre-escribiendo cualquier dato que est ya presente:
JsonUtility.FromJsonOverwrite(json, myObject);
Cualquier campo en el objeto para el cual el JSON no contiene un valor ser dejado sin
cambiar. Este mtodo le permite a usted mantener asignaciones a un mnimo al re-
utilizar objetos que usted ha creado previamente, y tambin para patch objetos al
deliberadamente sobre-escribirlos con JSON que solo contiene un pequeo sub-
conjunto de campos.

Tenga en cuenta que la API de JSON Serializer soporta las sub-


clases MonoBehaviour y ScriptableObject al igual que structs/clases planas. Sin
embargo, cuando de-serialice JSON a sub-clases
de MonoBehaviour o ScriptableObject, usted debe utilizar FromJsonOverwrite;
FromJson no es soportado y lanzar una excepcin.

Tipos Soportados
El API soporta cualquier sub clase MonoBehaviour ScriptableObject, o
clase/struct plana con el atributo [Serializable]. El objeto que usted pasa es
alimentado al serializador de Unity estndar para procesar, por lo que las mismas
reglas y limitaciones aplican como sucede en el Inspector; solamente los campos son
serializados, y tipos como Dictionary&lt;&gt; no son soportados.

Pasar otros tipos directamente a la API, por ejemplo tipos primitivos o arreglos,
actualmente no se soporta. Por ahora usted necesitar envolver esos tipos en
una class o struct o algo parecido.

En el Editor solamente, hay una API paralela - EditorJsonUtility - que le permite a


usted serializar cualquier tipo derivado de UnityEngine.Objectambos para y desde
JSON. Esto producir JSON que contiene el mismo dato que la representacin YAML
del objeto.

- 405 -
Rendimiento
Pruebas benchmark han mostrado JsonUtility en ser significativamente ms
rpido que soluciones JSON .NET popular (con un poco ms de caractersticas que
algunos de ellos).

Uso de memoria GC est a un mnimo:

ToJson() asigna memoria GC solamente para el string devuelto.

FromJson() asigna memoria GC solamente para el objeto devuelto, al igual que otros
sub-objetos necesitados (e.g si usted de-serialica un objeto que contiene un arreglo,
entonces la memoria GC ser asignada para ese arreglo).

FromJsonOverwrite() asigna memoria GC solamente como sea necesario para


campos escritos (por ejemplo strings y arreglos9. Si todos los campos siendo sobre-
escritos por el JSON son escritos con un valor, esto no va a asignar memoria GC.

Utilizar el API JsonUtility de un hilo en el fondo es permitido Como con cualquier


cdigo multi-hilo, usted debera tener cuidado en no acceder o alterar un objeto en
un hilo mientras este est siendo serializado/de-serializado en otro.

Controlando el output de ToJson()


ToJson soporta la impresin bonita del output del JSON. Est apagado por defecto
pero usted lo puede prender pasando true como el segundo parmetro.

Los campos pueden ser omitidos desde el output utilizando el


atributo [NonSerialized] .

Utilizando FromJson() cuando el tipo no es conocido con


tiempo
De-serialice el JSON en una clase o struct que contiene campos comunes, y luego
utilice los valores de esos campos para que trabajen qu tipo usted quiere. Luego de-
serialice una segunda vez a ese tipo.

- 406 -
El Streaming de Assets
La mayora de los assets en Unity son combinados al proyecto cuando es construido.
Sin embargo, a veces es til colocar los archivos en un sistema de archivos normal en
el equipo destino para hacerlos accesibles va el nombre de una ruta. Un ejemplo de
esto es la implementacin de un archivo de pelcula en dispositivos iOS; el archivo
original de la pelcula debe estar disponible desde una ubicacin en el sistema de
archivos para ser reproducida por la funcin PlayMovie.

Cualquier archivo colocado en una carpeta llamada StreamingAssets (sensible a


maysculas) en el proyecto de Unity ser copiado palabra por palabra a una carpeta
en particular del equipo destino. Usted puede recuperar la carpeta utilizando la
propiedad Application.streamingAssetsPath. Siempre es bueno
utilizar Application.streamingAssetsPath para obtener la ubicacin de la
carpeta StreamingAssets, siempre va a apuntar a la ubicacin correcta en la
plataforma dnde la aplicacin est corriendo.

La ubicacin de esta carpeta varia por plataforma. Por favor tenga en cuenta que
estas son sensibles a las maysculas:

En un computador de escritorio (Mac OS o Windows) la ubicacin de los archivos se


puede obtener con el siguiente cdigo:
path = Application.dataPath + "/StreamingAssets";

path = Application.dataPath + "/Raw";

path = "jar:file://" + Application.dataPath + "!/assets/";


Tenga en cuenta: Los archivos .dll ubicados en la carpeta StreamingAssets no
participan en la compilacin.

En iOS, utilice:

En Android, utilice: En Android, los archivos son contenidos con un archivo


comprimido .jar (el cual es esencialmente el mismo formato que los archivos estndar
zip-comprimidos). Esto significa que si usted no utiliza la clase WWW de Unity para
recuperar el archivo, usted necesita utilizar software adicional para ver dentro del
archivo .jar y obtener el archivo.

- 407 -
- 408 -
ScriptableObject
El ScriptableObject es una clase que le permite a usted almacenar grandes cantidades
de datos compartidos independientes de instancias de script. No confunda esta clase
con la muy similar SerializableObject, la cual es una clase del editor y llena un
propsito diferente. Considere por ejemplo que usted ha hecho un prefab con un
script que tiene un arreglo de millones de enteros. El arreglo ocupa 4MB de memoria
y su dueo es el prefab. Cada vez que usted instancia el prefab, usted va a obtener
una copia de ese arreglo. Si usted ha creado 10 game objects, entonces usted
terminara con 40MB de datos del arreglo para las 10 instancias.

Unity serializa todos los tipos primitivos, strings, arreglos, listas, tipos especficos para
Unity tal como Vector3 y sus clases personalizadas con el atributo Serializable
como copies perteneciendo al objeto en el cual fue declarado. Esto significa que si
usted ha creado un ScriptableObject y almacena millones de enteros en un arreglo,
entonces declara que el arreglo ser almacenado con la instancia. Las instancias son
pensadas en sus propios datos individuales. Los campos ScriptableObject, o cualquier
campo UnityEngine.Object, tal como MonoBehaviour, Mesh, GameObject y as, son
almacenados por referencia opuesto a un valor. Si usted tiene un script con una
referencia al ScriptableObject con un milln de enteros, Unity va a solamente guardar
una referencia al ScriptableObject en los datos de script. El ScriptableObject por el
contrario, almacenada el arreglo. 10 instancias de un prefab que tiene una referencia
ScriptableObject , que mantiene 4MB de datos, va a pesar en total 4MB y no 40MB
como se discutio en el otro ejemplo.

El caso intencionado para utilizar el ScriptableObject es reducir el uso de memoria al


evitar la copias de valores, pero usted tambin puede utilizarlo para definir conjuntos
de datos conecta-bles. Un ejemplo de esto sera imaginar una tienda NPC en un juego
RPG. Usted puede crear mltiples assets de su ScriptableObject ShopContents
personalizado, cada uno definiendo un conjunto de items que estn disponibles para
compra. En un escenario dnde el juego tiene tres zonas, cada zona puede ofrecer
diferentes tipos de items. El script de su tienda podra referenciar un objeto
ShopContents que define qu items estn disponibles. Por favor ver la referencia de
scripting para ejemplos.

Once you have defined a ScriptableObject-derived class, you can use

- 409 -
the CreateAssetMenu attribute to make it easy to create custom assets using your
class.

Recomendacin: Cuando trabaje con referencias ScriptableObject en el inspector,


usted puede hacer doble click en el campo de referencia para abrir el inspector para
su ScriptableObject. Usted tambin puede crear un editor personalizado para definir
el aspecto del inspector para su tipo para ayudar a manejar los datos que representa.

- 410 -
Temas Avanzados del Editor

Esta seccin revela ms acerca de lo que sucede debajo del capote del Editor, desde
cmo los Assets y las Escenas son almacenadas, hasta personalizar el pipeline de
construccin y extender el editor en s. Esta seccin va a ser til para desarrolladores
y equipos que estn cmodos con lo bsico de trabajar con el Editor de Unity.

- 411 -
Construir el Pipeline de un Reproductor
Cuando se construya un reproductor, a veces usted querr modificar el reproductor
construido de cierta manera. Por ejemplo, usted podra querer agregar un icono
personalizado, copie alguna documentacin a lado del reproductor o construya un
instalador. Usted podra querer hacer esto va el scripting del editor
utilizando BuildPipeline.BuildPlayer para ejecutar la construccin y luego seguirla con
el cdigo de postprocessing (post-procesamiento) que usted necesite:-
// JS example.

import System.Diagnostics;

class ScriptBatch {
@MenuItem("MyTools/Windows Build With Postprocess")
static function BuildGame() {
// Get filename.
var path = EditorUtility.SaveFolderPanel("Choose Location of Built
Game", "", "");
var levels : String[] = ["Assets/Scene1.unity", "Assets/Scene2.unity"];

// Build player.
BuildPipeline.BuildPlayer(levels, path + "/BuiltGame.exe",
BuildTarget.StandaloneWindows, BuildOptions.None);

// Copy a file from the project folder to the build folder, alongside
the built game.
FileUtil.CopyFileOrDirectory("Assets/WebPlayerTemplates/Readme.txt",
path + "Readme.txt");

// Run the game (Process class from System.Diagnostics).


var proc = new Process();
proc.StartInfo.FileName = path + "BuiltGame.exe";
proc.Start();
}
}

// C# example.
using UnityEditor;
using System.Diagnostics;

public class ScriptBatch


{
[MenuItem("MyTools/Windows Build With Postprocess")]
public static void BuildGame ()
{
// Get filename.
string path = EditorUtility.SaveFolderPanel("Choose Location of Built
Game", "", "");
string[] levels = new string[] {"Assets/Scene1.unity",
"Assets/Scene2.unity"};

// Build player.

- 412 -
BuildPipeline.BuildPlayer(levels, path + "/BuiltGame.exe",
BuildTarget.StandaloneWindows, BuildOptions.None);

// Copy a file from the project folder to the build folder, alongside
the built game.
FileUtil.CopyFileOrDirectory("Assets/WebPlayerTemplates/Readme.txt",
path + "Readme.txt");

// Run the game (Process class from System.Diagnostics).


Process proc = new Process();
proc.StartInfo.FileName = path + "BuiltGame.exe";
proc.Start();
}
}

Atributo de PostProcessBuild
Usted tambin puede utilizar el parmetro postprocessOrder
del PostProcessBuildAttribute para definir el orden de ejecucin para su mtodos de
construccin y llamar sus scripts externos con la clase Process de estos mtodos
mostrados en la ltima seccin. Este parmetro es utilizado para ordenar los mtodos
de construccin de menor a mayor, y usted puede asignar cualquier valor negativo o
positivo a l.

- 413 -
Argumentos de la lnea de comandos
Por lo general, Unity se ejecutar haciendo doble click en el icono del escritorio, pero
tambin es posible ejecutarlo desde la lnea de comandos (ej. la terminal de MacOS o
una ventana de smbolo del sistema en Windows). Cuando se inicia de esta manera,
Unity puede recibir comandos e informacin al iniciarse, lo cual puede resultar muy
til para pruebas automatizadas, compilaciones automticas y otras tareas de
produccin.

En MacOS, usted puede ejecutar Unity desde el terminal escribiendo:


/Applications/Unity/Unity.app/Contents/MacOS/Unity

"C:\Program Files\Unity\Editor\Unity.exe"

"C:\Program Files (x86)\Unity\Editor\Unity.exe"


Los juegos standalone de Unity pueden ejecutarse en una manera similar.

Activando Unity Silenciosamente


En MacOS, usted puede ejecutar Unity desde el terminal escribiendo:
/Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -serial
R3-XXXX-XXXX-XXXX-XXXX-XXXX -username 'JoeBloggs@example.com' -password
'MyPassw0rd'
mientras que en Windows 64 bit, usted debe escribir
"C:\Program Files\Unity\Editor\Unity.exe" -quit -batchmode -serial R3-XXXX-
XXXX-XXXX-XXXX-XXXX -username "JoeBloggs@example.com" -password "MyPassw0rd"

"C:\Program Files (x86)\Unity\Editor\Unity.exe" -quit -batchmode -serial R3-


XXXX-XXXX-XXXX-XXXX-XXXX -username "JoeBloggs@example.com" -password
"MyPassw0rd"
Como se mencion anteriormente, al editor e incluso a los juegos compilados se les
puede pasar opcionalmente comandos e informacin adicional en el arranque. Esto
se hace usando las siguientes opciones de lnea de comandos:

-assetServerUpdate <IP[:port] projectName Obligue una actualizacin del proyecto en


username password [r <revision>]> el Asset Server dado por IP:port. El port
(puerto) es opcional y si no es dado, se asumen
que es uno estndar (10733). Es recomendable
utilizar este comando en conjunto con el

- 414 -
argumento -projectPath para asegurar que
usted est trabajando con el proyecto correcto.
Si no hay un nombre de proyecto dado
entonces el ltimo proyecto abierto en Unity
es utilizado. Si no existe un proyecto con la
ruta dada por -projectPath entonces uno es
creado automticamente.
Corra Unity en modo batch (modo por lotes).
Esto siempre debera ser utilizado en conjunto
con otros comandos de linea de argumentos ya
que asegura que ninguna ventana emergente
aparezca y elimine la necesidad de una
intervencin humana. Cuando una excepcin
ocurre durante la ejecucin de cdigo script,
las actualizaciones del asset server fallan u
otras operaciones falla, Unity va a
inmediatamente salirse con un cdigo de
-batchmode
retorno de 1. Tenga en cuenta que en batch
mode ( modo por lotes), Unity va a enviar una
versin minima de su output de registro a la
consola. Sin embargo, los Log Files todava
contienen la informacin completa de registro.
Tenga en cuenta que abrir un proyecto en
batch mode mientras el Editor tiene el mismo
proyecto abierto, no es soportado. Solo una
sola instancia de Unity puede ejecutarse a la
vez.
Construir un reproductor standalone Linux de
-buildLinux32Player <pathname> 32-bit (e.g. -buildLinux32Player
path/to/your/build).
Construir un reproductor standalone Linux de
-buildLinux64Player <pathname> 64-bit (e.g. -buildLinux64Player
path/to/your/build).
Construir un reproductor standalone Linux
combinado de 32-bit y 64-bit (e.g.
-buildLinuxUniversalPlayer <pathname>
-buildLinuxUniversalPlayer
path/to/your/build).
Construir un reproductor standalone Mac de
-buildOSXPlayer <pathname> 32-bit (e.g. -buildOSXPlayer
path/to/your/build.app).
Construir un reproductor standalone Mac de
-buildOSX64Player <pathname> 64-bit (e.g. -buildOSX64Player
path/to/your/build.app).
-buildOSXUniversalPlayer <pathname> Construir un reproductor standalone Mac

- 415 -
combinado de 32-bit y de 64-bit (e.g.
-buildOSXUniversalPlayer
path/to/your/build.app).
Permite la seleccin de un objetivo de
construccin activo antes de que un proyecto
sea cargado. Las opciones posibles son:
-buildTarget <name> win32, win64, osx, linux, linux64, ios,
android, web, webstreamed, webgl, xbox360,
xboxone, ps3, ps4, psp2, wsa, wp8, bb10,
tizen, samsungtv.
Construir un Reproductor Web (e.g.
-buildWebPlayer <pathname>
-buildWebPlayer path/to/your/build).
Construir un Reproductor Web que est
-buildWebPlayerStreamed <pathname> streamed (e.g. -buildWebPlayerStreamed
path/to/your/build).
Construir un reproductor standalone Windows
-buildWindowsPlayer <pathname> de 32-bit (e.g. -buildWindowsPlayer
path/to/your/build.exe).
Construir un reproductor standalone Windows
-buildWindows64Player <pathname> de 64-bit (e.g. -buildWindows64Player
path/to/your/build.exe).
Una caracterstica de depuracin detallada.
StackTraceLogging permite que las
caractersticas estn controladas para que den
-cleanedLogFile
un registro detallado. Todos los ajustes
permiten None, Script Only y Full en ser
seleccionados.
-createProject <pathname> Crear un proyecto vaco en la ruta indicada.
Filtra las pruebas del editor por categoras.
-editorTestsCategories
Separe las categoras de prueba con una coma.
Filtra las pruebas del editor por nombres.
-editorTestsFilter Separe los nombres de las pruebas con una
coma.
Ruta dnde el archivo resultante sera
colocado. Si la ruta es una carpeta, un nombre
-editorTestsResultFile de archivo predeterminado ser utilizado. Si
no se especifica, los resultados sern puestos
en la carpeta raz del proyecto.
-executeMethod Ejecuta el mtodo esttico tan pronto Unity
<ClassName.MethodName> comienza, el proyecto est abierto y despus
de que la actualizacin opcional del asset
server se haya realizado. Esto puede ser usado

- 416 -
para hacer una integracin continua, realizar
pruebas de Unity, hacer construcciones,
preparar algunos datos, etc. Si usted quiere
retornar un error desde el proceso de la linea
de comandos, usted puede o lanzar una
excepcin que va a causar que Unity se salga
con 1 o llamar EditorApplication.Exit con un
cdigo diferente a cero. Si usted quiere pasar
parmetros usted puede agregarlos a la linea
de comandos y recuperarlos dentro del mtodo
utilizando
System.Environment.GetCommandLineArgs.
Para utilizar -executeMethod, usted
necesita colocar el script que encierra en la
carpeta Editor. El mtodo para ser ejecutado
debe ser definido como static.
Exporta un paquete dada una ruta (o un
conjunto de rutas dadas). exportAssetPath es
una carpeta (relativa a la raz del proyecto de
-exportPackage <exportAssetPath1 Unity) para exportar del proyecto de Unity
exportAssetPath2 ExportAssetPath3 y exportFileName es el nombre del paquete.
exportFileName> Actualmente, esta opcin puede solamente
exportar carpetas enteras a la vez. Este
comando normalmente necesita ser usado con
el argumento -projectPath .
Haga que el editor utilice Direct3D 9 para
renderizar. Normalmente el API de grficos
-force-d3d9 (Windows solamente)
depende en los player settings (tpicamente cae
en D3D11).
Haga que el editor utilice Direct3D 11 para
renderizar. Normalmente el API de grficos
-force-d3d11 (Windows solamente)
depende en los player settings (tpicamente cae
en D3D11).
Hace que el editor utilice OpenGL 3/4 core
profile para renderizar. El editor intenta
utilizar la mejor versin OpenGL disponible y
-force-glcore (Windows solamente)
todas las extensiones OpenGL expuestas por
los drivers de OpenGL. Si la plataforma no es
soportada, Direct3D ser utilizado.
Similar a -force-glcore pero solicita una
versin de contexto OpenGL especifica. Los
-force-glcoreXY (Windows solamente)
valores aceptados para XY: 32, 33, 40, 41, 42,
43, 44 o 45.
-force-gles (Windows solamente) Hace que el editor utilice OpenGL para
sistemas embebidos de renderizado. El editor

- 417 -
intenta utilizar la mejor versin OpenGL ES
disponible y todas las extensiones OpenGL ES
expuestas por los drivers de OpenGL.
Similar a -force-gles pero solicita una versin
-force-glesXY (Windows solamente) de contexto OpenGL ES especfica. Los
valores aceptados para XY: 30, 31 o 32.
Utilizado en conjunto con -force-glcoreXY,
pero previene la revisin de extensiones
-force-clamped (Windows solamente) adicionales OpenGL permitiendo que haya una
ejecucin entre plataformas con las mismas
rutas de cdigo
Haga que el editor corra como si hubiera una
licencia gratuita de Unity en la maquina,
-force-free
incluso si una licencia Unity Pro est
instalada.
Importe el package dado. Ningn dialogo de
-importPackage <pathname>
importacin es mostrado.
Especifique dnde los archivos de registro del
-logFile <pathname> editor o Windows/Linux/OSX standalone
sern escritos.
Cuando se corra en batch mode, no inicialize
en absoluto el dispositivo grfico. Esto hace
que sea posible correr sus flujos de trabajo
automatizados en maquinas que no tienen un
GPU (los flujos de trabajo automatizados solo
-nographics funcionan, cuando usted tiene una ventana
enfocada, de lo contrario usted no podr enviar
comandos de input simulados). Por favor
tenga en cuenta -nographics no le permitir a
usted bake GI en OSX, ya que Enlighten
requiere una aceleracin de GPU.
La clave del usuario - necesitada cuando se
-password <password>
activa. Esta opcin es nueva en Unity 5.1.
-projectPath <pathname> Abrir el proyecto en la ruta indicada.
Salga del editor de Unity despus de que otros
comandos hayan terminado de ejecutarse.
-quit Tenga en cuenta que esto puede hacer que los
mensajes de error no se muestren (pero se
pueden ver en el archivo Editor.log).
-returnlicense Retorna la licencia actualmente activa al
license server. Por favor permita unos pocos
segundos antes de que el archivo de licencia
sea removido, ya que Unity necesita

- 418 -
comunicarse con el licences server. Esta
opcin es nueva en Unity 5.0.
Corra pruebas del editor del proyecto. Este
argumento requiere projectPath y es bueno
para correr con el
-runEditorTests
argumento batchmode. quit no se requiere ya
que el editor va a cerrarse automticamente
despus de que run haya terminado.
Activa Unity con la clave serial especificada.
Es recomendado pasar los argumentos -
batchmode -quit tambin, con el fin de salirse
de Unity cuando finalice, si se est utilizando
esta activacin de Unity automatizada. Por
favor permtale unos segundos antes de que el
archivo de licencia sea creado, ya que Unity
-serial <serial>
necesita comunicarse con el license server.
Asegrese de que la la carpeta para el archivo
de la licencia exista y tenga unos permisos
apropiados antes de ejecutar Unity con este
argumento. En caso de que la activacin falle,
ver el Editor.log para ms informacin. Esta
opcin es nueva en Unity 5.0.
-silent-crashes No muestre un dialogo de crash.

Ejemplo de uso
// C# example
using UnityEditor;
class MyEditorScript
{
static void PerformBuild ()
{
string[] scenes = { "Assets/MyScene.unity" };
BuildPipeline.BuildPlayer(scenes, ...);
}
}

// JavaScript example
static void PerformBuild ()
{
string[] scenes = { "Assets/MyScene.unity" };
BuildPipeline.BuildPlayer(scenes, ...);
}
El siguiente comando ejecuta Unity en modo batch, ejecuta el
mtodo MyEditorScript.MyMethod y luego se cierra al finalizar.

Windows: C:\program files\Unity\Editor\Unity.exe -quit -batchmode


-executeMethod MyEditorScript.MyMethod

- 419 -
Mac OS: /Applications/Unity/Unity.app/Contents/MacOS/Unity -quit
-batchmode -executeMethod MyEditorScript.MyMethod

El siguiente comando ejecuta Unity en modo batch y actualiza desde el servidor de


assets utilizando la ruta del proyecto suministrado. El mtodo se ejecuta despus de
que todos los assets se han descargado e importado desde el servidor de assets.
Despus de que el mtodo haya terminado su ejecucin, Unity se cierra
automticamente.
/Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode
-projectPath ~/UnityProjects/AutobuildProject -assetServerUpdate
192.168.1.1 MyGame AutobuildUser l33tpa33 -executeMethod
MyEditorScript.PerformBuild -quit

Argumentos de lnea de comandos especiales para el Editor de


Unity
Estos solamente deben ser utilizados debajo de circunstancias especiales, o cuando
sean dirigidas por Soporte.

Utilice cuando usted tenga contenido hecho


por una nueva, incompatible versin de Unity,
la cual usted quiere bajar para que funcione
con su versin actual de Unity. Cuando est
activado, Unity va a presentarle un dialogo
-enableIncompatibleAssetDowngrade
preguntando para una confirmacin de tal
downgrade si usted intenta abrir un proyecto
que lo requiera. Este procedimiento no es
soportado y es de alto riesgo, y solo debe ser
utilizado como ltimo recurso.

Argumentos de lnea de comandos para un Reproductor


Standalone de Unity
Los reproductores Standalone construidos con Unity tambin entienden algunos
argumentos de linea de comando:

-adapter N (Windows solamente) Le permite al juego correr pantalla completa


en otra pantalla. El N mapea a un adaptador de
pantalla Direct3D. En la mayora de casos hay
una relacin uno-a-uno entre los adaptadores y
las tarjetas de videos. En las tarjetas que

- 420 -
soportan multi-head (pueden manejar
mltiples monitores en una sola tarjeta) cada
head puede tener su propio adaptador.
Corra el juego en modo headless. El juego
no va a mostrar cualquier cosa o aceptar input
-batchmode
de usuario. Esto en la mayora es til para
correr servidores para networked games.
Haga que el juego utilice Direct3D 9 para el
renderizado. Normalmente el API de grficos
-force-d3d9 (Windows solamente)
depende en los player settings (tpicamente cae
a D3D11).
Haga que el juego corra utilizando software de
renderizado Reference de Direct3D.
El DirectX SDK tiene que estar instalado para
que esto funcione. Esto en la mayora es til
-force-d3d9-ref (Windows solamente)
para construir un conjunto de pruebas
automatizadas, dnde usted quiere asegurar
que el renderizado es lo mismo sin importar
que tarjeta grfica est siendo utilizada.
Haga que el juego utilice Direct3D 11 para
-force-d3d11 (Windows solamente)
renderizar.
Obliga a DirectX 11.0 en ser creado sin una
flag
-force-d3d11-no-singlethreaded
D3D11_CREATE_DEVICE_SINGLETHREA
DED.
Hace que el editor utilice el perfil ncleo (core
profile) de OpenGL para renderizado. El editor
intenta utilizar la mejor versin de OpenGL
-force-glcore (Windows solamente) disponible y todas las extensiones OpenGL
expuestas por los drivers OpenGL. Si la
plataforma no es soportada, Direct3D es
utilizada.
Similar a -force-glcore pero solicita una
versin de contexto OpenGL especifica. Los
-force-glcoreXY (Windows solamente)
valores aceptados para XY: 32, 33, 40, 41, 42,
43, 44 o 45.
Utilizado en conjunto con -force-glcoreXY,
pero previene la revisin de extensiones
-force-clamped (Windows solamente) adicionales OpenGL permitiendo que haya una
ejecucin entre plataformas con las mismas
rutas de cdigo
-nographics Cuando se corra en batch mode, no inicialize
el dispositivo grfico en absoluto. Esto hace

- 421 -
que sea posible ejecutar sus flujos de trabajo
automatizados en maquinas que no tienen un
GPU.
No produzca un output de registro (log).
Normalmente output_log.txt es escrito
-nolog (Linux & Windows solamente) en la carpeta *_Data alado del ejecutable del
juego, dnde el output Debug.Log es
imprimido.
La ventana ser creada como una ventana
-popupwindow
emergente (sin un frame).
Anula el comportamiento predeterminado del
-window-mode mode (Windows solamente) ajuste de pantalla completa. Las opciones
posibles son: exclusive, borderless.
Anula el estado por defecto de pantalla
-screen-fullscreen
completa. Este debe ser 0 o 1.
Anula la altura de la pantalla predetermina.
-screen-height Este debe ser un entero de una resolucin
soportada.
Anula la anchura de pantalla predeterminada.
-screen-width Este debe ser un entero de una resolucin
soportada.
Anula la calidad e la pantalla predeterminada.
Un uso de ejemplo
-screen-quality
sera: /path/to/myGame -screen-
quality Beautiful
Obliga al dialogo selector de la pantalla en ser
-show-screen-selector
mostrado.
Permite solo una instancia del juego a correr a
-single-instance (Linux & Windows la vez. Si otra instancia ya est corriendo
solamente) entonces lanzando nuevamente -single-
instance va a enfocarse en la existente.
1 Incrusta la aplicacin de Windows
Standalone a otra aplicacin, usted tiene que
-parentHWND <HWND> (Windows pasar el manejo de la ventana de la aplicacin
solamente) padre a la aplicacin Standalone Windows. Ver
este ejemplo EmbeddedWindow.zip para ms
informacin.

Argumentos de lnea de comandos para Windows Store


Las aplicaciones de Windows Store no aceptan argumentos de lnea de comandos por
defecto, por lo que para poder pasarlos hay que llamar a una funcin especial de

- 422 -
App.xaml.cs/cpp o App.cs/cpp. Por ejemplo,
appCallbacks.AddCommandLineArg("-nolog");
| | | |:|:| |-nolog| No generar UnityPlayer.log.| |-force-driver-type-warp|
Obliga el dispositivo WARP DIrectX 11.0 http://msdn.microsoft.com/en-
us/library/gg615082.aspx)| |-force-d3d11-no-singlethreaded| Obliga a DirectX 11.0
en ser creado sin una flag D3D11_CREATE_DEVICE_SINGLETHREADED.| |-force-gfx-
direct| Forzar renderizacin en un solo hilo.| |-force-feature-level91| Obliga
DirectX 11.0 al nivel de caractersticas 9.1.| |-force-feature-level92| Obliga DirectX
11.0 al nivel de caractersticas 9.2.| |-force-feature-level93| Obliga DirectX 11.0 al
nivel de caractersticas 9.3.| |-force-feature-level100| Obliga DirectX 11.0 al nivel
de caractersticas 10.0.| |-force-feature-level101| Obliga DirectX 11.0 al nivel de
caractersticas 10.1.| |-force-feature-level101| Obliga DirectX 11.0 al nivel de
caractersticas 11.0.| mientras que en Windows 64 bit, usted debe escribir . o esto
cuando se est en Windows 32 bit en la lnea de comandos. En PC usted puede
utilizar el Command prompt: . o esto cuando se est en Windows 32 bit

Opciones
Usted debe realizar esta llamada antes de la
funcin appCallbacks.Initialize*().

- 423 -
Detras de Escenas
Unity importa assets automticamente y gestiona varios tipos de datos adicionales
acerca de estos para usted, como qu tipo de import settings (ajustes de importacin)
deberan ser utilizados para importar un asset, y dnde el asset es utilizado a travs
del proyecto. A continuacin se describe como funciona este proceso.

Qu sucede cuando Unity importa un Asset?


1. Un ID nico es asignado
Cuando usted coloca un Asset como una textura en la carpeta Assets, Unity va a
primero detectar ese nuevo archivo que fue agregado (el editor frecuentemente revisa
los contenidos de la carpeta Assets contra la lista de assets que ya conoce).

El primer paso que Unity toma es asignar un ID nico al asset. Este ID es utilizado
internamente por Unity para referirse al asset lo cual significa que el asset puede ser
movido o re-nombrado sin que se rompan las referencias al asset.

2. Un archivo .meta es creado

La relacin entre la carpeta Asset en su proyecto de Unity en su computador, y la


Ventana Project dentro de Unity

Usted va a notar que en la imagen de arriba hay archivos .meta listados en el sistema
de archivos para cada asset y carpeta creada dentro de la carpeta Assets. Estos no son
visibles en la ventana Project de Unity. Unity crea estos archivos para cada asset, pero
estos estn ocultos por defecto, por lo que usted no podr verlos en el
Explorer/Finder tampoco. Usted puede hacerlos visible al seleccionar esta opcin en

- 424 -
Unity Edit > Project Settings > Editor > Versions Control, Mode : Visible Meta Files.

El ID que Unity asigna a cada asset es almacenado dentro del archivo .meta que Unity
crea en conjunto con el archivo asset en s mismo. Este archivo .meta debe
mantenerse con el archivo asset al cual se relaciona.

IMPORTANTE: Los archivos .meta deben coincidir y mantenerse con sus archivos asset
respectivos. Si usted mueve o re-nombra un asset dentro de la ventana Project de Unity,
Unity va de manera automtica a mover o re-nombrar el archivo .meta correspondiente. Si
usted muevo o re-nombra un asset afuera* de Unity (i.e. en Windows Explorer, o Finder
en Mac), usted debe mover o re-nombrar el archivo .meta para que coincidan.

Si un asset pierde su archivo meta (por ejemplo, si usted muevo o re-nombre el asset
afuera de Unity, sin mover/re-nombrar el archivo .meta correspondiente), cualquier
referencia al asset ser rota. Unity generara un nuevo archivo .meta para el asset
movido/re-nombrado como si fuera un nuevo asset, y borrara el archivo .meta viejo
hurfano.

Por ejemplo, en el caso de un asset de textura que pierde su archivo .meta, cualquier
Material que sea utilizado por esa textura ahora no tendr referencia a esa textura.
Para arreglar esto, usted tendra que manualmente re-asignar esa textura a cualquier
material que lo requiera.

En el caso de un asset script que pierde su archivo .meta, cualquier Game Objects o
Prefabs que tena ese script asignado terminara con un componente unassaigned
script, y perdera su funcionalidad. Usted tendra que manualmente re-asignar el
script a estos objetos para arreglar esto.

3. El asset fuente es procesado


Unity lee y procesa cualquier archivo que usted ha agregado a la carpeta Assets,
convirtiendo el contenido del archivo en versiones listas para jugar de los datos. Los
archivos actuales asset se mantienen sin modificar, y las versiones procesadas y
convertidas de los datos son almacenadas en la carpeta del proyecto Library.

Utilizar un formato interno para los assets le permite a Unity tener versiones listas
para jugar de sus assets para que utilice en tiempo de ejecucin en el editor, mientras
que mantiene los archivos fuente sin modificar en la carpeta assets para que usted
pueda editarlos de manera rpida. Por ejemplo, el formato de archivos de Photoshop
es conveniente para trabajar y se puede guardar directamente en su carpeta Assets,

- 425 -
pero hardware como los dispositivos mviles y tarjetas grficas de PC no pueden
aceptar ese formato directamente para renderizar como texturas. Todos los datos
para la representacin interna de assets en Unity se almacena en la
carpeta Library que puede ser pensada similarmente a una carpeta de cach. Como
usuario, usted nunca debera alterar manualmente la carpeta Library ya que intentar
hacerlo puede daar la funcionalidad de su proyecto en el editor de Unity. No
obstante, siempre es bueno borrar la carpeta Library (mientras el proyecto no est
abierto en Unity) ya que toda su informacin es generada de lo que est almacenado
en la carpeta Assets y ProjectSettings. Esto tambin significa que la carpeta Library no
debera estar incluida en el control de versiones.

A veces hay mltiplos assets creados desde una importacin.


Algunos archivos asset pueden resultar en mltiples assets siendo creados. Esto
puede ocurrir en las siguientes situaciones:

Un archivo 3D, como un FBX, define Materiales y/o contiene Texturas


embebidas. En este caso, los materiales definidos y texturas embebidas son extradas
y representadas en Unity como assets separados.

Un archivo de imagen es importado como mltiples sprites. Es posible definir


mltiples sprites desde una sola imagen grfica, al utilizar el Sprite Editor (Editor de
Sprites) de Unity. En este caso, cada sprite definido en el editor aparecer como un
Sprite asset por separado en la ventana Project.

Un archivo 3D contiene mltiples lineas de tiempo de animacin, o tiene clips


definidos por separado dentro de sus ajustes de importacin de animacin. En
esta situacin, los mltiples clips de animacin apareceran como asset Animation Clip
por separados en la ventana Project.

Los ajustes de importacin pueden alterar el procesamiento del asset


Al igual que el ID nico asignado al asset, los archivos meta contienen valores para
todos los import settings (ajustes de importacin) que usted ve en el inspector
cuando usted tiene un asset seleccionado en la su ventana project. Para una textura,
esto incluye ajustes como el Texture Type, Wrap Mode Filter Mode y Aniso Level.

Si usted cambia los ajustes de importacin para un asset, estos ajustes cambiados
son almacenados en el archivo .meta que acompaa el asset. El asset ser re-
importado de acuerdo a sus nuevos ajustes, y los datos correspondientes listos para

- 426 -
el juego importados sern actualizados en la carpeta Library del proyecto.

Cuando se encuentre realizando una copia de seguridad de un proyecto, usted debe


incluir la carpeta principal del proyecto de Unity, conteniendo ambas las
carpetas Assets y ProjectSettings. Toda la informacin en estas carpetas es crucial
para la forma en que Unity trabaja. Usted puede ignorar las
carpetas Library y Temp para el propsito de hacer copias de seguridad.

Tenga en cuenta: Los proyectos creados en Unity 4.2 o antes pueden no tener
archivos .meta si no estn explcitamente activados. Borrar la carpeta Library en estos
proyectos va a llevar a una perdida de informacin y una corrupcin permanente del
proyecto ya que ambos los formatos internos generados de sus assets y los datos
meta son almacenados en la carpeta Library.*

- 427 -
AssetDatabase
AssetDatabase es una API que te permite acceder a los assets contenidos en tu
proyecto. Entre otras cosas, proporciona mtodos para encontrar y cargar assets, y
tambin para crearlos, eliminarlos y modificarlos. El Unity Editor usa el AssetDatabase
internamente para realizar un seguimiento de los archivos de asset y mantener la
conexin entre los assets y los objetos que los referencien. Puesto que que Unity
necesita llevar seguimiento de todos los cambios a la carpeta del proyecto, debes
siempre usar la API de AssetDatabase en lugar del sistema de archivos si quieres
acceder o modificar datos de assets.

La interfaz de AssetDatabase slo est disponible en el Editor y no tiene ninguna


funcin en el juego ya construido. Como todas las otras clases para el editor, slo est
disponible para los scripts colocados en la carpeta Editor (si an no existe, slo crea
una carpeta llamada Editor en la carpeta principal de Assets de tu proyecto).

Importar un Asset
Unity normalmente importa assets automticamente cuando son arrastrados al
proyecto, pero tambin es posible importarlos bajo control de scripts. Para hacer esto
puedes usar el mtodo AssetDatabase.ImportAsset como en el siguiente ejemplo.
using UnityEngine;
using UnityEditor;

public class ImportAsset {


[MenuItem ("AssetDatabase/ImportExample")]
static void ImportExample ()
{
AssetDatabase.ImportAsset("Assets/Textures/texture.jpg",
ImportAssetOptions.Default);
}
}

Tambin puedes pasar un parmetro extra del


tipo AssetDatabase.ImportAssetOptions para el llamado a
AssetDatabase.ImportAsset. En las pginas de referencia de scripting se encuentran
descritas las diferentes opciones y sus efectos sobre el comportamiento de la funcin.

Cargar un Asset
El editor slo carga assets cuando sea necesario, p.ej. si son agregados a la escena o

- 428 -
editados desde el panel Inspector. Sin embargo, puedes cargar y acceder assets
desde un script
usando AssetDatabase.LoadAssetAtPath, AssetDatabase.LoadMainAssetAtPath, Asset
Database.LoadAllAssetRepresentationsAtPath y AssetDatabase.LoadAllAssetsAtPath.
Ver la documentacin de scripting para ms detalles.
using UnityEngine;
using UnityEditor;

public class ImportAsset {


[MenuItem ("AssetDatabase/LoadAssetExample")]
static void ImportExample ()
{
Texture2D t =
AssetDatabase.LoadAssetAtPath("Assets/Textures/texture.jpg", typeof(Texture2D))
as Texture2D;
}
}

Operaciones de Archivo usando AssetDatabase


Puesto que Unity mantiene los metadatos de los archivos de assets, nunca debes
crear, mover o borrar estos assets usando el sistema de archivos. En su lugar, puedes
usar AssetDatabase.Contains, AssetDatabase.CreateAsset, AssetDatabase.CreateFolde
r, AssetDatabase.RenameAsset, AssetDatabase.CopyAsset, AssetDatabase.MoveAsset,
AssetDatabase.MoveAssetToTrash y AssetDatabase.DeleteAsset.
public class AssetDatabaseIOExample {
[MenuItem ("AssetDatabase/FileOperationsExample")]
static void Example ()
{
string ret;

// Create
Material material = new Material (Shader.Find("Specular"));
AssetDatabase.CreateAsset(material, "Assets/MyMaterial.mat");
if(AssetDatabase.Contains(material))
Debug.Log("Material asset created");

// Rename
ret = AssetDatabase.RenameAsset("Assets/MyMaterial.mat",
"MyMaterialNew");
if(ret == "")
Debug.Log("Material asset renamed to MyMaterialNew");
else
Debug.Log(ret);

// Create a Folder
ret = AssetDatabase.CreateFolder("Assets", "NewFolder");
if(AssetDatabase.GUIDToAssetPath(ret) != "")
Debug.Log("Folder asset created");
else
Debug.Log("Couldn't find the GUID for the path");

- 429 -
// Move
ret = AssetDatabase.MoveAsset(AssetDatabase.GetAssetPath(material),
"Assets/NewFolder/MyMaterialNew.mat");
if(ret == "")
Debug.Log("Material asset moved to NewFolder/MyMaterialNew.mat");
else
Debug.Log(ret);

// Copy
if(AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(material),
"Assets/MyMaterialNew.mat"))
Debug.Log("Material asset copied as Assets/MyMaterialNew.mat");
else
Debug.Log("Couldn't copy the material");
// Manually refresh the Database to inform of a change
AssetDatabase.Refresh();
Material MaterialCopy =
AssetDatabase.LoadAssetAtPath("Assets/MyMaterialNew.mat", typeof(Material)) as
Material;

// Move to Trash

if(AssetDatabase.MoveAssetToTrash(AssetDatabase.GetAssetPath(MaterialCopy)))
Debug.Log("MaterialCopy asset moved to trash");

// Delete
if(AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(material)))
Debug.Log("Material asset deleted");
if(AssetDatabase.DeleteAsset("Assets/NewFolder"))
Debug.Log("NewFolder deleted");

// Refresh the AssetDatabase after all the changes


AssetDatabase.Refresh();
}
}

Utilizar AssetDatabase.Refresh
Cuando hayas finalizado la modificacin de assets, debes llamar a
AssetDatabase.Refresh para ejecutar definitivamente (commit) los cambios a la base
de datos y hacerlos visibles en el proyecto.

- 430 -
Archivos de escena basados en texto
Al igual que el formato por defecto binario, Unity tambin proporciona un formato
basado en texto para datos de escena. Esto puede ser til cuando trabaje con
software de control de versiones, ya que los archivos de texto generados de manera
separada pueden ser fusionados de manera ms fcil que archivos binarios. Tambin,
los datos de texto pueden ser generados y parsed por herramientas, haciendo que
sea posible crear y analiza escenas automticamente. Las pginas en esta seccin
proporciona algn material de referencia para trabajar con el formato.

Ver la pgina de Editor Settings para ver cmo activar esta caracterstica.

- 431 -
Descripcin del formato
El formato de escena de Unity es implementado con el lenguaje de serializacin de
datos YAML. Aunque nosotros no podamos cubrir YAML en profundidad aqu, es un
formato abierto y sus especificaciones estn disponibles de manera gratuita en
la pgina web de YAML. Cada objeto en la escena est escrito al archivo como un
documento YAML separado, el cual es introducido en el archivo por la secuencia .
Tenga en cuenta que en este contexto, el trmino object se refiere a los
GameObjects, Componentes y otros datos de la escena colectiva-mente; cada uno de
estos items requiere su propio documento YAML en el archivo de escena. La
estructura bsica de un objeto serializado puede entenderse mejor con un ejemplo:-
--- !u!1 &6
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
importerVersion: 3
m_Component:
- 4: {fileID: 8}
- 33: {fileID: 12}
- 65: {fileID: 13}
- 23: {fileID: 11}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1

La primera linea contiene el string !u!1 &6 despus del marcador del documento. El
primer nmero despus de la parte !u! indica la clase del objeto (en este caso, es un
GameObject). El nmero que sigue el signo & es el nmero ID de un objeto que es
nico dentro del archivo, aunque el nmero est asignado a cada objeto de manera
arbitraria. Cada una de las propiedades de serializacin del objeto se denota por una
linea como la que sigue:-
m_Name: Cube
--- !u!4 &8
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 6}
m_LocalRotation: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000}
m_LocalPosition: {x: -2.618721, y: 1.028581, z: 1.131627}
m_LocalScale: {x: 1.000000, y: 1.000000, z: 1.000000}

- 432 -
m_Children: []
m_Father: {fileID: 0}

Este es un componente Transform adjunto al GameObject definido por el documento


YAML de arriba. El archivo adjunto es denotado por la linea:-
m_GameObject: {fileID: 6}
Los nmeros punto flotantes pueden ser representados por una representacin
decimal o un nmero hexadecimal en formato IEE 754 (denotado por un prefijo 0x).
La representacin IEE 754 es utilizado para una codificacin sin prdidas de valores, y
es utilizado en Unity cuando se escribe valores de punto flotante que no tienen una
representacin corta decimal. Cuando Unity escribe nmero de manera hexadecimal,
siempre va a tambin escribir el formato decimal en parntesis para propsitos de
depuracin, pero solamente el hex es de verdad parsed cuando se cargue el archivo.
Si usted desea editar tales valores de manera manual, simplemente quite el hex e
ingrese solamente un nmero decimal. Aqu hay algunas representaciones vlidas de
valores punto flotante (todos representando el nmero uno):
myValue: 0x3F800000
myValue: 1
myValue: 1.000
myValue: 0x3f800000(1)
myValue: 0.1e1

Las propiedades tpicamente tienen el prefijo m_ pero de otra manera sigue el


nombre de la propiedad como es definido en la referencia de script. Un segundo
objeto, definido en el archivo, podra verse algo as:- debido a que el ID del objeto
del GameObject dentro del archivo era 6.

- 433 -
Un ejemplo de un archivo de Escena YAML
Un ejemplo de una escena simple, pero completa es dado a continuacin. La escena
contiene simplemente una cmara y un objeto cubo. Tenga en cuenta que ese
archivo must (debe) comenzar con dos lineas
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:

con el fin de que sea aceptado por Unity. De lo contrario, el proceso de importacin
est diseado a ser tolerantes con las omisiones - los valores predeterminados sern
suministrados a datos de propiedades que falten en la medida de lo posible.
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!header
SerializedFile:
m_TargetPlatform: 4294967294
m_UserInformation:
--- !u!29 &1
Scene:
m_ObjectHideFlags: 0
m_PVSData:
m_QueryMode: 1
m_PVSObjectsArray: []
m_PVSPortalsArray: []
m_ViewCellSize: 1.000000
--- !u!104 &2
RenderSettings:
m_Fog: 0
m_FogColor: {r: 0.500000, g: 0.500000, b: 0.500000, a: 1.000000}
m_FogMode: 3
m_FogDensity: 0.010000
m_LinearFogStart: 0.000000
m_LinearFogEnd: 300.000000
m_AmbientLight: {r: 0.200000, g: 0.200000, b: 0.200000, a: 1.000000}
m_SkyboxMaterial: {fileID: 0}
m_HaloStrength: 0.500000
m_FlareStrength: 1.000000
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 0}
m_ObjectHideFlags: 0
--- !u!127 &3
GameManager:
m_ObjectHideFlags: 0
--- !u!157 &4
LightmapSettings:
m_ObjectHideFlags: 0
m_LightProbeCloud: {fileID: 0}
m_Lightmaps: []
m_LightmapsMode: 1
m_BakedColorSpace: 0
m_UseDualLightmapsInForward: 0
m_LightmapEditorSettings:

- 434 -
m_Resolution: 50.000000
m_LastUsedResolution: 0.000000
m_TextureWidth: 1024
m_TextureHeight: 1024
m_BounceBoost: 1.000000
m_BounceIntensity: 1.000000
m_SkyLightColor: {r: 0.860000, g: 0.930000, b: 1.000000, a: 1.000000}
m_SkyLightIntensity: 0.000000
m_Quality: 0
m_Bounces: 1
m_FinalGatherRays: 1000
m_FinalGatherContrastThreshold: 0.050000
m_FinalGatherGradientThreshold: 0.000000
m_FinalGatherInterpolationPoints: 15
m_AOAmount: 0.000000
m_AOMaxDistance: 0.100000
m_AOContrast: 1.000000
m_TextureCompression: 0
m_LockAtlas: 0
--- !u!196 &5
NavMeshSettings:
m_ObjectHideFlags: 0
m_BuildSettings:
cellSize: 0.200000
cellHeight: 0.100000
agentSlope: 45.000000
agentClimb: 0.900000
ledgeDropHeight: 0.000000
maxJumpAcrossDistance: 0.000000
agentRadius: 0.400000
agentHeight: 1.800000
maxEdgeLength: 12
maxSimplificationError: 1.300000
regionMinSize: 8
regionMergeSize: 20
tileSize: 500
detailSampleDistance: 6.000000
detailSampleMaxError: 1.000000
accuratePlacement: 0
m_NavMesh: {fileID: 0}
--- !u!1 &6
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
importerVersion: 3
m_Component:
- 4: {fileID: 8}
- 33: {fileID: 12}
- 65: {fileID: 13}
- 23: {fileID: 11}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!1 &7
GameObject:
m_ObjectHideFlags: 0

- 435 -
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
importerVersion: 3
m_Component:
- 4: {fileID: 9}
- 20: {fileID: 10}
- 92: {fileID: 15}
- 124: {fileID: 16}
- 81: {fileID: 14}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 6}
m_LocalRotation: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000}
m_LocalPosition: {x: -2.618721, y: 1.028581, z: 1.131627}
m_LocalScale: {x: 1.000000, y: 1.000000, z: 1.000000}
m_Children: []
m_Father: {fileID: 0}
--- !u!4 &9
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 7}
m_LocalRotation: {x: 0.000000, y: 0.000000, z: 0.000000, w: 1.000000}
m_LocalPosition: {x: 0.000000, y: 1.000000, z: -10.000000}
m_LocalScale: {x: 1.000000, y: 1.000000, z: 1.000000}
m_Children: []
m_Father: {fileID: 0}
--- !u!20 &10
Camera:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 7}
m_Enabled: 1
importerVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.192157, g: 0.301961, b: 0.474510, a: 0.019608}
m_NormalizedViewPortRect:
importerVersion: 2
x: 0.000000
y: 0.000000
width: 1.000000
height: 1.000000
near clip plane: 0.300000
far clip plane: 1000.000000
field of view: 60.000000
orthographic: 0
orthographic size: 100.000000
m_Depth: -1.000000
m_CullingMask:

- 436 -
importerVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_HDR: 0
--- !u!23 &11
Renderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 6}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_LightmapIndex: 255
m_LightmapTilingOffset: {x: 1.000000, y: 1.000000, z: 0.000000, w: 0.000000}
m_Materials:
- {fileID: 10302, guid: 0000000000000000e000000000000000, type: 0}
m_SubsetIndices:
m_StaticBatchRoot: {fileID: 0}
m_LightProbeAnchor: {fileID: 0}
m_UseLightProbes: 0
m_ScaleInLightmap: 1.000000
--- !u!33 &12
MeshFilter:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 6}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!65 &13
BoxCollider:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 6}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
importerVersion: 2
m_Size: {x: 1.000000, y: 1.000000, z: 1.000000}
m_Center: {x: 0.000000, y: 0.000000, z: 0.000000}
--- !u!81 &14
AudioListener:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 7}
m_Enabled: 1
--- !u!92 &15
Behaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 7}
m_Enabled: 1
--- !u!124 &16
Behaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}

- 437 -
m_GameObject: {fileID: 7}
m_Enabled: 1
--- !u!1026 &17
HierarchyState:
m_ObjectHideFlags: 0
expanded: []
selection: []
scrollposition_x: 0.000000
scrollposition_y: 0.000000

- 438 -
YAML Class ID Reference (Referencia del ID
de la clase YAML)
Una referencia a los nmeros de identificacin de clase comn usados por el formato
de archivo YAML es dada a continuacin, tanto en orden numrico de identificacin
de clase y como en orden alfabtico de los nombres de las clases. Observe que
algunos rangos de nmeros son omitidos intencionalmente de la secuencia - estos
pueden representar clases que han sido eliminadas de la API o puede estar
reservados para un futuro uso. Las clases definidas desde scripts siempre tendrn el
identificador de clase 114 (MonoBehaviour).

Clases ordenadas por nmero de ID


ID Class
1 GameObject
2 Component
3 LevelGameManager
4 Transform
5 TimeManager
6 GlobalGameManager
8 Behaviour
9 GameManager
11 AudioManager
12 ParticleAnimator
13 InputManager
15 EllipsoidParticleEmitter
17 Pipeline
18 EditorExtension
19 Physics2DSettings
20 Camera
21 Material
23 MeshRenderer

- 439 -
ID Class
25 Renderer
26 ParticleRenderer
27 Texture
28 Texture2D
29 SceneSettings
30 GraphicsSettings
33 MeshFilter
41 OcclusionPortal
43 Mesh
45 Skybox
47 QualitySettings
48 Shader
49 TextAsset
50 Rigidbody2D
51 Physics2DManager
53 Collider2D
54 Rigidbody
55 PhysicsManager
56 Collider
57 Joint
58 CircleCollider2D
59 HingeJoint
60 PolygonCollider2D
61 BoxCollider2D
62 PhysicsMaterial2D
64 MeshCollider
65 BoxCollider
66 SpriteCollider2D
68 EdgeCollider2D
72 ComputeShader
74 AnimationClip

- 440 -
ID Class
75 ConstantForce
76 WorldParticleCollider
78 TagManager
81 AudioListener
82 AudioSource
83 AudioClip
84 RenderTexture
87 MeshParticleEmitter
88 ParticleEmitter
89 Cubemap
90 Avatar
91 AnimatorController
92 GUILayer
93 RuntimeAnimatorController
94 ScriptMapper
95 Animator
96 TrailRenderer
98 DelayedCallManager
102 TextMesh
104 RenderSettings
108 Light
109 CGProgram
110 BaseAnimationTrack
111 Animation
114 MonoBehaviour
115 MonoScript
116 MonoManager
117 Texture3D
118 NewAnimationTrack
119 Projector
120 LineRenderer

- 441 -
ID Class
121 Flare
122 Halo
123 LensFlare
124 FlareLayer
125 HaloLayer
126 NavMeshAreas
127 HaloManager
128 Font
129 PlayerSettings
130 NamedObject
131 GUITexture
132 GUIText
133 GUIElement
134 PhysicMaterial
135 SphereCollider
136 CapsuleCollider
137 SkinnedMeshRenderer
138 FixedJoint
140 RaycastCollider
141 BuildSettings
142 AssetBundle
143 CharacterController
144 CharacterJoint
145 SpringJoint
146 WheelCollider
147 ResourceManager
148 NetworkView
149 NetworkManager
150 PreloadData
152 MovieTexture
153 ConfigurableJoint

- 442 -
ID Class
154 TerrainCollider
155 MasterServerInterface
156 TerrainData
157 LightmapSettings
158 WebCamTexture
159 EditorSettings
160 InteractiveCloth
161 ClothRenderer
162 EditorUserSettings
163 SkinnedCloth
164 AudioReverbFilter
165 AudioHighPassFilter
166 AudioChorusFilter
167 AudioReverbZone
168 AudioEchoFilter
169 AudioLowPassFilter
170 AudioDistortionFilter
171 SparseTexture
180 AudioBehaviour
181 AudioFilter
182 WindZone
183 Cloth
184 SubstanceArchive
185 ProceduralMaterial
186 ProceduralTexture
191 OffMeshLink
192 OcclusionArea
193 Tree
194 NavMeshObsolete
195 NavMeshAgent
196 NavMeshSettings

- 443 -
ID Class
197 LightProbesLegacy
198 ParticleSystem
199 ParticleSystemRenderer
200 ShaderVariantCollection
205 LODGroup
206 BlendTree
207 Motion
208 NavMeshObstacle
210 TerrainInstance
212 SpriteRenderer
213 Sprite
214 CachedSpriteAtlas
215 ReflectionProbe
216 ReflectionProbes
220 LightProbeGroup
221 AnimatorOverrideController
222 CanvasRenderer
223 Canvas
224 RectTransform
225 CanvasGroup
226 BillboardAsset
227 BillboardRenderer
228 SpeedTreeWindAsset
229 AnchoredJoint2D
230 Joint2D
231 SpringJoint2D
232 DistanceJoint2D
233 HingeJoint2D
234 SliderJoint2D
235 WheelJoint2D
238 NavMeshData

- 444 -
ID Class
240 AudioMixer
241 AudioMixerController
243 AudioMixerGroupController
244 AudioMixerEffectController
245 AudioMixerSnapshotController
246 PhysicsUpdateBehaviour2D
247 ConstantForce2D
248 Effector2D
249 AreaEffector2D
250 PointEffector2D
251 PlatformEffector2D
252 SurfaceEffector2D
258 LightProbes
271 SampleClip
272 AudioMixerSnapshot
273 AudioMixerGroup
290 AssetBundleManifest
1001 Prefab
1002 EditorExtensionImpl
1003 AssetImporter
1004 AssetDatabase
1005 Mesh3DSImporter
1006 TextureImporter
1007 ShaderImporter
1008 ComputeShaderImporter
1011 AvatarMask
1020 AudioImporter
1026 HierarchyState
1027 GUIDSerializer
1028 AssetMetaData
1029 DefaultAsset

- 445 -
ID Class
1030 DefaultImporter
1031 TextScriptImporter
1032 SceneAsset
1034 NativeFormatImporter
1035 MonoImporter
1037 AssetServerCache
1038 LibraryAssetImporter
1040 ModelImporter
1041 FBXImporter
1042 TrueTypeFontImporter
1044 MovieImporter
1045 EditorBuildSettings
1046 DDSImporter
1048 InspectorExpandedState
1049 AnnotationManager
1050 PluginImporter
1051 EditorUserBuildSettings
1052 PVRImporter
1053 ASTCImporter
1054 KTXImporter
1101 AnimatorStateTransition
1102 AnimatorState
1105 HumanTemplate
1107 AnimatorStateMachine
1108 PreviewAssetType
1109 AnimatorTransition
1110 SpeedTreeImporter
1111 AnimatorTransitionBase
1112 SubstanceImporter
1113 LightmapParameters
1120 LightmapSnapshot

- 446 -
Clases Ordenadas Alfabticamente
Class ID
ASTCImporter 1053
AnchoredJoint2D 229
Animation 111
AnimationClip 74
Animator 95
AnimatorController 91
AnimatorOverrideController 221
AnimatorState 1102
AnimatorStateMachine 1107
AnimatorStateTransition 1101
AnimatorTransitionBase 1111
AnimatorTransition 1109
AnnotationManager 1049
AreaEffector2D 249
AssetBundle 142
AssetBundleManifest 290
AssetDatabase 1004
AssetImporter 1003
AssetMetaData 1028
AssetServerCache 1037
AudioBehaviour 180
AudioChorusFilter 166
AudioClip 83
AudioDistortionFilter 170
AudioEchoFilter 168
AudioFilter 181
AudioHighPassFilter 165
AudioImporter 1020
AudioListener 81
AudioLowPassFilter 169

- 447 -
Class ID
AudioManager 11
AudioMixer 240
AudioMixerController 241
AudioMixerEffectController 244
AudioMixerGroup 273
AudioMixerGroupController 243
AudioMixerSnapshot 272
AudioMixerSnapshotController 245
AudioReverbFilter 164
AudioReverbZone 167
AudioSource 82
Avatar 90
AvatarMask 1011
BaseAnimationTrack 110
Behaviour 8
BillboardAsset 226
BillboardRenderer 227
BlendTree 206
BoxCollider 65
BoxCollider2D 61
BuildSettings 141
CachedSpriteAtlas 214
Camera 20
Canvas 223
CanvasGroup 225
CanvasRenderer 222
CapsuleCollider 136
CGProgram 109
CharacterController 143
CharacterJoint 144
CircleCollider2D 58

- 448 -
Class ID
Cloth 183
ClothRenderer 161
Collider 56
Collider2D 53
Component 2
ComputeShader 72
ComputeShaderImporter 1008
ConfigurableJoint 153
ConstantForce 75
ConstantForce2D 247
Cubemap 89
DDSImporter 1046
DefaultAsset 1029
DefaultImporter 1030
DelayedCallManager 98
DistanceJoint2D 232
EdgeCollider2D 68
EditorBuildSettings 1045
EditorExtension 18
EditorExtensionImpl 1002
EditorSettings 159
EditorUserBuildSettings 1051
EditorUserSettings 162
Effector2D 248
EllipsoidParticleEmitter 15
FBXImporter 1041
FixedJoint 138
Flare 121
FlareLayer 124
Font 128
GameManager 9

- 449 -
Class ID
GameObject 1
GlobalGameManager 6
GraphicsSettings 30
GUIDSerializer 1027
GUIElement 133
GUILayer 92
GUIText 132
GUITexture 131
Halo 122
HaloLayer 125
HaloManager 127
HierarchyState 1026
HingeJoint 59
HingeJoint2D 233
HumanTemplate 1105
InputManager 13
InspectorExpandedState 1048
InteractiveCloth 160
Joint 57
Joint2D 230
KTXImporter 1054
LensFlare 123
LevelGameManager 3
LibraryAssetImporter 1038
Light 108
LightmapParameters 1113
LightmapSettings 157
LightmapSnapshot 1120
LightProbeGroup 220
LightProbes 258
LightProbesLegacy 197

- 450 -
Class ID
LineRenderer 120
LODGroup 205
MasterServerInterface 155
Material 21
Mesh 43
Mesh3DSImporter 1005
MeshCollider 64
MeshFilter 33
MeshParticleEmitter 87
MeshRenderer 23
ModelImporter 1040
MonoBehaviour 114
MonoImporter 1035
MonoManager 116
MonoScript 115
Motion 207
MovieImporter 1044
MovieTexture 152
NamedObject 130
NativeFormatImporter 1034
NavMeshAgent 195
NavMeshAreas 126
NavMeshData 238
NavMeshObsolete 194
NavMeshObstacle 208
NavMeshSettings 196
NetworkManager 149
NetworkView 148
NewAnimationTrack 118
OcclusionArea 192
OcclusionPortal 41

- 451 -
Class ID
OffMeshLink 191
ParticleAnimator 12
ParticleEmitter 88
ParticleRenderer 26
ParticleSystem 198
ParticleSystemRenderer 199
PhysicMaterial 134
Physics2DManager 51
Physics2DSettings 19
PhysicsManager 55
PhysicsMaterial2D 62
PhysicsUpdateBehaviour2D 246
Pipeline 17
PlatformEffector2D 251
PlayerSettings 129
PluginImporter 1050
PointEffector2D 250
PolygonCollider2D 60
Prefab 1001
PreloadData 150
PreviewAssetType 1108
ProceduralMaterial 185
ProceduralTexture 186
Projector 119
PVRImporter 1052
QualitySettings 47
RaycastCollider 140
RectTransform 224
ReflectionProbe 215
ReflectionProbes 216
Renderer 25

- 452 -
Class ID
RenderSettings 104
RenderTexture 84
ResourceManager 147
Rigidbody 54
Rigidbody2D 50
RuntimeAnimatorController 93
SampleClip 271
SceneAsset 1032
SceneSettings 29
ScriptMapper 94
Shader 48
ShaderImporter 1007
ShaderVariantCollection 200
SkinnedCloth 163
SkinnedMeshRenderer 137
Skybox 45
SliderJoint2D 234
SparseTexture 171
SphereCollider 135
SpringJoint 145
SpringJoint2D 231
Sprite 213
SpriteCollider2D 66
SpriteRenderer 212
SpeedTreeImporter 1110
SpeedTreeWindAsset 228
SubstanceArchive 184
SubstanceImporter 1112
SurfaceEffector2D 252
TagManager 78
TerrainCollider 154

- 453 -
Class ID
TerrainData 156
TerrainInstance 210
TextAsset 49
TextMesh 102
TextScriptImporter 1031
Texture 27
Texture2D 28
Texture3D 117
TextureImporter 1006
TimeManager 5
TrailRenderer 96
Transform 4
Tree 193
TrueTypeFontImporter 1042
WebCamTexture 158
WheelCollider 146
WheelJoint2D 235
WindZone 182
WorldParticleCollider 76

- 454 -
Cache Server (Server de Cache) (Licencia de
Equipo)
Unity tiene un proceso de control de activos completamente automtico. Cuando el
archivo original de un asset como el de un archivo .psd o el de un archivo .fbx es
modificado, Unity detectar los cambios y automticamente lo re-importar. La
informacin importada del archivo es despus almacenada por Unity en su propio
formato interno.

sta caracterstica fue diseada para hacer que el flujo de trabajo de un usuario sea lo
ms eficiente y flexible posible. Sin embargo, al trabajar en un proyecto en equipo, es
posible que otros usuarios estn constantemente haciendo cambios y actualizaciones
a los assets, dichas modificaciones tendrn que ser importadas manualmente.
Tambin ser necesario re-importar los assets cuando se haga el cambio de una
versin de escritorio a una versin mvil, lo que podra tomar un tiempo considerable
para proyectos de gran envergadura.

El tiempo que toma la importacin de los assets, podra drsticamente verse reducido
si la informacin importada se almacena en la Cache Server.

Cada asset a importar es almacenado en la cach en base a

El archivo mismo

La configuracin de importacin

La versin del importador de Assets

La plataforma actual.

Si cualquiera de los anteriores cambia, el asset es re-importado, de otro modo se


descarga de la Cach del Servidor.

Cuando se habilita la cach del servidor en las preferencias, se puede incluso


compartir los assets importados en distintos proyectos (es decir, el trabajo de
importacin puede ser hecho por una mquina y los resultados se pueden compartir
con otros).

Nota que una vez que la cach del servidor es configurada, ste proceso
es completamente automtico, lo que significa que no se requiere trabajo adicional.

- 455 -
Simplemente se reduce el tiempo que toma importar los proyectos sin la necesidad
que se tenga que intervenir.

Como configurar la Cach del Servidor (usuario)


Configurar la Cach del Servidor no podra ser ms fcil. Todo lo que se necesita es
hacer clic en la opcin Use Cache Server dentro de las preferencias y decirle al Unity
Editor donde se encuentra la Cache Server.

Esto puede encontrarse en Unity->Preferences en el Mac o Edit->Preferences en el PC.

Si usted es anfitrin del Cache Server ( Servidor de Cache) en su maquina local,


especifique localhost para la direccin del servidor. Sin embargo, debido a las
limitaciones de tamao del disco duro, es recomendado que usted aloje el Cache
Server en una maquina diferente.

Como configurar la Cach del Servidor (usuario)


El Administrador necesita configurar la maquina Cache Server que ser anfitriona de
los assets en cache.

Usted necesita:

Comprar Cache Server (parte de Unity Pro) en la tienda en linea.

Descargue el Cache Server. Vaya a la pgina Collaboration y haga click en el botn


para Descargar el Cache Server.

Descomprima el archivo, despus del cual usted debera ver algo as:

- 456 -
Dependiendo de su sistema operativo, corra el scrip de comando apropiado.

Usted ver una ventana del terminal, indicando que el Cache Server est corriendo en
el fondo.

El Cache Server necesita estar en una maquina fiable con un almacenamiento muy
grande (ms grande que el tamao del proyecto en s, ya que habr mltiples

- 457 -
versiones de los recursos importados almacenados. Si el disco duro se llena el Cache
Server puede llevarse acabo lentamente.

Instalando el Cache Server como un servicio


Los scripts proporcionados .sh y .cmd deberan estar configurados como un servicio
en el servidor. El cache server (servidor de cache) puede ser matado de manera
segura y re-iniciado en cualquier momento, debido a que utiliza operaciones de
archivo atmicas.

Configuracin del Cache Server


si usted simplemente empieza al hacer doble click en el script, ste ser ejecutado con
el Cacher Server antiguo (legacy) en el puerto 8125 y el nuevo Cache Server en el
puerto 8126. Tambin va a crear los directorios cache y cache5.0 alado del script, y
va a mantener la informacin ah. Los directorios en cache estn permitidos crecer
hasta 50 GB por defecto. Usted puede configurar el tamao y la ubicacin de la
informacin utilizando las opciones de la linea de comando, as:
./RunOSX.command --path ~/mycachePath --size 2000000000

o
./RunOSX.command --path ~/mycachePath --port 8199 -nolegacy

Usted puede configurar el cache server al utilizar las siguientes opciones de la linea de
comandos:

--port le permite especificar el puerto del servidor, solo aplica al nuevo cache server,
el valor por defecto es 8126.

--path le permite a usted especificar la ruta de la ubicacin en cache, solo aplica al


nuevo cache server, el valor por defecto es ./cache5.0.

--legacypath le permite a usted especificar la ruta de la ubicacin del cache, solo


aplica al cache server antiguo (legacy), el valor por defecto es ./cache.

--size le permite a usted especificar el tamao en cache mximo en bytes para


ambos los cache servers. Los archivos que no han sido utilizados recientemente sern
automticamente descartados cuando el tamao de cache sea excedido.

--nolegacy si se especifica, no va a comenzar el cache server anterior (legacy), de lo


contrario el el cache server antiguo comienza en el puerto 8125.

- 458 -
Requerimientos para la maquina alojando el Cache Server
Para un mejor rendimiento debe haber suficiente RAM para mantener una carpeta de
proyecto importada entera. En adicin, es mejor tener una maquina con un disco
duro rpido, y una conexin rpida Ethernet. El disco duro debera tambin tener
suficiente espacio libre. En la otra mano, el Cache Server tiene un uso muy bajo de
CPU.

Una de las distinciones principales entre el Cache Server y el control de versiones es


que la informacin en cache puede ser siempre re-construida localmente. Es
simplemente una herramienta para mejorar el rendimiento. Por esta razn, no tiene
sentido utilizar un Cache Server en Internet. Si usted tiene un equipo distribuido,
usted debera colocar un cache server diferente en cada ubicacin.

El cache server debera correr en una maquina Linux o Mac OS X. El sistema de


archivos de Windows en particular no es bien optimizado para cmo el Asset Cache
Server almacena informacin y problemas con el bloqueo de archivos en Windows
pueden causar problemas que no ocurren en Linux o Mac OS X.

Cache Server FAQ (Preguntas Frecuentes)


Ser que el tamao de la base de datos de mi Cache Server puede crecer
indefinidamente a medida que ms y ms recursos son importados y
almacenados?
El Cache Server quita assets que no han sido utilizados por un periodo de tiempo
automticamente (obviamente si esos assets son necesitados nuevamente, estos
tendrn que ser re-creados durante el siguiente uso).

El cache server funciona solamente con el asset server?


El cache server est diseado para ser transparente a los sistemas de control de
versiones/fuentes y usted no est restringido a utilizar el asset server de Unity.

Qu cambios van a causar que el archivo importado sea re-generado?


Cuando Unity est apunto de importar un asset, genera un has MD5 de todos los
datos fuentes.

Para una textura esto consiste de:

El asset fuente: archivo myTexture.psd

- 459 -
El archivo meta: myTexture.psd.meta (almacena todos los ajustes del importador)

El nmero de la versin interna del importador de textura

Un hash de nmeros de versiones de todos los AssetPostprocessors

Si ese has es diferente de lo que est almacenado en el Cache Server, el asset ser re-
importado, de lo contrario, la versin en cache ser descargada. El editor cliente de
Unity solo va a sacar assets del servidor a medida que sean necesitados - los assets
no son empujados a cada proyecto a medida que cambien.

Cmo trabajo con Asset dependencies?


El Cache Server no necesita manejar dependencias. El pipeline del asset de Unity no
maneja el concepto de dependencias. Est construido de tal manera para evitar
dependencias entre assets. AssetPostprocessors son una tcnica en comn utilizada
para personalizar el importador de assets para que encaje con sus necesidades. Por
ejemplo, usted podra querer agregar un MeshColliders a algunos GameObjects en el
archivo fbx basndose en su nombre o tag (etiqueta).

Tambin es fcil utilizar los AssetPostprocessors para introducir dependencias. Por


ejemplo usted podra utilizar informacin de un archivo texto alado del asset para
agregar componentes adicionales a los game objects importados. Esto no es
soportado en el cache Server. Si usted quiere utilizar el Cache Server, usted tendr
que quitar las dependencias en otros assets en la carpeta del proyecto. Debido a que
el Cache Server no sabe nada acerca de la dependencia en su post-processor (post
procesador), no sabra que cualquier cosa ha cambiado por lo tanto utilice el versin
en cache vieja de su asset.

En prctica hay muchas maneras que usted puede hacer asset postprocessing (post-
procesamiento) par que funcione bien con el cache server (servidor de cache). Usted
puede utilizar:

La ruta del asset importado

Cualquier ajuste de importacin del asset

El asset fuente en s o cualquier informacin generada de este pasado a usted en el


asset post-processor.

Hay algunos problemas cuando se trabaje con materiales?


La modificacin de los materiales que ya existen podran causar problemas. Cuando

- 460 -
se utilice el Cache Server, Unity valida que las referencias a los materiales son
mantenidas. Pero debido a que ninguna llamada de post-processing (post-
procesamiento) ser invocada, el contenido del material no puede cambiar cuando un
modelo es importado a travs del Cache Server. Por lo tanto, usted podra obtener
diferentes resultados cuando importe con o sin el Cache Server. Es mejor nunca
modificar los materiales que ya existen en el disco.

Hay algunos tipos de assets que no sern puestos en cache por el servidor?
Hay algunos tipos de informacin de assets que el servidor no da en cache. En
realidad no hay nada para ganar al cachear archivos scripts y por lo tanto el servidor
las va a ignorar. Tambin, los archivos nativos utilizado por software de modelado 3D
(Maya, 3D Max, etc) estn convertidos al FBX utilizando la aplicacin en s.
Actualmente, el asset server caches ni el archivo nativo ni el archivo intermediario FBX
generado en el proceso de importacin. Sin embargo, es posible beneficiarse del
servidor al exportar archivos como FBX del software de modelado y agregando estos
al proyecto de Unity.

- 461 -
Modificando Assets Fuentes a travs del
Scripting

Instanciacin Automtica
Usualmente cuando usted quiere hacer una modificacin de cualquier tipo de asset
del juego, usted quiere que suceda en el tiempo de ejecucin y usted quiere que sea
temporal. Por ejemplo, si su personaje recoge un power-up de invisibilidad, usted
podra querer cambiar el shader del materialpara el personaje del jugador para que
visualmente muestre un estado invisible. Esta accin involucra modificar el material
que est siendo utilizado. Esta modificacin no es permanente ya que nosotros no
queremos que el material tenga un diferente shader cuando salga del Play Mode.

Sin embargo, es posible en Unity escribir scripts que van a permanentemente


modificar un asset fuente. Utilicemos el material de arriba de ejemplo como un punto
de inicio.

Para cambiar temporalmente el shader del material, nosotros cambiamos la


propiedad shader del componente material.
private var invincibleShader = Shader.Find ("Specular");

function StartInvincibility {
renderer.material.shader = invincibleShader;
}

Modificacin Directa
NOTA IMPORTANTE
El mtodo presentado abajo va a modificar los archivos assets fuentes utilizados
dentro de Unity. Estas modificaciones no se pueden deshacer. Utilice estas con
precaucin.

Ahora digamos que nosotros no queremos que el material se re-inicie cuando se salga
del modo de reproduccin. Para esto, usted puede utilizar renderer.sharedMaterial.
La propiedad sharedMaterial va a devolver el asset actual utilizado por este
renderizador (y de pronto otros).

El cdigo de abajo va a cambiar permanentemente el material para utilizar el shader

- 462 -
Specular. ste no va a re-iniciar el material al estado en el que estaba antes del Play
Mode (modo de reproduccin).
private var invincibleShader = Shader.Find ("Specular");

function StartInvincibility {
renderer.sharedMaterial.shader = invincibleShader;
}

Miembros de Clase Aplicables


La misma formula descrita arriba puede ser aplicada a ms que los materiales. La lista
de assets que siguen esta convencin es como sigue:

Materiales: renderer.material y renderer.sharedMaterial

Meshes: meshFilter.mesh y meshFilter.sharedMesh

Materiales de Fsica: collider.material y collider.sharedMaterial

Asignacin Directa
Si usted declara una variable pblica de cualquiera de las clases de arriba: Material,
Mesh, o Physic Material (Material de Fsica), y hace modificaciones al asset utilizando
la variable en vez de utilizar el miembro de la clase relevante, usted no recibir los
beneficios de una instanciacin automtica antes de que las modificaciones sean
aplicadas.

Assets que no son instanciados automticamente


Hay dos diferentes assets que nunca son instanciados automticamente cuando se
modifica.

Texture2D

TerrainData

Cualquier modificacin hecha a estos assets a travs del script son siempre
permanentes, y nunca se pueden deshacer. Por lo que si usted est cambian el
heightmap de su terreno a travs de scripting, usted va a necesitar tener que
instanciar y asignas los valores por usted mismo. Lo mismo va para Texturas. Si usted
cambia los pixeles de un archivo de textura, el cambio es permanente.

- 463 -
Notas de iOS y Android
Los assets Texture2D son nunca instanciados automticamente cuando son
modificados en proyectos iOS y Android. Cualquier modificacin hecha a estos assets
a travs de scripting siempre son permanente, y nunca se pueden deshacer. Por lo
que si usted est cambiando los pixeles de un archivo de textura, el cambio es
permanente. Cuando se utilice este script y se salga del Play Mode (modo de
reproduccin), el estado del material se re-inicia a lo que sea que estaba antes de
entrar al Play Mode (modo de reproduccin) inicialmente. Esto sucede ya que cuando
un renderer.material es accedido, el material es automticamente instanciado, y la
instancia es devuelta. Esta instancia es aplicada simultaneamente y automticamente
al renderer (renderizador). Por lo que usted puede cualquier cambios que su corazn
desee sin temer permanencia. Como usted puede ver, hacer cambios a un
sharedMaterial puede ser ambos til y arriesgado. Cualquier cambios hechos a un
sharedMaterial ser permanente, y no se puede deshacer.

- 464 -
Extendiendo el Editor
Unity le permite extender el editor con sus propios inspectores personalizados
y Editor Windows y usted puede definir cmo las propiedades son mostradas en el
inspector con un Property Drawers personalizado. Esta seccin explica cmo utilizar
estas caractersticas.

- 465 -
Ventanas del Editor
Usted puede crear cualquier nmero de ventanas personalizadas en su aplicacin.
Estas se comportan igual que el Inspector, Escena o cualquier otra integrada. Esta es
una gran manera de agregar una interfaz de usuario a un sub-sistema para su juego.

Interfaz del editor personalizado por Serious Games Interactive utilizado para
acciones de escena scripting

Hacer una ventana del editor personalizada implica los siguientes pasos sencillos:

Cree una script que se deriva de la Ventana del Editor.

Use el cdigo para activar la ventana para mostrarse a s misma.

Implemente el cdigo GUI para su herramienta.

Derivada de la Ventana del Editor


Con el fin de hacer su Ventana de Editor, su script debe ser almacenada adentro de
una carpeta llamada Editor. Haga una clase en este script que derive de la Ventana
del Editor. Luego escriba sus controles GUI en la funcin OnGUI interior.
//JS Example

class MyWindow extends EditorWindow {


function OnGUI () {
// The actual window code goes here
}
}

//C# Example

- 466 -
using UnityEngine;
using UnityEditor;
using System.Collections;

public class Example : EditorWindow

{
void OnGUI () {
// The actual window code goes here
}
}

MyWindow.js - colocada en una carpeta llamada Editor dentro su proyecto.

Mostrando la ventana
Con el fin de mostrar la ventana en la pantalla, haga un elemento del men que lo
muestra. Esto es hecho creando una funcin que es activada por
laMenuItem property.

El comportamiento por defecto en Unity es en reciclar ventanas (entonces


seleccionando el item del men nuevamente va a mostrar unas ventanas existentes.
Esto es hecho usando la funcin EditorWindow.GetWindow De esta manera:
//JS Example

class MyWindow extends EditorWindow {


@MenuItem ("Window/My Window")
static function ShowWindow () {
EditorWindow.GetWindow (MyWindow);
}

function OnGUI () {
// The actual window code goes here
}
}
//C# Example

using UnityEngine;
using UnityEditor;
using System.Collections;

class MyWindow : EditorWindow {


[MenuItem ("Window/My Window")]

public static void ShowWindow () {


EditorWindow.GetWindow(typeof(MyWindow));
}

void OnGUI () {
// The actual window code goes here
}
}
Mostrando el MyWindow

Esto crear una ventana de editor estndar, acoplable que guarda su posicin entre

- 467 -
las invocaciones, puede ser utilizado en diseos personalizados, etc. Para tener ms
control sobre qu es creado, usted puede usar GetWindowWithRect

Implementando el GUI de Su Ventana


Los contenidos actuales de la ventana son renderizados al implementar la funcin
OnGUI. Usted puede utilizar las mismas clases UnityGUI que usted usa para el GUI
dentro del juego (GUI and GUILayout). Adicionalmente, nosotros proporcionamos
algunos controles GUI adicionales, ubicados solamente en las clases del
editor EditorGUI y EditorGUILayout. Estas clases se suman a los controles que ya
estn disponibles en las clases normales, por lo que se pueden mezclar y combinar a
voluntad.

El siguiente cdigo C# le muestra cmo usted puede agregar elementos GUI a su


Ventana de Editor Personalizada:
//C# Example
using UnityEditor;
using UnityEngine;

public class MyWindow : EditorWindow


{
string myString = "Hello World";
bool groupEnabled;
bool myBool = true;
float myFloat = 1.23f;

// Add menu item named "My Window" to the Window menu


[MenuItem("Window/My Window")]
public static void ShowWindow()
{
//Show existing window instance. If one doesn't exist, make one.
EditorWindow.GetWindow(typeof(MyWindow));
}

void OnGUI()
{
GUILayout.Label ("Base Settings", EditorStyles.boldLabel);
myString = EditorGUILayout.TextField ("Text Field", myString);

groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings",


groupEnabled);
myBool = EditorGUILayout.Toggle ("Toggle", myBool);
myFloat = EditorGUILayout.Slider ("Slider", myFloat, -3, 3);
EditorGUILayout.EndToggleGroup ();
}
}

Este ejemplo resulta en una ventana que tiene este aspecto:

- 468 -
Ventana del editor personalizada
creada usando ejemplo suministrado.

Para ms informacin, eche un vistazo al ejemplo y la documentacin


en EditorWindow page.

- 469 -
Property Drawers
Los Property Drawers pueden ser usados para personalizar el aspecto de ciertos
controles en el Inspector, mediante el uso de atributos en sus scripts, o controlando
cmo un clase especfica Serializable debera verse.

Los Property Drawers tienen dos usos:

Personalizar el GUI de cada instancia de una clase Serializable.

Personalizar el GUI de miembros de script utilizando


Atributos de Propiedad(Property Attributes)

Personalizar el GUI de una clase Serializable


Si usted tiene una clase Serializable personalizada, usted puede utilizar un Property
Drawer para controlar cmo se ve en el Inspector. Considere el ingrediente de la clase
Serializable en el script de abajo:

JavaScript (example):
enum IngredientUnit { Spoon, Cup, Bowl, Piece }

// Custom serializable class


class Ingredient extends System.Object {
var name : String;
var amount : int = 1;
var unit : IngredientUnit;
}

var potionResult : Ingredient;


var potionIngredients : Ingredient[];

function Update () {
// Update logic here...
}
C# (example):

using UnityEngine;
using System.Collections;

public enum IngredientUnit { Spoon, Cup, Bowl, Piece }

// Custom serializable class


[System.Serializable]
public class Ingredient : System.Object {
string name;
int amount = 1;
IngredientUnit unit;

- 470 -
}

public class Recipe : MonoBehaviour {


Ingredient potionResult;
Ingredient[] potionIngredients;

void Update() {
// Update logic here...
}
}

using UnityEngine;
using System.IO;

class Testing : MonoBehaviour{

enum IngredientUnit { Spoon, Cup, Bowl, Piece }

// Custom serializable class


[System.Serializable]
class Ingredient{
string name;
int amount = 1;
IngredientUnit unit;
}

Ingredient potionResult;
Ingredient[] potionIngredients;

void Update () {
// Update logic here...
}
}
Utilizando un Property Drawer personalizado, cada apariencia de la clase del
Ingrediente en el Inspector puede ser cambiada. Compare el aspecto de las
propiedades del Ingrediente en el Inspector con y sin una Property Drawer
Personalizado:

Clase en el Inspector sin (izquierda) y con (derecha) Property Drawer Personalizado.

- 471 -
Usted puede adjuntar el Property Drawer a una clase Serializable utilizando el
atributo CustomPropertyDrawer y pasar el tipo de la clase Serializable al cual es un
drawer.

JavaScript (example):
@CustomPropertyDrawer(Ingredient)
class IngredientDrawer extends PropertyDrawer {

// Draw the property inside the given rect


function OnGUI (position : Rect, property : SerializedProperty, label :
GUIContent) {
// Using BeginProperty / EndProperty on the parent property means that
// prefab override logic works on the entire property.
EditorGUI.BeginProperty (position, label, property);

// Draw label
position = EditorGUI.PrefixLabel (position, GUIUtility.GetControlID
(FocusType.Passive), label);

// Don't make child fields be indented


var indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;

// Calculate rects
var amountRect = new Rect (position.x, position.y, 30, position.height);
var unitRect = new Rect (position.x+35, position.y, 50,
position.height);
var nameRect = new Rect (position.x+90, position.y, position.width-90,
position.height);

// Draw fields - passs GUIContent.none to each so they are drawn without


labels
EditorGUI.PropertyField (amountRect, property.FindPropertyRelative
("amount"), GUIContent.none);
EditorGUI.PropertyField (unitRect, property.FindPropertyRelative
("unit"), GUIContent.none);
EditorGUI.PropertyField (nameRect, property.FindPropertyRelative
("name"), GUIContent.none);

// Set indent back to what it was


EditorGUI.indentLevel = indent;

EditorGUI.EndProperty ();
}
}
C# (examples):
using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomPropertyDrawer(typeof(Ingredient))]
public class IngredientDrawer : PropertyDrawer {

// Draw the property inside the given rect


void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
// Using BeginProperty / EndProperty on the parent property means that
// prefab override logic works on the entire property.

- 472 -
EditorGUI.BeginProperty(position, label, property);

// Draw label
position = EditorGUI.PrefixLabel(position,
GUIUtility.GetControlID(FocusType.Passive), label);

// Don't make child fields be indented


int indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;

// Calculate rects
Rect amountRect = new Rect(position.x, position.y, 30, position.height);
Rect unitRect = new Rect(position.x+35, position.y, 50,
position.height);
Rect nameRect = new Rect(position.x+90, position.y, position.width-90,
position.height);

// Draw fields - passs GUIContent.none to each so they are drawn without


labels
EditorGUI.PropertyField(amountRect, property.FindPropertyRelative
("amount"), GUIContent.none);
EditorGUI.PropertyField(unitRect, property.FindPropertyRelative
("unit"), GUIContent.none);
EditorGUI.PropertyField(nameRect, property.FindPropertyRelative
("name"), GUIContent.none);

// Set indent back to what it was


EditorGUI.indentLevel = indent;

EditorGUI.EndProperty();
}
}

using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomPropertyDrawer (Ingredient)]
class IngredientDrawer : PropertyDrawer {

// Draw the property inside the given rect


void OnGUI (Rect position, SerializedProperty property, GUIContent label) {
// Using BeginProperty / EndProperty on the parent property means that
// prefab override logic works on the entire property.
EditorGUI.BeginProperty (position, label, property);

// Draw label
position = EditorGUI.PrefixLabel (position, GUIUtility.GetControlID
(FocusType.Passive), label);

// Don't make child fields be indented


var indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;

// Calculate rects
Rect amountRect = new Rect (position.x, position.y, 30,
position.height);
Rect unitRect = new Rect (position.x+35, position.y, 50,
position.height);
Rect nameRect = new Rect (position.x+90, position.y, position.width-90,

- 473 -
position.height);

// Draw fields - passs GUIContent.none to each so they are drawn without


labels
EditorGUI.PropertyField (amountRect, property.FindPropertyRelative
("amount"), GUIContent.none);
EditorGUI.PropertyField (unitRect, property.FindPropertyRelative
("unit"), GUIContent.none);
EditorGUI.PropertyField (nameRect, property.FindPropertyRelative
("name"), GUIContent.none);

// Set indent back to what it was


EditorGUI.indentLevel = indent;

EditorGUI.EndProperty ();
}
}

Personalizar el GUI de miembros de script utilizando


Atributos de Propiedad(Property Attributes)
El otro uso de un Property Drawer es alterar la apariencia de miembros en un script
que tienen Property Attributes personalizados. Digamos que usted quiere limitar
floats o enteros en su script a un cierto rango y mostrarlos como deslizadores en
el Inspector. Utilizando el PropertyAttributeintegrado llamado RangeAttribute usted
puede hacer justo eso:

JavaScript (example):
// Show this float in the Inspector as a slider between 0 and 10
@Range (0.0, 10.0)
var myFloat = 0.0;

//C# example.
[Range(0.0f, 10.0f)]
public float myFloat = 0.0f;

C# (example):
// Show this float in the Inspector as a slider between 0 and 10
[Range(0.0f, 10.0f)]
float myFloat = 0.0f;

Usted puede hacer su propio PropertyAttribute tambin. Nosotros utilizaremos el


cdigo para el RangeAttribute como un ejemplo. El atributo debe extender la
clases PropertyAttribute. Si usted quiere, su propiedad puede tomar parmetros y
almacenarlos como variables de miembro pblicas.

JavaScript (example):
class RangeAttribute extends PropertyAttribute {
var min : float;
var max : float;

- 474 -
function RangeAttribute (min : float, max : float) {
this.min = min;
this.max = max;
}
}

C# (examples):
using UnityEngine;
using System.Collections;

public class RangeAttribute : PropertyAttribute {


public float min;
public float max;

public RangeAttribute (float min, float max) {


this.min = min;
this.max = max;
}
}
using UnityEngine;
using System.Collections;

public class Testing : PropertyAttribute


{
float min;
float max;

void RangeAttribute (float min, float max) {


this.min = min;
this.max = max;
}
}
Ahora que usted tiene el atributo, usted necesitar hacer un Property Drawer que
dibuje propiedades que tengan ese atributo. El Drawer debe extender la
clase PropertyDrawer, y debe tener un atributo CustomPropertyDrawer para decirle
qu atributo es un drawer.

The property drawer class should be placed in an editor script, inside a folder called
Editor.

JavaScript (example):
// Tell the RangeDrawer that it is a drawer for properties with the
RangeAttribute.
@CustomPropertyDrawer (RangeAttribute)
class RangeDrawer extends PropertyDrawer {

// Draw the property inside the given rect


function OnGUI (position : Rect, property : SerializedProperty, label :
GUIContent) {

// First get the attribute since it contains the range for the slider
var range : RangeAttribute = attribute as RangeAttribute;

- 475 -
// Now draw the property as a Slider or an IntSlider based on whether
it's a float or integer.
if (property.propertyType == SerializedPropertyType.Float)
EditorGUI.Slider (position, property, range.min, range.max, label);
else if (property.propertyType == SerializedPropertyType.Integer)
EditorGUI.IntSlider (position, property, range.min, range.max,
label);
else
EditorGUI.LabelField (position, label.text, "Use Range with float or
int.");
}
}
C# (examples):
using UnityEngine;
using UnityEditor;
using System.Collections;

// Tell the RangeDrawer that it is a drawer for properties with the


RangeAttribute.

[CustomPropertyDrawer(typeof(RangeAttribute))]
public class RangeDrawer : PropertyDrawer {

// Draw the property inside the given rect


void OnGUI (Rect position, SerializedProperty property, GUIContent label) {

// First get the attribute since it contains the range for the slider
RangeAttribute range = attribute as RangeAttribute;

// Now draw the property as a Slider or an IntSlider based on whether


it's a float or integer.
if (property.propertyType == SerializedPropertyType.Float)
EditorGUI.Slider(position, property, range.min, range.max, label);
else if (property.propertyType == SerializedPropertyType.Integer)
EditorGUI.IntSlider(position, property, (int) range.min, (int)
range.max, label);
else
EditorGUI.LabelField(position, label.text, "Use Range with float or
int.");
}
}

Tenga en cuenta que por razones de rendimiento, las funciones EditorGUILayout no


son utilizables con Property Drawers.

- 476 -
Editores Personalizados
Una clave para aumentar la velocidad de creacin de juego es crear editores
personalizados para los componentes ms utilizados. Por el bien del ejemplo, vamos
a utilizar este simple script que siempre mantiene un objeto que mira un punto.
//C# Example (LookAtPoint.cs)
using UnityEngine;
public class LookAtPoint : MonoBehaviour
{
public Vector3 lookAtPoint = Vector3.zero;

void Update()
{
transform.LookAt(lookAtPoint);
}
}
//JS Example (LookAtPoint.js)
#pragma strict
var lookAtPoint = Vector3.zero;
function Update()
{
transform.LookAt(lookAtPoint);
}
This will keep an object oriented towards a world-space point. Currently this script will
only become active in play mode, that is, when the game is running. When writing
editor scripts its often useful to have certain scripts execute during edit mode too,
while the game is not running. You can do this by adding an ExecuteInEditMode
attribute to it:
//C# Example (LookAtPoint.cs)
using UnityEngine;
[ExecuteInEditMode]
public class LookAtPoint : MonoBehaviour
{
public Vector3 lookAtPoint = Vector3.zero;

void Update()
{
transform.LookAt(lookAtPoint);
}
}
//JS Example (LookAtPoint.js)
#pragma strict
@script ExecuteInEditMode()
var lookAtPoint = Vector3.zero;
function Update()
{
transform.LookAt(lookAtPoint);
}
Now if you move the object which has this script around in the editor, or change the
values of Look At Point in the inspector - even when not in play mode - the object will

- 477 -
update its orientation correspondingly so it remains looking at the target point in
world space.

Haciendo un Editor Personalizado


The above demonstrates how you can get simple scripts running during edit-time,
however this alone does not allow you to create your own editor tools. The next step
is to create a Custom Editor for script we just created.

When you create a script in Unity, by default it inherits from MonoBehaviour, and
therefore is a Component which can be placed on a game object. When placed on a
game object, the Inspector displays a default interface for viewing and editing all
public variables that can be shown - such as integers, floats, strings, Vector3s, etc.

Heres how the default inspector looks for our script above:

Yay por editores brillanetes

A custom editor is a separate script which replaces this default layout with any
editor controls that you choose.

To begin creating the custom editor for our LookAtPoint script, you should create
another script with the same name, but with Editor appended. So for our example:
LookAtPointEditor.
//c# Example (LookAtPointEditor.cs)
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(LookAtPoint))]
[CanEditMultipleObjects]
public class LookAtPointEditor : Editor
{
SerializedProperty lookAtPoint;

void OnEnable()
{
lookAtPoint = serializedObject.FindProperty("lookAtPoint");
}

public override void OnInspectorGUI()


{
serializedObject.Update();
EditorGUILayout.PropertyField(lookAtPoint);
serializedObject.ApplyModifiedProperties();
}
}
//JS Example (LookAtPointEditor.js)
#pragma strict
@CustomEditor(LookAtPoint)

- 478 -
@CanEditMultipleObjects
class LookAtPointEditor extends Editor {

var lookAtPoint : SerializedProperty;

function OnEnable()
{
lookAtPoint = serializedObject.FindProperty("lookAtPoint");
}

function OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(lookAtPoint);
serializedObject.ApplyModifiedProperties();
}
}
Esta clase debe derivar del Editor. El atributo @CustomEditor le informa a Unity qu
componente debe actuar como un editor.

El cdigo en el OnInspectorGUI es ejecutado cundo Unity muestra el editor en el


Inspector. Usted puede colocar cualquier cdigo GUI aqu - funciona igual que OnGui
hace para los juegos, pero se ejecuta en el interior del inspector. El Editor define la
propiedad objetivo que usted puede utilizar para acceder el objeto siendo
inspeccionado.

Its not very interesting because all we have done so far is to recreate the Vector3 field,
exactly like the default inspector shows us, so the result looks very similar (although
the Script field is now not present, because we didnt add any inspector code to
show it).

However now that you have control over how the inspector is displayed in an Editor
script, you can use any code you like to lay out the inspector fields, allow the user to
adjust the values, and even display graphics or other visual elements. In fact all of the
inspectors you see within the Unity Editor including the more complex inspectors such
as the terrain system and animation import settings, are all made using the same API
that you have access to when creating your own custom Editors.

Heres a simple example which extends your editor script to display a message
indicating whether the target point is above or below the gameobject:
//c# Example (LookAtPointEditor.cs)
using UnityEngine;
using UnityEditor;

- 479 -
[CustomEditor(typeof(LookAtPoint))]
[CanEditMultipleObjects]
public class LookAtPointEditor : Editor
{
SerializedProperty lookAtPoint;

void OnEnable()
{
lookAtPoint = serializedObject.FindProperty("lookAtPoint");
}

public override void OnInspectorGUI()


{
serializedObject.Update();
EditorGUILayout.PropertyField(lookAtPoint);
serializedObject.ApplyModifiedProperties();
if (lookAtPoint.vector3Value.y > (target as
LookAtPoint).transform.position.y)
{
EditorGUILayout.LabelField("(Above this object)");
}
if (lookAtPoint.vector3Value.y < (target as
LookAtPoint).transform.position.y)
{
EditorGUILayout.LabelField("(Below this object)");
}
}
}
//JS Example (LookAtPointEditor.js)
#pragma strict
@CustomEditor(LookAtPoint)
@CanEditMultipleObjects
class LookAtPointEditor extends Editor {

var lookAtPoint : SerializedProperty;

function OnEnable()
{
lookAtPoint = serializedObject.FindProperty("lookAtPoint");
}

function OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(lookAtPoint);
serializedObject.ApplyModifiedProperties();
if (lookAtPoint.vector3Value.y > (target as
LookAtPoint).transform.position.y)
{
EditorGUILayout.LabelField("(Above this object)");
}
if (lookAtPoint.vector3Value.y < (target as
LookAtPoint).transform.position.y)
{
EditorGUILayout.LabelField("(Below this object)");
}
}
}
So now we have an new element to our inspector which prints a message showing if
the target point is above or below the gameobject.

- 480 -
This is just scratching the surface of what you can do with Editor scripting. You have
full access to all the IMGUI commands to draw any type of interface, including
rendering scenes using a camera within editor windows.

Adiciones al Scene View


Usted puede agregar cdigo adicional para el Scene View por la implementacin de
un OnSceneGUI en tu editor personalizado. En este caso, vamos a aadir un segundo
juego de manillas de posicin, dejando que los usuarios arrastren el puesto de
observacin en el punto alrededor del Scene View.

OnSceneGui funciona igual que OnInspectorGUI - excepto que es ejecutado en el


scene view. Para ayudarlo hacer su interfaz de edicin, usted puede utilizar las
funciones definidas en la clase Handles. Todas las funciones ah estn diseadas para
trabajar en Scene Views 3D.
//C# Example (LookAtPointEditor.cs)
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(LookAtPoint))]
[CanEditMultipleObjects]
public class LookAtPointEditor : Editor
{
SerializedProperty lookAtPoint;

void OnEnable()
{
lookAtPoint = serializedObject.FindProperty("lookAtPoint");
}

public override void OnInspectorGUI()


{
serializedObject.Update();
EditorGUILayout.PropertyField(lookAtPoint);
if (lookAtPoint.vector3Value.y > (target as
LookAtPoint).transform.position.y)
{
EditorGUILayout.LabelField("(Above this object)");
}
if (lookAtPoint.vector3Value.y < (target as
LookAtPoint).transform.position.y)
{
EditorGUILayout.LabelField("(Below this object)");
}

serializedObject.ApplyModifiedProperties();

- 481 -
}

public void OnSceneGUI()


{
var t = (target as LookAtPoint);

EditorGUI.BeginChangeCheck();
Vector3 pos = Handles.PositionHandle(t.lookAtPoint,
Quaternion.identity);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Move point");
t.lookAtPoint = pos;
t.Update();
}
}
}
//JS Example (LookAtPointEditor.js)
#pragma strict
@CustomEditor(LookAtPointJS)
@CanEditMultipleObjects
class LookAtPointEditorJS extends Editor {

var lookAtPoint : SerializedProperty;

function OnEnable()
{
lookAtPoint = serializedObject.FindProperty("lookAtPoint");
}

function OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(lookAtPoint);
serializedObject.ApplyModifiedProperties();
if (lookAtPoint.vector3Value.y > (target as
LookAtPointJS).transform.position.y)
{
EditorGUILayout.LabelField("(Above this object)");
}
if (lookAtPoint.vector3Value.y < (target as
LookAtPointJS).transform.position.y)
{
EditorGUILayout.LabelField("(Below this object)");
}
}

function OnSceneGUI()
{
var t : LookAtPointJS = (target as LookAtPointJS);

EditorGUI.BeginChangeCheck();
var pos = Handles.PositionHandle(t.lookAtPoint, Quaternion.identity);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Move point");
t.lookAtPoint = pos;
t.Update();
}
}

- 482 -
}

Si usted quiere color objetos 2D GUI (GUI, EditorGUI y amigos), usted necesita
envolverlos en llamadas a Handles.BeginGUI() y Handles.EndGUI().

- 483 -
Corriendo Cdigo Script del Editor en la
Ejecucin
A veces, es til ser capaz de correr algo de cdigo script del editor en un proyecto tan
pronto Unity se ejecuta sin requerir una accin por parte del usuario. Usted puede
hacer esto al aplicar el atributo InitializeOnLoad a una clase que tiene un static
constructor (constructor esttico). Un constructor esttico es una funcin con el
mismo nombre que la clase, declarado esttico y sin un tipo de retorno o parmetros
(ver aqu for more information):-
using UnityEngine;
using UnityEditor;

[InitializeOnLoad]
public class Startup {
static Startup()
{
Debug.Log("Up and running");
}
}

Un constructor esttico siempre se garantiza que ser llamado antes de cualquier


funcin esttica o instancia de la clase utilizada, pero el atributo InitializeOnLoad
asegura que es llamado cuando el editor se ejecuta.

Un ejemplo de cmo esta tcnica puede ser utilizado es configurando un callback


regular en el editor (su actualizacin de frame, por as decirlo). La clase
EditorApplication tiene un delegado llamado update que es llamado tantas veces en
un segundo mientras el editor est ejecutndose. Para tener este delegado activado
cuando el proyecto se ejecute, usted podra utilizar cdigo como el siguiente:-
using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
class MyClass
{
static MyClass ()
{
EditorApplication.update += Update;
}

static void Update ()


{
Debug.Log("Updating");
}

- 484 -
}

- 485 -
Licencias y Activacin

Unity>Manage License

Esta seccin cubre la activacin de licencias y de manejar su licencia de Unity. Ver la


pgina de License FAQ para ayuda acerca de preguntas comunes de licencias.

- 486 -
Activacin en linea
La activacin online es la manera ms fcil y rpida de empezar a trabajar con Unity. A
continuacin hay una gua paso-a-paso acerca de cmo activar Unity online.

1. Descargue e instale el Editor de Unity. La ltima versin de Unity puede ser


encontrada aqu.

2. Dispare el Editor desde su carpeta de Aplicaciones en OS X o el atajo en el Men de


Inicio en Windows.

3. Siguiente, usted se va a encontrar con una ventana Unity Account. Aqu usted va a
necesitar ingresar las credenciales de su cuenta Unity Developer Network (UDN). (Si
usted no tiene una cuenta existente o ha olvidado su contrasea, simplemente click
los botones respectivos Create account y Forgot your password? y links. Siga las
indicaciones de la pantalla o recupere su cuenta.) Una vez sus credenciales ingresadas
usted puede proceder haciendo click en OK.

4. Usted se encontrar con una ventana llamada Choose a version of Unity. Seleccione

- 487 -
la versin de Unity que usted desea activar y click OK.

5. Para activar un Nmero Serial de Unity existente generado por la Store (tienda) o un
miembro de nuestro Equipo de Ventas, marque la caja Activate an existing serial e
ingrese el nmero serial apropiado. Una vez el nmero Serial haya sido ingresado, su
tipo de Licencia ser mostrado en la pantalla.

6. Para activar la versin Gratuita de Unity, marque la casilla Activating Unity Free

7. Usted ahora ser capaz de proceder al Editor de Unity haciendo click en el botn Start
using
Unity.

- 488 -
Para cualquier otra aclaracin, contacte support@unity3d.com.

- 489 -
Activacin fuera de linea/ Manual
Si la activacin en linea falla, esto se puede deber a varias cosas:

Si usted no tiene una conexin de internet

Si est detrs de un firewall, proxy o software anti-viral

Si la activacin Online falla, si usted no tiene una conexin a internet o usted e.g. est
detrs de un firewall que no le permite a Unity contactar el servidor de licencia, el
Editor va a automticamente intentar realizar una activacin manual.

Siga los siguientes pasos aqu para activar manualmente Unity en su maquina:

Siga los pasos aqu para activar manualmente Unity en su mquina. Tenga en cuenta
que usted necesita tener acceso a conexin de internet, como parte de este proceso,
pero no tiene que ser en la maquina en la cual est usted intenta activar Unity.

1. Abra Unity. Si Unity no puede contactar el servidor de licencia, usted se encontrar


con la ventana que hay a
continuacin.

__2. Haga click en el botn azul llamado Manual Activation.

__3. Haga click en el botn azul llamado Save License

- 490 -
Request.

4. Guarde el License File en el directorio de su preferencia.(asegrese de


acordarse dnde guardo su archivo. En este ejemplo, estoy guardando el archivo license a

la carpeta Documents).

Una vez usted haya presionado el botn Save, el archivo es guardado y usted debera ver
la siguiente notificacin arriba de la ventana.

- 491 -
El archivo de licencia que usted acaba de crear ser atado a la maquina en la que fue
generado. Este archivo de licencia no va a funcionar en otras maquinas. El archivo de
licencia ya no va a reconocer una maquina que ha sido re-formateada o ha tenido
cambios en el hardware.

Los siguientes pasos van a requerir un acceso a internet. Si la mquina no tiene un


acceso a internet, usted puede copiar el archivo guardado arriba a e.g. un USB y
realizar estos pasos en otra mquina.

__4. Vaya a __ Manual Activation Page.

6. Haga click en el botn Browse para escoger el archivo que fue guardado a la
carpeta de Documentos. Luego presione el botn Next. La siguiente ventana va a
aparecer.

- 492 -
En este ejemplo nosotros estamos licenciando una versin Pro de Unity.

7. Ingrese el nmero

- 493 -
serial.

Tenga en cuenta: En esta ventana el nmero serial ha sido ocultado. Haga click en el
botn Next.

8. Haga click en Download License File. Esto va a guardar el archivo de licencia en


la ubicacin que usted selecciono..

- 494 -
9. Vaya devuelta a Unity. Haga click en el botn Load License para cargar el
archivo del nmero serial el cual fue descargado.

- 495 -
Esto abrir sus directorios dentro de su disco duro.

10. Ahora, seleccione el archivo que usted acaba de descargar y haga clic
en OK. Unity va a proporcionarle a usted una ventana de Thank you!
(agradecimiento). Presione el botn Start Using Unity para continuar.

Tenga en cuenta: Algunos exploradores podran adjuntar .xml al nombre del


archivo de licencia. En este caso usted necesitar borrar esta extensin antes de
intentar cargar el archivo de licencia.

Si usted ya tiene Unity activado, y e.g. necesita actualizar su licencia, ver la


pgina Managing your Unity license

Para cualquier asistencia adicional, por favor pngase en contacto


con support@unity3d.com.

- 496 -
Manejando su Licencia de Unity
Mi mquina ya no es accesible:
Usted puede devolver activaciones desde el numero(s) serial agregado a su cuenta de
la webstore (tienda web).

1.Vaya a License Management Section de su cuenta de la webstore.

2.Agregue su numero serial a la cuenta si no lo ha si no est ya aadi.

3.Click Activations a la derecha del nmero serial.

4.Click Disable all Activations.

Desafortunadamente usted no puede devolver activaciones solas, esto solo las resetea.

Mi mquina todava est accesible:


Usted ahora es capaz de manejar su licencia desde el editor. A continuacin hay una
gua acerca de cmo este sistema funciona y se lleva a cabo.

1. Click el despegable Unity en la barra de pestala (Help en Windows OS). Click la


opcin Manage License (Este es lugar unificado dentro del Editor para todas las
necesidades de su licencia).

Una vez usted haya click en la opcin Manage License usted se va a encontrar con
la ventana License Management. Usted luego tiene cuatro opciones (ver imagen),
explicado a continuacin:

- 497 -
License Management Window

Check for updates

Activate new license:

Return license

Manual activation
Para mayor asistencia, por favor contactar support@unity3d.com.

- 498 -
Preguntas frecuentes de activacin
En cuntas mquinas puedo instalar mi copia de Unity?

Cada licencia comercial de Unity paga le permite a una sola persona utilizar Unity
en dos maquinas que tengan un uso exclusivo de ellas. Sea en Mac y en PC o sus
maquinas del Trabajo y Hogar. Las licencias de Educacin vendidas va Unity o
cualquiera de nuestros distribuidores son solamente buenas para una sola activacin.
Lo mismo va a licencias Prueba (Unity 4.x solamente), a menos que se indique lo
contrario.

La versin gratuita de Unity podra no ser licenciada por un entidad comercial con
ingresos anuales (basados en el ao fiscal) en exceso de US$100,000, o por una
entidad educacional, sin animo de lucro o del gobierno con un presupuesto anual
sobre US$100,000,.

Si usted es una Entidad Lega, usted podra no combinar archivos desarrollados con la
versin gratuita de Unity con cualquier archivos desarrollados por usted (o por un
tercero) a travs del uso de Unity Pro. Ver nuestra EULA para ms informacin acerca
del uso de licencia.

Yo necesito utilizar mi licencia en otra maquina, pero obtengo ese mensaje que
mi licencia ha sido Activated too many times (activada muchas veces). Qu
debera hacer?

Usted va a necesitar Return (Devolver) su licencia. Esto le permite a usted devolver la


licencia en la maquina que usted ya no requiere, que a su vez le permite a usted re-
activarla en una nueva maquina. Referirse a Managing your Unity License, para ms
informacin.

Mis informacin de cuenta no es reconocida cuando ingreso durante el proceso


de Activacin?

Asegrese de que sus detalles sean ingresados de manera correcta. Las claves
distingue maysculas y minsculas, por lo que revise si usted est escribiendo
exactamente lo que usted registro. Usted puede reset su clave utilizando este link.

Si usted todava est teniendo problemas ingresando, contacte support@unity3d.com

Puedo utilizar mi Unity 5.x con el numero Serial de mi 4.x?

- 499 -
No, usted no puede. Con el fin de utilizar Unity 5.x, usted necesitar actualizarse a una
licencia 5.x . Usted puede hacer esto Enlinea, va nuestro Web Store

Estoy planeando remplazar un item de hardware y/o mi SO. Qu debera hacer?

Tal como cambiar maquina, usted va a necesitar Return (devolver) su licencia antes
de hacer cualquier cambio de hardware o OS de su maquina. Si usted falla Return
(devolver) la licencia, nuestro servidor va a ver una peticin de otra maquina y le va a
informar que usted ha llegado a su limite de activacin para la licencia. Referirse
a Managing your Unity License, para ms informacin acerca de devolver la licencia.

*Mi maquina muri sin dejarme poder devolver (Return) mi licencia. Qu hago ahora?

Primero, intente visitar:

https://store.unity3d.com/account/licenses

Esta pgina le debera permitir a usted devolver activaciones, a travs del uso del
botn Disable all activations.

Si la pgina en linea no le ayuda, entonces escriba un correo


a support@unity3d.com explicando su situacin. Incluya los detalles de a
continuacin.

El numero seria que usted estaba utilizando en la maquina.

El nombre (red local) de la maquina que ha muerto.

El nmero de orden o factura utilizada para hacer la compra.

El Equipo de Soporte va a luego ser capaz de Return (devolver) su licencia de manera


manual. Esto puede tomar algo de tiempo. Tenga en cuenta que este proceso no es
posible para licencias que no han sido compradas.

Yo tengo dos licencias, cada una con un add-on (complemento) que yo requiero.
Cmo los activo en unison en mi maquina?

Usted no puede. Una sola licencia pude ser solamente utilizada en una maquina a la
vez.

Dnde est almacenado el archivo de mi licencia de Unity 5.x?

/Library/Application Support/Unity/Unity_v5.x.ulf (OS X)

C:\ProgramData\Unity\ (Windows)

- 500 -
C:\Users\(username)\AppData\Local\VirtualStore\ProgramData\Unity, si
el Windows User Account Control (UAC) ha restringido su acceso
a C:\ProgramData\Unity. (Esto puede suceder si la carpeta es eliminada o Unity es
comenzado con permisos administrativos por primera vez.)

Cmo puedo usar diferentes versiones de Unity?

Unity asume que slo una nica versin de Unity puede correr en tu mquina. Sin
embargo, t puedes tener multiples versiones de Unity instaladas y correrlas en tu
mquina. Todas estas versiones necesitan el mismo nmero de serie. Si usted tiene
diferentes versiones de Unity que requiren diferentes licencias usted necesitar una
manera de copiar las licencias de un lado a otro. Una forma de hacer esto es tener las
licencias almacenadas en su escritorio. Antes de correr una versin especfica copie el
archivo ULF requerido en el lugar donde la licencia necesita ser guardada.

Para mayor asistencia, por favor contactar a support@unity3d.com.

- 501 -
Guas de Actualizacin
Visite las pginas de abajo para informacin acerca de actualizarse a versiones
posteriores de Unity.

Actualizando a Unity 5.3 [Sacado 08dic15]

Actualizando a Unity 5.2 [Sacado 08sep15]

Actualizando a Unity 5.0 [Sacado 03mar15] (Hay varias sub-pginas para esto.)

Actualizando a Unity 4.0 [Sacado 13nov12]

Actualizando a Unity 3.5 [Sacado 14feb12]

- 502 -
Usando la Actualizacin Automtica del API

Por qu mi cdigo necesita ser actualizado?


Algunas veces, durante el desarrollo del software de Unity, tomamos la decisin de
cambiar y mejorar la manera en que las clases, funciones y propiedades (el API)
funcionan. Hacemos esto con un esfuerzo en causar el menor impacto sobre el cdigo
existente de los usuarios. Pero algunas veces, para hacer las cosas mejor, tenemos
que romper cosas.

We tend to only introduce these significant breaking changes when moving from one
significant version of Unity to another, and only in cases that it makes Unity easier to
use (meaning users will incur fewer errors) or brings measurable performance gains,
and only after careful alternative consideration. However, the upshot of this is that if
you were to - for example - open a Unity 4 project in Unity 5, you might find some of
the scripting commands that you used have now been changed, removed, or work a
little differently.

One obvious example of this is that in Unity 5, we removed the quick accessors
which allowed you to reference common component types on a GameObject directly,
such as gameObject.light, gameObject.camera, gameObject.audioSource, etc.

In Unity 5, you now have to use the GetComponent command for all types, except
transform. Therefore if you open a Unity 4 project that uses gameObject.light in
Unity 5, you will find that particular line of code is obsolete and needs to be updated.

The automatic updater


Unity has an Automatic Obsolete API Updater which will detect uses of obsolete
code in your scripts, and can offer to automatically update them. If you accept, it will
rewrite your code using the updated version of the API.

- 503 -
The API Update dialog

Obviously, as always, its important to have a backup of your work in case anything
goes wrong, but particularly when youre allowing software to rewrite your code! Once
youve ensured you have a backup, and clicked the Go Ahead button, Unity will
rewrite any instances of obsolete code with the recommended updated version.

Entonces, si por ejemplo usted tuviera un script que hiciera esto:


light.color = Color.red;
Unitys API updater would convert that for you to:
GetComponent<Light>().color = Color.red;
El flujo de trabajo en general del updater es como sigue:

1. Abra un project / importe un paquete que contenga scripts / assemblies con uso de
API obsoleto

2. Unity activa una compilacin script

3. El API updater revisa por errores de compilacin en partculas que son conocidos
como updatable (actualizables)

4. If we find any occurrence in previous step, show a dialog to user offering automatic
update, otherwise, weve finished.

5. If user accepts the update, then run API updater (which will update all scripts written
in the same language being compiled in step 2)

6. Go to step 2 (to take any updated code into account) until no scripts get updated in
step 5

So, from the list above you can see the updater may run multiple times if there are
scripts which fall into different compilation passes (Eg, scripts in different languages,
editor scripts, etc) that use obsolete code.

- 504 -
When the API Updater finishes successfully, you will get a notification in the console,
like this:

Success!

If you choose not to allow the API updater to update your scripts, you will see the
script errors in your console as normal. You will also notice that the errors which the
API Updater could update automatically are marked as (UnityUpgradable) in the
error message.

Errors in the console, when the API updater is canceled

If your script has other errors, in addition to obsolete API uses, the API updater may
not be able to fully finish its work until you have fixed the other errors. In this case,
youll be notified in the console window with a message like this:

Other errors in your scripts can prevent the API updater from working properly.

Some scripts have compilation errors which may prevent obsolete API usages to get
updated. Obsolete API updating will continue automatically after these errors get
fixed.

Once you have fixed the other errors in your script, you can run the API updater again.
The API updater runs automatically when a script compilation is triggered, but you can
also run it manually from the Assets menu, here:

- 505 -
The API Updater can be run manually
from the Assets menu.

Solucin de Problemas
If you get a message saying API Updating failed. Check previous console messages.
this means the API updater encountered a problem that prevented it from finishing its
work.

A common cause of this is if the updater was unable to save its changes - if for
example - the user does not have rights to modify the updated script. It might be write
protected, for instance.

By checking the previous lines in the console as instructed, you should be able to see
the problems that occurred during the update process.

En este ejemplo el actualizador del API fallo ya que este no tena permiso de escritura

- 506 -
para el archivo script.

Limitaciones
No todo cambio de la API puede ser arreglado automticamente por el actualizador.
Abajo hay una lista de los cambios actuales del API que nopueden ser arreglados por
el actualizador:

Mesh.GetTriangleStrip() / SetTriangleStrip()

TextureImporter: ReadTextureImportInstructions(UnityEditor.TextureImpo
rtInstructions, UnityEditor.BuildTarget) -
> ReadTextureImportInstructions(UnityEditor.BuildTarget, out
UnityEngine.TextureFormat, out UnityEngine.ColorSpace, out
System.Int32)

InteractiveCloth /SkinnedCloth -> Cloth (No es posible en absoluto.)

GameObjectUtility: GetNavMeshLayerNames() -> GetNavMeshAreaNames()

WWW: WWW(string, byte[], System.Collections.Hashtable) -


> WWW(string, byte[], System.Collections.Dictionary)

AudioClip: Create(string,int,int,int,bool,bool) -> Create(string,int,in


t,int,bool)

IPackerPolicy: OnGroupAtlases(UnityEditor.BuildTarget,
UnityEditor.Sprites.PackerJob, UnityEditor.TextureImporter[]) -
> OnGroupAtlases(UnityEditor.BuildTarget,
UnityEditor.Sprites.PackerJob, System.Int32[]) (un tipo de parmetro
completamente diferente)
PasteToStateMachineFromPasteboard
CopyStateMachineDataToPasteboard

AssetBundle: Load (cambio de comportamiento)

MeshCollider: bool smoothSphereCollisions (quitado)

TerrainData: PhysicMaterial physicMaterial (quitado)

- 507 -
Actualizarse a Unity 5.3

Global Illumination (GI - Iluminacin Global)


Los Lightmap Snapshot fuero re-nombrados a Lighting Data asset. El formato interno
de los datos de la iluminacin fue cambiado despus de la actualizacin a Enlighten 3.
Los Snapshots de versiones previas a Unity ya no son soportados y deberan ser re-
baked.

Esto tambin afecta los AssetBundles de la escena streamed con GI (iluminacin


global) en tiempo real. Los datos del Lightmap no sern cargados y por lo tanto tales
bundles deberan ser tambin re-construidos.

Los light probes y la iluminacin ambiental ahora son consistentes en gamma y linear
color space. Algunas diferencias en la iluminacin ambiente comparado a Unity 5.2
son de esperarse. El Output coincide con la intensidad de Unity 4.x de manera
prudente ahora pero ya que 4.x y nuestro cdigo de proyeccin de luz genera
coeficientes L2 y Enlighten solamente da como salida (output) L1, el resultado final de
los light probes pueden parecer diferente. Soporte L2 para light probes aparecer en
una versin futura. Las luces direccionales no importantes deberan ahora coincidir
con 4.x. Los Light probes siempres son pasados a los shaders en linear color space y
la conversin final gamma sucede en la GPU. Si usted est utilizando las funciones
ShadeSHxxx de Unity para evaluar los armnicos esfricos en el shader, usted no
debera tener que cambiar sus shaders. En los shaders UNITY_STANDARD_SIMPLE la
evaluacin de los armnicos esfricos no se divide entre el pixel y vertex shaders, por
lo que se limita las conversiones lineales a gamma para que solo sucedan una vez y
solamente en el vertex shader. En GPUs ms avanzadas, los clculos se dividen entre
vertex y fragment shader.

Shuriken
El tamao de la partcula en el Modulo de Colisin ha sido remplazado por un nuevo
parmetro: Radius Scale. Este nuevo parmetro funciona como un multiplicador en el
tamao actual de la partcula. Si usted estuviera utilizando el valor antiguo para hacer
cualquier cosa en vez de aproximar los tamaos de la partculas, entonces usted
necesitar re-configurar los limites de su colisin utilizando el nuevo parmetro.

- 508 -
Edicin Multi Escena (Multi Scene Editing)
La caracterstica de edicin multi escena introduce el nuevo API a travs de
EditorSceneManager y SceneManager. Estos significa que muchos de los APIs de
EditorApplication y Application se han vuelto obsoletos.

EditorApplication.NewScene

EditorApplication.NewEmptyScene

EditorApplication.OpenScene

EditorApplication.OpenSceneAdditive

EditorApplication.SaveScene

EditorApplication.SaveCurrentSceneIfUserWantsTo

EditorApplication.SaveCurrentSceneIfUserWantsToForce

Todo lo anterior de arriba tiene APIs equivalentes en EditorSceneManager

EditorApplication.currentScene

Internamente esto va a devolver el nombre de la escena activa en el Scene Manager,


pero para obtener todas las escenas actuales utilice los APIs del EditorSceneManager.

EditorApplication.MarkSceneDirty

EditorApplication.isSceneDirty

Cada escena ahora tiene su propia dirty flag. Obtenga las escenas a travs del
EditorSceneManager y revise su estado. La configuracin de escenas dirty (sucias)
tambin se hace a travs del EditorSceneManager. Los APIs obsoletos todos operan
en la escena activa solamente.

Application.LoadLevel

Application.LoadLevelAsync

Application.LoadLevelAdditive

Application.LoadLevelAdditiveAsync

Application.LoadLevel[Async](path) re-direcciona a SceneManager.LoadScene[Async]


(path, false) y Application.LoadLevelAdditive[Async](path) re-direcciona a
SceneManager.LoadScene[Async](path, true)

- 509 -
Application.loadedLevel

Application.loadedLevelName

Esto respectivamente obtiene el Build Setting Index (Indice del ajuste de la


construccin) de la escena activa y el nombre de la escena activa. Usted debera
utilizar el SceneManager para obtener los indices y nombres de todas las escenas
cargadas.

Tenga en cuenta que tambin que EditorApplication.OpenSceneAdditive ya no se


puede llamar durante la reproduccin (play) en el Editor. Esto tambin significa que
no puede ser llamada desde un callback [PostprocessScene]. Si
EditorApplication.OpenSceneAdditive es llamado durante la reproduccin igualmente,
entonces el modo de reproduccin ser detenido.

Assets Shader Pre-compilados


Los assets de shaders pre-compilados ya no son soportados - esto significa que usted
ya no puede hacer click en show compiled code y copiar el desembalaje resultante al
nuevo asset shader. Los assets shader viejos que estn pre-compilados sern
marcados como no soportados.

El show compiled code en el inspector del shader todava va a funcionar y va a


mostrar el desmontaje del shader en cada plataforma.

Del mismo modo usted todava puede ver el cdigo generado para el surface shader,
modificarlo, y copiarlo a un nuevo asset shader - ya que es solamente la fuente HLSL
que usted est modificando.

Esto va a afectar los AssetBundles construidos en versiones previas de Unity - estos


tienen assets shader compilados dentro de ellos por definicin. Cualquier shader en
tales bundles van a necesitar estar re-construidos.

Para informacin ms detallada usted puede ver este blog post de Unity acerca de las
caractersticas que se volvern obsoletas.

Soporte OpenGL 4.x en desktop


Como una nueva caracterstica, el Editor OS X y Standalone ahora soportan el nuevo
backend de GL, el cual habilita el uso de caractersticas de OpenGL 3.x y 4.x tal como
tessellation (teselacin) y shaders de geometra. Sin embargo, ya que Apple restringe

- 510 -
la versin OpenGl en desktop OS X a 4.1 como mucho, no va a soportar todas las
caractersticas de Directx 11 (tal como Unordered Access Views o Compute Shaders).
Esto significa que todos los shaders que estn configurados para tener un nivel
shader de 5.0 (con #pragma en 50) va a fallar en ser cargado en OS X.

Por lo tanto un nuevo nivel objetivo shader es introducido: #pragma target gl4.1. Este
nivel objetivo requiere al menos OpenGL 4.1 o un nivel shader Directx 11.0 de 5 en
desktop, o OpenGL ES 3.1 + Android Extension Pack en mviles.

AssetBundles
El formato contenedor del AssetBundle fue cambiado con el fin de soportar una
nueva compresin LZ4 y tener una base para mejoras futuras. Los Bundles creados en
versiones previas (2.x, 3.x) son obsoletas y no soportadas. Los Bundles creados en
Unity 4.x, 5.05.2 estn soportados y pueden ser cargados. Pero, si ya estuviera en
cach en el dispositivo del usuario utilizando el mtodo
WWW.LoadFromCacheOrDownload, esto seran re-descargados. Tambin tenga en
cuenta que los datos en dichos bundles podran estar sujetos a cambio (ver e.g la
seccin de Global Illumination).

GetComponent(s)InChildren
GetComponentsInChildren ha cambiado un poco de comportamiento en el caso
dnde usted lo invoque en un gameobject que tiene un padre que est inactivo.
Previamente, usted siempre obtendra un arreglo vaco como resultado. Debido a que
esto es lo que usted nunca quiere, y debido a que eso significara que
GetComponentsOnChildren no funcionara en prefabs, esto ha sido cambiado para
ignorar cualquier estado activo del gameobject padre objeto. Tambin, la versin
singular GetComponentInChildren() ahora tiene un argumento opcional
includeInactive.

UI/default shaders ( Shaders UI/Predeterminados)


Utilizar un nuevo shader UI default en objetos UI no nuevos ya no se soporta por el
default. Previamente haba una revisin if para determinar si s o no
el clipRect debera ser utilizado pero por razones de rendimiento esta revisin fue
quitada. Para continuar utilizar un nuevo UI shader en objetos UI no nuevos, usted
necesitar especificar un clipRect valido usted mismo.

- 511 -
Luces Point y Spot que emiten sombras
Las point lights que estn seleccionadas para emitir sombras ahora tienen un
deslizador bias funcionando, para permitir el ajuste y el balanceo de artifacts
(problemas) de sombras (under shadowing vs shadow acne). Esto significa que
cualquier point lights existente que podran tener un Bias configurado antes que no
estuviera haciendo nada, ahora comenzar a tener un efecto, y esto va a cambiar el
comportamiento de emisin de sombras.

Los Spot Lights que emiten sombras ahora tienen un nuevo deslizador que le permite
a usted seleccionar la distancia near clip. Esta es la distancia a la luz que si un objeto
est debajo de ella no va a emitir sombras. Unos valores bajos incluyen objetos
cercanos, al precio de una precisin altamente reducida para las sombras. En
versiones previas de Unity esto era calculado en 4% del rango total de la luz, la cual
puede ser un poco mayor para luces grandes. Ahora el predeterminado es a 0.2, que
debera funcionar en la mayora de casos.

Matemtica de Quaternions
The new support of importer Euler rotation curves, and the support of all the different
Euler rotation orders necessitated a rewrite of the QuaternionToEuler and
EulerToQuaternion mathematics functions, both in traditional and SIMD versions.
Those new variations have not been made available in the API yet, and are only used
internally for now.

This should have very little impact, but there are minute differences (<0.01 degrees) in
the results between the previous version and the new one, and only when very close
to gimbal lock conditions. Tests run have shown the new version to be more accurate
most of the time, and the average error to be smaller by at least a factor of 10.

JointDriveMode flags
JointDriveMode flags are now obsolete, and thus have been removed. However, in
earlier versions of Unity they were incorrectly being used to ignore the Configurable
Joints Joint Drive stiffness and damping settings. When upgrading a project to Unity
5.3 which uses Configurable Joints, users should be aware that these settings may
now be having an effect when previously they did not - because they were wrongly
being ignored based on the old JointDriveMode flags.

- 512 -
Legacy Light Animation
As of 5.3, Legacy Animations, both existing and new, will not animate Light properties.
Changes to the underlying data structure of the Lights have made them incompatible
with Legacy. To properly animate Lights, please use the Animator Component.

Editor Extensions
The scenes dirty flag is now respected when saving scenes. Editor extensions that do
not correctly set the dirty flag may fail to save data correctly. Use Undo.RecordObject
to record that an object is about to change and to update the scenes dirty flag
accordingly, or EditorSceneManager.MarkSceneDirty to forcibly mark the entire scene
as dirty.

Camera Depth Texture shader variable


The _CameraDepthTexture shader variable has been fixed to consistently refer to
the primary depth texture on the camera, and not as it did previously to the last depth
texture rendered by any camera. If you are rendering a secondary camera in a script
to e.g. obtain a half-resolution depth buffer and you need to bind its depth texture,
you should now use the _LastCameraDepthTexture variable which has the
semantics of referring to the depth texture of whichever camera rendered last.

- 513 -
Actualizndose a Unity 5.2

Global Illumination
UV packing for baked UVs not filling the 01 space (smaller or bigger) has been fixed. It
makes the resolution assigned to each object work much more reliably if that objects
unwrap is not filling the 01 space and also when its bounds are non-square. Please
review the resolution on your instances for baked lightmaps.

Shader variant stripping was fixed for realtime lightmaps. Now each lightmaps mode
(non-directional, directional and directional specular) variant can be picked for baked
and realtime GI separately. Please review your settings if you previously selected a
specific lightmaps mode variant in the Graphics Settings to make that mode work for
realtime lightmaps.

Bounce scale has been changed from the arbitrary value of 0.7 to 1.0. The bounce is
the product of the albedo and bounce scale. Artists should set real-life albedo values
(the brightest non-metallic is snow with 0.9). This is our PBS
reference http://forum.unity3d.com/threads/official50-pbr-calibration-
charts.289416/

Since you should author physically correct albedo, it makes sense for us to set the
scale close to 1. We already clamp albedo values in the meta pass, so the bounce scale
should just be 1.0f.

Please note that if you choose to set albedo to 1.0 in a custom meta pass without
clamping, then the scene can look like its exploding with light.

Shaders
Fixed Function style shaders (the ones that use SetTexture, Lighting On etc.)
internally get turned into actual shaders at shader import time now. Upside is that
they now work on all platforms (previously did not work on consoles), and with more
consistency. Also a lot of code and fixed function related inefficiencies got removed
from runtime, making rendering a bit faster. Downside is, creating fixed function
shaders at runtime - using new Material(fixedFunctionShaderString) - does
not work anymore. That constructor was deprecated in Unity 5.1, and now in 5.2 it
actually stopped working for fixed function shaders.

- 514 -
Reflection Probes
Weve changed how Reflection Probes are rendered when using Deferred Shading, in
order to allow screen space reflections effects in the future. Short version is: in
deferred shading, reflection probes are per-pixel instead of per-object now.

Comparison of current behavior (reflection probes per object; in some cases hard to avoid
harsh reflection transitions between large objects) and reflection probes per pixel
(transitions much less visible; and they happen at probe boundaries not at object
boundaries):

Before (5.0 and 5.1)

Reflection probes are sampled during the G-buffer pass, in exactly the same way as in
forward rendering. They are written into emission buffer together with light probes,
lightmaps and emissive material parts.

This meant you get one (or two, when probe blending is on) reflection probes per
object.

Reflections being together with emission/lightmaps in the same buffer means that
doing SSRR properly is hard. SSRR provides reflections by itself (and falls back to
reflection probes where it cant), but it does not know which part of emission buffer
color is coming from reflection probes.

Now (5.2)

When using deferred shading, do not sample reflection probes during G-buffer pass.

Instead, after the G-buffer is done, make a separate deferred reflections pass that
draws reflection probes as boxes in screenspace; that output reflection information

- 515 -
into a separate render target.

[Future: SSRR effect will use this separate reflections buffer]

Combine reflections buffer & emission buffer at the end.

What does this mean? (everything below only affects deferred shading)

Reflection probes are no longer per-object; they are effectively per-pixel. It is easier
to have large objects affected by many reflection probes.

Also probes got a blend distance which defines how much space around the probe is
used for blending into other probes.

Smaller probes override larger ones.

Reflection probe Renderer flags (probe blending, etc.) are ignored; everything is
affected by reflection probes in the same way (since it happens in screenspace now).
This is very similar to how receive shadows flag is ignored in deferred shading.

Your custom-written shaders that do deferred shading should mostly continue to


work (in the worst case, they will be sampling a black reflection cubemap). If you do
some totally crazy stuff in shaders, they might need to be updated to work with
deferred shading in 5.2.

If you are using custom deferred shading light pass shader (with custom BRDF etc.),
youll probably want to use custom deferred reflections shader too, with the same
BRDF applied to reflection probes.

Shuriken
Particles are now generated in world space, which may require an update to any
custom vertex shaders. This change was made in order to allow re-use of the particle
buffers between each eye for VR.

Mesh particles now support the Texture Sheet Animation module. Its worth checking
that your existing effects do not have this enabled by accident, otherwise you may see
a change in behaviour.

The Dampen parameter in the Limit Velocity over Lifetime module used to have a
stronger effect at higher framerates. This has been fixed, and if your game is
targetting 30fps, your old effects will be unaffected by this change. However, if your
game targets a differnet FPS, you can update the Dampen value using this formula, to

- 516 -
ensure your effect is unchaged in 5.2:
newDampen = 1.0f - pow(1.0f - oldDampen, targetFPS / 30.0f);

Material.CopyPropertiesFromMaterial now also copies shader keywords and


render queue. If you were relying on them being not copied, youll have to change
your code.

SpeedTree materials now need to be re-generated as there are changes to SpeedTree


built-in shaders. You could do so by selecting SpeedTree prefabs in your project and
hit Apply & Generate Materials button. Please be noted that by doing so your
customisations to the generated material assets (if any) will be overwritten.

UI (Interfaz de Usuario)
In 5.2 we have combined the shaders that text and normal UI element rendering
users. A side effect of this is that if you specify a manual font texture in a 32bit format
then the color channels will be honored. This means that black texture channels will
result in black text where previously the text would be white (we only looked at the
alpha). If you wish to use custom textures for your fonts do one of the following:

1. Change the import format of the texture to A8. This will only keep the alpha
component and Unity will generate the text as white by default.

2. Specify a color / colors in the texture for Unity to use when rendering the text

Multiplayer
The way the project identification is handled has changed in Unity 5.2, now the project
is automatically registered and you do not need to manually enter an ID anywhere.
There is a Multiplayer panel in the Services Window (open it with cloud icon in upper
right corner) and in there you can find a deep link directly to the project on the
website (Go to dashboard). When configured the Multiplayer configuration will appear
here.

- 517 -
Graphics (Other items)

- 518 -
Actualizando a Unity 5.0
Muchas de las caractersticas y sistemas de Unity han sido actualizados en Unity5,
incluyendo Fsica, Audio, Animacin, Shaders y mucho ms. Mientras muchas reas
son automticamente actualizadas cuando usted abre un proyecto ms viejo, hay
ciertas reas dnde usted tendr que manualmente ajustar o re-factorizar partes de
su proyecto.

Estas pginas son una referencia rpida a la mayora de cambios que usted necesita
tener en cuenta cuando actualice un proyecto de Unity4 a Unity5.

AI en Unity 5.0

Animacin en Unity 5.0

Audio en Unity 5.0

Baked Data en Unity 5.0

Plugins en Unity 5.0

Fsica en Unity 5.0

Shaders en Unity 5.0

Otras notas para actualizarse a Unity 5.0

- 519 -
AI (Inteligencia artificial) en Unity 5.0
Estas son notas para tener en cuenta cuando actualice proyectos de Unity 4 a Unity 5,
si su proyecto utiliza las caractersticas AI/Navmesh.

El Navmesh contour puede verse diferente debido a un cambio en la particin - en


casos con corredores/puertas de entrada muy angostas o similar - esto puede llevar a
una diferencia en la conectividad. Arregle el problema al ajustar el tamao voxel para
el navmesh building.

Configurando el destino para el NavMeshAgent no reanudar el agente despus de


llamar Stop - llame Resume explcitamente para reanudar al agente.

NavMeshAgent.updatePosition: Cuando updatePosition es falso y el transform del


agente es movido, la posicin del agente no cambia. Previamente la posicin del
agente se hubiera reset a la posicin del transform - limitado al navmesh cercano.

NavMeshObstacle component: La figura predeterminada para nuevos componentes


NavMeshObstacle creados es una caja. La figura seleccionada (caja o cpsula) ahora
aplica a ambos carving y avoidance.

Navmesh construido con anteriores versiones de Unity no es soportado. Usted tendr


que reconstruirlo con Unity 5. Usted puede utilizar la siguiente script como un
ejemplo acerca de cmo reconstruir los datos del NavMesh para todas sus escenas.

Script Ejemplo para Rebake


#if UNITY_EDITOR
using System.Collections.Generic;
using System.Collections;
using System.IO;
using UnityEditor;
using UnityEngine;
public class RebakeAllScenesEditorScript
{
[MenuItem ("Upgrade helper/Bake All Scenes")]
public static void Bake()
{
List<string> sceneNames = SearchFiles (Application.dataPath, "*.unity");
foreach (string f in sceneNames)
{
EditorApplication.OpenScene(f);

// Rebake navmesh data


NavMeshBuilder.BuildNavMesh ();

EditorApplication.SaveScene ();
}
}

- 520 -
static List<string> SearchFiles(string dir, string pattern)
{
List <string> sceneNames = new List <string>();
foreach (string f in Directory.GetFiles(dir, pattern,
SearchOption.AllDirectories))
{
sceneNames.Add (f);
}
return sceneNames;
}
}
#endif

- 521 -
Animacin en Unity 5.0
Estas son notas para tener en cuenta cuando actualice proyectos de Unity 4 a Unity 5,
si su proyecto utiliza las caractersticas de animacin.

API de Creacin de Asset


En 5.0 nosotros introducimos un API que le permite a usted construir y editar los
assets de Mecanim en el editor. Para usuarios que hayan previamente utilizado el API
no soportado (en el namespace de UnityEditorInternal) usted necesitar
manualmente actualizar sus scripts para utilizar el nuevo API.

Aqu hay una pequea lista de los cambios de tipo ms encontrados :

Previamente:
UnityEditorInternal.BlendTree
UnityEditorInternal.AnimatorController
UnityEditorInternal.StateMachine
UnityEditorInternal.State
UnityEditorInternal.AnimatorControllerLayer
UnityEditorInternal.AnimatorControllerParameter
Tambin tenga en cuenta que las funciones ms de acceso (accessor) han cambiado a
arreglos:
UnityEditorInternal.AnimatorControllerLayer layer =
animatorController.GetLayer(index);
se vuelve:
UnityEditor.Animations.AnimatorControllerLayer layer =
animatorController.layers[index];
Un ejemplo bsico del uso del API es dado al final de este post de
blog: http://blogs.unity3d.com/2014/06/26/shiny-new-animation-features-in-unity5
0/

Para ms detalles referirse a la documentacin del API de scripting.

- 522 -
Audio en Unity 5.0
Estas son notas para tener en cuenta cuando actualice proyectos de Unity 4 a Unity 5,
si su proyecto utiliza caractersticas de audio.

AudioClips (Clips de Audio)


Un nmero de cosas ha cambiado en el AudioClip. Primero, hay una flag 3D ms larga
en el asset. Esta flag ha sido movida al AudioSource en forma de un deslizador Spatial
Blend permitindole a usted, en tiempo de ejecucin, el morphing de sonidos 2D a
3D. Los viejos proyectos sern importados de tal manera que los AudioSources en los
GameObjects en la escena que tienen un clip asignado van a tener su parmetro
Spatial Blend configurado de acuerdo a la vieja flag 3D del AudioClip. Por razones
obvias, esto no es posible para scripts que dinmicamente asigna clips a las fuentes,
por lo que esto requiere un arreglo manual.

Mientras los ajustes por defecto para la propiedad vieja 3D fuera verdad, por defecto
en el nuevo sistema, el predeterminado para el parmetro para Spatial Blend es
configurado a 2D.

Finalmente, los AudioClips pueden ser multi-editados.

Formato
El nombramiento de la propiedad Format ha cambiado para que refleje el mtodo por
el cual los datos son almacenados en vez de un formato de un archivo particular que
se desva de plataforma a plataforma. Por lo que de ahora en adelante lo
Uncompressed (Descomprimido) se refiere a datos de muestra crudos, Compressed
(Comprimido) se refiere a un mtodo de compresin con prdidas que encaja mejor a
la plataforma y ADCPM se refiere a un ligero (en trminos de CPU) mtodo de
compresin que mejor encaja a la seales naturales de audio que contienen una
cantidad moderada de ruido (pasos, impactos, armas, etc.) y estn para reproducir en
grandes cantidades.

Precargando y cargando datos de audio en el fondo


Una nueva caracterstica de AudioClips es que estos proporcionan soporte para una
opcin para determinar si precargar los datos de audio o no. Cualquier propiedad del
AudioClip es separada del estado de carga de datos de audio actual, y puede ser
consultado en cualquier momento, por lo que tener la posibilidad de cargar en

- 523 -
demanda ahora ayuda mantener el uso de memoria de AudioClips bajo.
Adicionalmente a esto, los AudioClips pueden cargar sus datos de audio en el fondo
sin bloquear el thread del juego principal y causar cadas de frames. El proceso de
carga puede obviamente ser controlado va el API de scripting.

Multi-edicin
Todos los AudiClips ahora soporta multi-edicin.

Force to Mono (Pasar a Mono)


La opcin Force To Mono ahora realizar un pico-de normalizacin en el down mix
resultante.

GetData/SetData (ObtenerDatos/ConfigurarDatos)
Estos llamados de API solo estn soportados por clips que estn almacenando los
datos de audio descomprimidos como PCM o realizar la descompresin cuando
cargue. En el pasado, ms clips soportaban esto, pero el patrn no era muy limpio ya
que ambos dependa en la plataforma destino y tenia diferente comportamiento en el
editor y reproductores standalone. Como una nueva cosa, los archivos trackers
pueden ser descomprimidos como data PCM a memoria tambin, por lo que
GetData/SetData tambin puede ser utilizado en estos.

Comportamiento de pausa del AudioSource


Pausar en Unity 5 ahora es ms consistente entre llamadas Play y PlayOneShots.
Pausar un AudioSource pausa las voces reproducidas en ambos lados, y llamando
Play o PlayOneShot renauda el AudioSource para las voces reproducidas de ambas
maneras.

Para asistir con des-pausar un AudioSource sin reproducir el clip asignados, (til para
cuando haya voces oneshot reproduciendo), nosotros hemos agregado una nueva
funcin AudioSource.Unpause ().

Audio Mixer (Mezclador de Audio)


El AudioMixer es una nueva caracterstica de Unity 5 permitiendo un routing complejo
de datos de audio desde los AudioSources para mezclar grupos dnde los efectos
pueden ser aplicados. Una diferencia clave del componente Audio Filter es que los
filtros de audio son instanciados por AudioSource y por lo tanto son ms costoso en
trminos de CPU si el juego tiene una gran cantidad de AudioSources con filtros o si

- 524 -
un script simplemente crea muchas instancia de un GameObject conteniendo. Con el
mezclador ahora es posible configurar un grupo con los mismos efectos y
simplemente enrutar el audio del AudioSource a travs de los efectos compartidos
resultando en un uso bajo de CPU.

El mezclador actualmente no soporta efectos basados en script, pero si tiene un API


de plugin de audio nativo permitindole a los desarrolladores escribir efectos de alto
rendimiento que integran sin problemas con los otros efectos incorporados.

AudioSettings (Configuraciones de Audio)


La manera en que el sistema de audio es configurado ha cambiado. Los ajustes
generales para configurar el modo de speaker y tamao DSP buffer (i.e. estado
latente) todava debe ser configurado en la configuracin del proyecto de audio, y
adicionalmente a estos tambin ahora es posible configurar las cuentas de voces
reales y virtuales. La cuenta de las voces reales especifica qu tantas voces pueden
ser odas concurrentemente y por lo tanto tienen un fuerte impacto en el consumo
general del CPU del juego. Anteriormente a esto, sta fue codificada a 32 con algunas
excepciones especficas de la plataforma. Cuando el nmero de voces
reproducindose exceda este nmero, aquellas que sean menos audible sern
puestas en espera hasta que estas voces se vuelvan dominantes o algunas voces
dominantes paren de reproducirse. Estas voces son simplemente excluidas de
reproducirse. Estas no son paradas, simplemente se vuelven inactivas hasta que haya
banca ancha nuevamente. La cuenta de voces virtuales definen qu tantas voces
pueden ser manejadas en total, por lo que si el nmero de voces reproducindose
excede esto, las voces menos audibles pararn.

AudioSettings.outputSampleRate y AudioSettings.speakerMode puede todava se


puede leer, pero los setters ahora son obsoletos, al igual que la funcin
SetDSPBufferSize. Como remplazo para estos cambios de configuracin en el audio
que necesitan suceder en el tiempo de ejecucin, ahora hay una estructura llamada
AudioConfiguration. Esta puede ser obtenida va AudioSettings.GetConfiguration() que
va a devolver los ajustes activos en el dispositivo de output del audio. Los cambios a
esta estructura pueden ser hechos y aplicados va AudioSettings.Reset() que va a
devolver un resultado boolean dependiendo en el intento con exitoso o fallido de
aplicar los cambios.

Cuando haya cambios a la configuracin de audio, ya sea causados por script va

- 525 -
AudioSettings.Reset() o por eventos externos como un plugging en monitores HDMI
con soporte de audio, tarjetas de sonido externas o auriculares USB, un callback
definido por el usuario AudioSettings.OnAudioConfigurationChanged(bool
deviceChanged) sera invocado. Su argumento deviceChanged ser falso si el cambio
fue causado por un llamado AudioSettings.Reset(), y verdad si fue causado por un
cambio de dispositivo externo (este tambin puede cambiar la velocidad de muestras
del dispositivo de audio en uso). Si el callback le permite a usted recrear cualquier
sonido voltil como lo son clips PCM generados, restaurar cualquier estado de audio,
o adaptar los ajustes de audio a travs de AudioSettings.Reset().

- 526 -
Datos Baked en Unity 5.0
Cuando actualice un proyecto de Unity 4 a Unity 5, usted puede necesitar re-bake los
datos almacenados ya que algunos de los formatos de datos pre-baked han
cambiado.

El formato Baked Occlusion Culling de datos fue cambiado. Rebaking es requerido


para la informacin de occlusion culling.

El formato de Baked Lighting de datos fue cambiado. Rebaking es requerido para los
datos lighting.

- 527 -
Plugins en Unity 5.0
Estas son notas para tener en cuenta cuando actualice proyecto de Unity 4 a Unity 5,
si su proyecto utiliza plugins, incluyendo plugins nativos de audio.

Ya no se requiere que los Plugins sean colocados en las carpetas


Assets\Plugins<Platform>, ahora tienen ajustes para revisar qu plataformas son
compatibles y ajustes especficos de plataforma (como lo son los ajustes de
compatibilidad CPU, SDKs) etc. Por defecto los nuevos plugins son marcados como
compatibles con Any Platform. Para hacer una transicin ms fcil de una vieja
versin de Unity, Unity va a revisar en qu carpeta el plugin est ubicado, y va a iniciar
los ajustes iniciales de acuerdo a esto, por ejemplo, si el plugin est ubicado en
Assets\Plugins\Editor, ste ser marcado como compatible con el Editor solamente, si
el plugin est ubicado en Assets\Plugins\iOS, ste ser compatible con iOS solamente,
etc. Tambin, por favor ir a PluginInspector documentation para ms informacin.

Plugins Nativos en el Editor


Los plugins nativos de 32-bits no van a funcionar en el editor de 64-bit. Intentar
cargarse va a resultar en un registro de errores en la consola y excepciones siendo
lanzadas cuando intente llamar una funcin desde el plugin nativo.

Para continuar de utilizar plugins nativos de 32-bit, utilice la versin del editor 32-bit
(proporcionado en un instalador separado).

Para tener ambas versiones 32-bit y 64-bit del mismo plugin en su proyecto,
simplemente colocarlos en dos diferentes carpetas y configure las plataformas
superadas apropiadamente en los ajustes de importer.

Restricciones:

Nosotros actualmente no proporcionamos un editor 32-bit para OSX.

Plugins de Audio Nativos


Plugins con los prefijos audioplugin (sensible de maysculas) sern
automticamente cargados sobre el escaneo para que sean utilizables en el audio
mixer. Lo mismo aplica a construcciones standalone dnde estos plugins son
cargados en el tiempo de inicio antes de que cualquier asset haya sido cargado, ya
que ciertos assets como audio mixer requiere que estos sean cargados con el fin de

- 528 -
instancia efectos.

- 529 -
Fsica en Unity 5.0
Unity 5.0 tiene una actualizacin a Physx3.3 SDK. Por favor darle un vistazo rpido a
este blogpost antes de realizar cualquier accin en sus proyectos 4.x. Esto le podra
dar una idea de qu esperar del nuevo cdigo base: High Performance Physics in
Unity 5. Por favor tenga cuidado que PhysX3 no es 100% compatible con PhysX2 y
requiere algunas acciones del usuario cuando actualice.

Panorama general las actualizaciones


La fsica de Unity 5.0 puede esperarse que funcione hasta 2 veces ms rpido que en
versiones previas. La mayora de los componentes los cuales usted estaba
familiarizado todava estn ah, y usted los encontrar funcionando como antes. Claro
est, algunos comportamientos han sido imposible de que sigan iguales y algunos
simplemente eran comportamientos raros causados por limitaciones del cdigo-base
preexistente, por lo que tenemos que realizar cambios. Las dos reas que obtuvieron
el cambio ms significante son los componentes Cloth y WheelCollider. Nosotros
estamos incluyendo una seccin de cada uno de ellos a continuacin. Luego, hay unos
cambios pequeos sobre todo el cdigo de fsica que causan incompatibilidad.

Cambios que probablemente afectan los proyectos:


La fuerza Adaptive ahora es apagada por defecto
La fuerza Adaptive fue introducida para ayudar con la simulacin de stacks (pilas) ms
grandes, pero resulto ser excelente solamente para demos. En los juegos reales
sucedi para causar el comportamiento equivocado. Usted puede cambiarlo en las
propiedades del editor de fsica: Edit -> Project settings -> Physics -> Enable adaptive
force.

Las Colisiones Suaves de Esferas son quitadas de ambos los terrenos y meshes.
PhysX3 tiene una caracterstica que aborda el mismo tema y ya no es conmutable, ya
que est considerado como una solucin sin mayores inconvenientes.

Los Springs exponen mayores amplitudes con PhysX3.


usted querr ajustar los parmetros de spring despus de actualizarse.

La configuracin del Material de Terreno de Fsica ha cambiado


Utilice TerrainCollider.sharedMaterial y TerrainCollider.material para especificar el
material de fsica para el terreno. La anterior manera de configurar el material de

- 530 -
fsica a trves de TerrainData ya no va a funcionar. Como un bonus, usted puede
ahora especificar el material de fsica para el terreno en una base por colisionador.

El Shape Casting y sweeping ha cambiado:


Shape sweeps reporta todas las figuras que choque (i.e CapsuleCast y SphereCast va a
devolver todas las figuras que choquen, incluso las que contentan completamente la
primitiva)

Raycasts filtra las figuras que contienen el origen del raycast

Eventos del Compound Collider:


Cuando utilice CollidersC Compound, OnCollisionEnter ahora es llamado una vez por
cada par en contacto

Los Triggers deben ser convexos:


De ahora en adelante, usted solamente puede tener triare en figuras convexas (una
restriccin de PhysX):

TerrainCollider no soporta ms la flag IsTrigger

MeshCollider puede tener IsTrigger solamente si es convexo

Los cuerpos dinmicos deben ser convexos:


Los cuerpos dinmicos (i.e. aquellos que tienen un Rigidbody adjuntado con
Kinematic = false) ya no pueden tener mes colliders cncavos (una limitacin de
PhysX).

Si usted quiere tener colisiones con mesh cncavos, usted puede solamente tenerlos
en colliders estticos y cuerpos kinematic.

Ragdoll joints (Articulaciones Ragdoll):


Las configuraciones de Joint (articulaciones) para ragdolls tendrn que necesitar un
ajuste.

Estas sugerencias aplican a articulaciones en general tambin.

Ver la pgina de Joint And Ragdoll Stability para la versin ms reciente de esta gua.

Evite ngulos pequeos de Angular Y Limit y Angular Z Limit. Dependiendo en sus


ajustes el mnimo de ngulos debera ser alrededor de 5 a 15 grados con el fin de ser
estable. En vez de utilizar un ngulo pequeo, intente ajustar el ngulo a cero. Esto va
a bloquear el eje proporcionar una simulacin estable.

- 531 -
Configure Enable Preprocessing a falso (sin marcar). Desactivando el pre-
procesamiento puede ayudar contra articulaciones explotando. Las articulaciones
pueden explotarse si son puestas en situaciones dnde no hay una manera de
satisfacer las restricciones de las articulaciones. Esto puede ocurrir si los rigi bodies
que estn juntos son separados por geometra esttica de colisin, como generar un
ragdoll parcialmente dentro de una pared.

Estabilidad del Ragdoll o estiramiento: Si los ragdolls son dados circunstancias


extremas, como generarse parcialmente dentro de una pared o ser empujados con
una fuerza grande, el joint solver (solucionador de articulaciones) no podr mantener
la proyeccin de las articulaciones, utilizando ya sea
ConfigurableJoint.projectionMode o CharacterJoint.enableProjection.

Si los cuerpos conectados con articulaciones tienen titileo, intente aumentar Edit-
>Project Settings->Physics->Solver Iteration Count. Intente entre 10 o 20.

Nunca utilice el acceso directo al transform con cuerpos kinematic unidos a otros
cuerpos. Haciendo esto salta el paso dnde PhysX computa las velocidades internas
de los cuerpos correspondientes y por lo tanto hace que el solver (solucionador)
proporcione resultados no esperados. Nosotros hemos visto algunos proyectos 2D
utilizando el acceso directo al transform para voltear los personajes va alterando
transform.direction en la raz boon del rig. Esto se comporta mucho mejor si usted
utiliza MovePosition / MoveRotation / Move ms bien.

Las restricciones del Rigidbodys son aplicados en espacio local.


El mecanismo de bloqueo que nosotros utilizamos en Unity 4 estaba bsicamente
descartando los cambios en las rotaciones bloqueadas y fue restableciendo las
velocidades angulares como un paso posterior al solver. Esto estaba funcionando en
su mayora excepto que hubo algunos problemas con cuerpos cayendo en un estado
de adormecimiento a medida que el solver quera ajustar las rotaciones cada frame; y
un pocos casos relacionados fueron notados a travs de los aos. Cuando se trabaje
con la integracin en PhysX3, nosotros utilizamos esta nueva y bonita caracterstica de
PhysX 3.3 dnde nosotros podemos configurar los componentes infinite inertia tensor
para grados de rotacin bloqueados a su libertad. Esto ahora es soportado en el
solver para que el cuerpo pueda ahora irse a dormir apropiadamente, pero debido a
que esto es inercia, tambin es aplicado a coordenadas locales.

- 532 -
WheelCollider
El nuevo WheelCollider est funcionando gracias al PhysX3 Vehicles SDK que es
bsicamente una nueva librera de simulacin vehicular cuando es comparada al
cdigo que tenamos en PhysX2.

Lea ms acerca del nuevo WheelCollider aqu.

Cloth
Unity 5 utiliza el solver de Cloth completamente re-escrito proporcionado por el nuevo
PhysX SDK. Este cloth solver ha sido diseado con el clothing de personajes en mente,
y es un gran avance comparado a las versiones anteriores en trminos de
rendimiento y estabilidad. Unity 5 remplaza los componentes SkinnedCloth y
InteractiveCloth en Unity 4 con un solo componente Cloth, que funciona en conjunto
con un SkinnedMeshRenderer. La funcionalidad es similar al previo componente
SkinnedCloth, pero ahora es posible asignar arbitrariamente, meshes non-skinned al
SkinnedMeshRenderer, por lo que usted puede todava manejar la simulacin de
cloth en un mesh aleatorio.

Sin embargo, alguna funcionalidad que fue disponible en el viejo InteractiveCloth


ahora no est ms soportado por la nueva versin de PhysX ya que es difcil
implementar estos con un buen rendimiento. Especficamente:

usted ya no puede utilizar cloth para colisionar con geometra del mundo arbitraria.

tearing no est ya soportado.

usted ya no puede aplicar pressure (presin) en Cloth.

usted ya no puede adjuntar cloth a colliders o tener cloth aplicar fuerzas a rigidbodies
en la escena.

- 533 -
Shaders en Unity 5.0
Estas son recomendaciones para tener en cuenta cuando actualice proyectos de Unity
5 a Unity 5, si su proyecto utiliza cdigo personalizado de shader.

Los Shaders ya no aplican un multiplicador de 2x de intensidad de luz


Los Shaders ya no aplicar un multiplicador 2x de la intensidad de luz. En vez, las luces
son automticamente actualizadas a ser el doble de brillantes. Esto crea ms
consistencia y simplicidad en los rigs de lights (luces). Por ejemplo, una directional
light (luz direccional) alumbrando en una superficie blanca diffuse (difusa) tendr el
color exacto de la luz. La actualizacin no afecta la animacin, por lo tanto, si usted
tiene un valor de intensidad de animacin usted tendr que cambiar sus curvas de
animacin o cdigo script y hacerlas el doble de grandes para obtener la misma
apariencia.

En el caso de que haya shaders personalizados, dnde usted define sus propias
funciones de iluminacin , usted tendr que quitar el *2 usted mismo.
// A common pattern in shader code that has this problem will look like this
c.rgb = s.Albedo * _LightColor0.rgb * (diff * atten * 2);
// You need to fix the code so it looks more like this
c.rgb = s.Albedo * _LightColor0.rgb * (diff * atten);

El aumento de counts (cuentas) del interpolator y de instruccin para algunos


surface shaders
El pipeline de iluminacin integrado en Unity 5 puede en algunos casos utilizar ms
interpolators (interpoladores) de coordenadas de texturas o counts de instrucciones
de matemticas (para obtener cosas como una escala no-uniforme mesh, un GI
dinmico etc. funcionando). Algunos de sus surface shaders existentes podr correr a
texture coordinate (coordenadas de textura) o ALU instruction limits (limites de
instruccin ALU), especialmente si estas tenan como objetivo el shader model 2.0
(Predeterminado). Agregando #pragma target 3.0 puede funcionar alrededor de este
problema. Ver http://docs.unity3d.com/Manual/SL-ShaderPrograms.html para
referencia.

La Non-uniform mesh scale (escala no-uniforme mesh) debe ser tenida en cuenta
en los shaders
En Unity 5.0, los meshes no-uniformes no son pre-escalados en el CPU ya. Esto
significa que los vectores de normales y tangentes pueden ser no-normalizados en el

- 534 -
vertex shader. Si usted est haciendo clculos manuales de iluminacin ah, usted
tendr que normalizarlos. Si usted est utilizando los Surface Shaders de Unity,
entonces todo el cdigo necesario ser generado para usted.

El manejo de Fog (niebla) fue cambiado


Unity 5.0 hace que el Fog (niebla) integrado funcione en WP8 y consolas, pero con el
fin de lograr esto, nosotros hemos cambiado como el Fog es hecho. Para los surface
shaders y fix function shaders, nada extra debe ser hecho - el fog va a ser
automticamente agregado (usted puede agregar nofog a la linea #pragma del
surface shader para explcitamente hacer que no soporte fog).

Para vertex/fragment shaders escritos de manera manual, fog no sucede ya de


manera automtica. Usted necesita agregar #pragma multi_compile_fog y macros que
manejen el fog para su cdigo del shader. Revise el shader source integrado, por
ejemplo Unlit-Normal para cmo hacerlo.

El canal Alpha de los Surface Shaders ha cambiado


Por defecto todos los surface shaders opaque (opacos) output 1.0 (blanco) al canal
alpha ahora. Si usted quiere parar esto, utilice la opcin keepalpha en la linea
#pragma del surface.

Todos los alpha blended surface shaders (surface shaders mezclados con alpha)
utiliza un componente alpha computado por la funcin de iluminacin como factor de
mezcla ahora (en vez de s.Alpha). Si usted est utilizando funciones de iluminacin
personalizadas, usted probablemente querr agregar algo como c.a = s.Alpha hacia
el final.

El Sorting ( clasificacin) por indice de material ha sido quitado


Unity ya no clasifica por indice de material en el forward renderloop. Esto mejora el
rendimiento ya que ms objetos pueden ser renderizados sin cambios de estados
entre ellos. Esto rompe la compatibilidad para contenido que se apoya en el indice de
material como una manera de clasificacin. En 4.x un mesh con dos materiales
siempre iba a renderizar el primer material primero, y el segundo material de
segundo. En Unity 5 esto no es el caso, el orden depende en qu reduce la mayora de
cambios de estado para renderizar la escena.

- 535 -
Fixed function TexGen (la funcin fija TexGen), texture matrices (matrices de
textura) y algunos SetTexture combiner modes (modos del combinador
SetTexture) fueron quitados
Unity 5.0 quito soporte para la funcionalidad de este fixed function shader :

Generacin de coordenadas UV (comando TexGen).

Transformacin de matrices UV (Un comando Matrix en una propiedad de textura o


dentro de un SetTexture).

Modos del cominador SetTexture rara vez utilizados: signed add (a+-b), multiply
signed add (ab+-c), multiply subtract (ab-c), producto punto (dot3, dot3rgba).

Cualquiera de los de arriba ahora har nada, y el inspector del shader mostrar
advertencias acerca de sus usos. Usted debera re-escribir los shaders afectados
utilizando shaders vertex+fragment programables ms bien. Todas las plataformas los
soporta hoy en da, y no hay ventajas en absoluto para utilizar fixed function shaders.

Si usted tiene versiones viejas de paquetes Projector o Water shader en su proyecto,


los shaders ah podran estar utilizando esta funcionalidad. Actualice los paquetes a la
versin 5.0.

Mezclar partes del fixed function shader y shaders progamables ya no es


permitido
La mezcla de shaders progamables y fixed function (e.g. la fixed function vertex
lighting & pixel shader, o un vertex shader y texture combiners (combinadores de
textura) ) ya no es soportado. No estaba funcionando en mviles, consolas o DirectX
11 igual. Este cambio de comportamiento requerido de que el
Legacy/Reflective/VertexLit shader no haga esto - perdio soporte per-vertex specular;
en el lado positivo se comporta ahora consistentemente entre plataformas.

El compilador D3D9 shade fue cambiado de Cg 2.2 a HLSL


En la mayora esto debera ser transparente (simplemente resulta en menos bugs de
codegen y un poco ms rpido los shaders). Sin embargo, el compilador HLSL puede
ser un poco ms problemtico acerca de sintaxis. Algunos ejemplos:

Usted debera inicializar completamente las variables output. Utilice la macro de


ayuda UNITY_INITIALIZE_OUTPUT, tal como lo hara en D3D11.

los constructores float3(a_4_component_value) no funcionan. Utilice


a_4_component_value.xyz ms bien.

- 536 -
Las variables del shader unity_Scale han sido quitadas
La propiedad del shader unity_Scale ha sido quitada. En 4.x unity_Scale.w fue 1 /
uniform Scale del transform, Unity 4.x solamente renderizaba modelos no-escalados
o uniformemente escalados. Otras escalas fueron realizadas en CPU, lo cual fue muy
costoso & tuvo una sobrecarga inesperada de memoria.

En Unity 5.0 todo esto es hecho en el GPU al simplemente pasar matrices con escalas
no-uniformes a los shaders. Por lo tanto, unity_Scale ha sido quitado porque ya no
representa la escala completa. En la mayora de casos dnde unity_Scale era
utilizado, nosotros recomendamos ms bien transformarlo primero al espacio del
mundo. En el caso de transformar normales, usted siempre tendr que utilizar
normalize en la normal transformada ahora. En algunos casos esto lleva a cdigo un
poco ms caro en el vertex shader.
// Unity 4.x
float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal * unity_Scale.w);
// Becomes this in Unity 5.0
float3 norm = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal));
// Unity 4.x
temp.xyzw = v.vertex.xzxz * unity_Scale.xzxz * _WaveScale4 + _WaveOffset;

// Becomes this in Unity 5.0


float4 wpos = mul (_Object2World, v.vertex);
temp.xyzw = wpos.xzxz * _WaveScale4 + _WaveOffset;

Passes de Shadows, Depth Textures y ShadowCollector


Las sombras de los Forward rendered directional light no separan ya los pass shadow
collector. Ahora estas calculan las sombras del screenspace de la depth texture
(textura profunda) de la cmara ( como en deferred lighting).

Esto significa que los passes LightMode=ShadowCollector en los shaders


(sombreadores) no so utilizados para nada; usted puede simplemente quitarlos de
sus shaders.

En s, la Depth texture no es generada utilizando el shader replacement (remplazo del


shader) ya; sta es renderizada con shader passes ShadowCaster. Esto significa que
siempre y cuando sus objetos pueden emitir una sombras propias, entonces estas
tambin van a aparecer en la depth texture de la cmara apropiadamente (antes era
muy difcil hacer esto, si usted quera una custom vertex animation o funky alpha
testing). Esto tambin significa que Camera-DepthTexture.shader ya no es utilizada
para algo. Y tambin, todos los shadow shaders integrados utilizaban backface culling;
esto fue cambiado para coincidir con el modo de culling de un renderizado regular.

- 537 -
- 538 -
Otras notas de actualizacin para Unity 5.0
Ms informacin acerca de caractersticas que han cambiado y pueden afectar su
proyecto cuando actualice de Unity 4 a Unity 5

Bloqueando / Ocultando el Cursor


La visibilidad y bloqueo del Cursor ahora son independiente entre s.
// Unity 4.x
Screen.lockCursor = true;
// Becomes this in Unity 5.0
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;

Linux
El manejo de Gamepad ha sido quitado en Unity 5.

Unity ahora es capaz de configurar gamepads - ya sea va una base de datos de


modelos conocidos, o utilizando la variable del ambiente
SDL_GAMECONTROLLERCONFIG, la cual es configurada por Steam Big Picture /
SteamOS para gamepads detectados o configurados con su interfaz.

Los gamepads configurados presentan un diseo constante: el stick izquierdo utiliza


ejes 0/1, el stick derecho utiliza ejes 3/4, los botones en la cara del gamepad son 03
etc. Para determinar si un gamepad ha sido configurado, llame
Input.IsJoystickPreconfigured().

Windows Phone 8
Cuando construya sobre un proyecto de Visual Studio existente usted podra obtener
errores diciendo que UnityPlayer.UnityApp no contiene definiciones para
IsLocationEnabled, EnableLocationService y SetupGeolocator. Los servicios de
ubicacin ahora son automticamente incivilizados por Unity para que usted puede
con seguridad quitar cdigo de ubicacin del mtodo OnNavigatedTo y el mtodo
entero SetupGeolocator en el archivo MainPage.xaml.cs.

- 539 -
Windows Store Apps
La palabra clave Metro fue remplazada a WSA en la mayora de los APIs, por
ejemplo : BuildTarget.MetroPlayer se volvi BuildTarget.WSAPlayer,
PlayerSettings.Metro se volvi PlayerSettings.WSA.

Las definiciones en scripts como UNITY_METRO, UNITY_METRO_8_0,


UNITY_METRO_8_1 todava estn ah, pero a lo largo con ellas, todava habr nuevas
definiciones UNITY_WSA, UNITY_WSA_8_0, UNITY_WSA_8_1.

Otros cambios del script API no pueden ser actualizados


automticamente
UnityEngine.AnimationEvent ahora es un struct. Comparando a null va a dar como
resultado errores de compilacin.

AddComponent(string), cuando es llamado con una variable no puede


automticamente ser actualizada a la versin genrica de AddComponent<T>(). En
tales casos, el API Updater va a remplazar el llamado con una llamada a
APIUpdaterRuntimeServices.AddComponent(). Este mtodo tiene el propsito de
permitirle a usted probar su juego en el modo de edicin (estos hacen el mayor
esfuerzo para intentar resolver el tipo en tiempo de ejecucin) pero no est destinado
a ser utilizado en la produccin, por lo que es un error construir un juego con
llamadas a tal mtodo). En plataformas que soportan Type.GetType(string) usted
puede intentar utilizar GetComponent(Type.GetType(typeName)) como una solucin.

AssetBundle.Load, AssetBundle.LoadAsync y AssetBundle.LoadAll todos han sido


vueltos obsoletos. Utilice AssetBundle.LoadAsset, AssetBundle.LoadAssetAsync y
AssetBundle.LoadAllAssets ms bien. El Script updater no puede actualizarlos ya que
el comportamiento de carga ha cambiado un poco. En 5.0 todas las APIs para cargar
no cargarn componentes ya, por favor utilice las nuevas APIs de carga para cargar el
game object primero, luego mire el componente en el objeto.

Cambios en el Unity Package (Paquete de Unity)


El formato de paquete interno de .unityPackages ha cambiado, a lo largo con algunos
comportamientos acerca de cmo los paquetes son importados en Unity y cmo los

- 540 -
conflictos son solucionados.

Los Packages (paquetes) ahora solamente estn construidos con el asset fuente y el
archivo texto .meta que contiene todos los ajustes del importer para el asset.

Los packages (paquetes) siempre van a requerir una importacin de asset ahora.

Los Packages (Paquetes) ahora sern reducidos en tamao significativamente, debido


a que los datos importados (por ejemplo de textura o datos de audio) no sern
doblados.

Los Paquetes con nombres de archivo que ya existe en el proyecto, pero con
diferentes GUIDs tendrn estos archivos importados con un nombre de archivo nico.
Esto es hecho para prevenir sobre-escribir archivos en el proyecto que no vienen de
diferentes paquetes o fueron creados por el usuario.

- 541 -
Gua de Actualizacin de Unity 3.5 a 4.0

Estado Activo del GameObject


Unity 4.0 cambia cmo el estado actual de los GameObjects se maneja. El estado
activo del GameObject ahora es heredado por GameObjects hijos, para que cualquier
GameObject que est inactivo tambin cause que sus hijos sean inactivos. Nosotros
creemos que el nuevo comportamiento tiene ms sentido que el viejo, y siempre
debi ser as. Tambin, el nuevo sistema GUI que se aproxima depende mucho en el
nuevo comportamiento 4.0, y no sera posible sin este. Des-afortunadamente, esto
podra requerir algo de trabajo para arreglar los proyectos existentes para que
funcionen con el nuevo comportamiento de Unity 4.0, y aqu est el cambio:

El comportamiento viejo:
Si un GameObject est activo o no fue definido por su propiedad .active

Esto puede ser consultado y configurado al marcar la propiedad .active

El estado activo de un GameObject tiene ningn impacto en el estado activo de los


GameObjects hijos. Si usted quiere activar o des-activar un GameObject y todos sus
hijos, usted necesita llamar GameObject.SetActiveRecursively.

Cuando utilice SetActiveRecursively en un GameObject, el estado activo previo de


cualquier GameObject se perdera. Cuando usted des-activa y luego activa un
GameObject y todos sus hijos utilizando SetActiveRecursively, cualquier hijo que
estaba inactivo antes de la llamada SetActiveRecursively, se volvera activo, y usted
tiene que manualmente mantener un seguimiento del estado activo de los hijos si
usted quiere restaurarlo a la manera en que estaba.

Los prefabs no podan contener cualquier estado, y siempre estaban activos despus
de la instanciacin de un prefab.

El nuevo comportamiento:
Si un GameObject est activo o no est definido por su propia propiedad .activeSelf, y
todo aquellos de sus padres. El GameObject est activo si su propia
propiedad .activeSelf y la de todos sus padre es true. Si cualquiera de ellos es false, el
GameObject est inactivo.

- 542 -
Esto se puede consultar utilizando la propiedad .activeInHierarchy.

El estado .activeSelf de un GameObject puede cambiar al


llamar GameObject.SetActive. Cuando se llame SetActive (false) en un GameObject
previamente activo, esto va a des-activar el GameObject y todos sus hijos. Cuando
llame SetActive (true) en un GameObject previamente inactivo, este va a activar el
GameObject, si todos su padres estn activos. Los hijos sern activados cuando todos
sus padres estn activos (i.e., cuando todos sus padres tienen .activeSelf configurado
a true).

Esto significa que SetActiveRecursively ya no se necesita ms, ya que el estado es


heredado de sus padres. Tambin significa que, cuando se desactive y se active un
parte de la jerarqua al llamar SetActive, el estado activo previo de cualquier
GameObject ser preservado.

Los Prefabs pueden contener un estado activo, el cual es preservado en una


instaciacin de prefab.

Ejemplo:
Usted tiene tres GameObjects, A, B y C, para que B y C son hijos de A.

Desactive C al llamar C.SetActive(false).

Ahora, A.activeInHierarchy == true, B.activeInHierarchy == true y C.activeInHierarchy


== false.

Del mismo modo, A.activeSelf == true, B.activeSelf == true y C.activeSelf == false.

Ahora nosotros des-activamos el padre A al llamar A.SetActive(false).

Ahora, A.activeInHierarchy == false, B.activeInHierarchy == false y C.activeInHierarchy


== false.

Del mismo modo, A.activeSelf == false, B.activeSelf == true y C.activeSelf == false.

Ahora nosotros activamos el padre A nuevamente al llamar A.SetActive(true).

Ahora, nosotros estamos de vuelta a A.activeInHierarchy == true, B.activeInHierarchy


== true y C.activeInHierarchy == false.

Del mismo modo, A.activeSelf == true, B.activeSelf == true y C.activeSelf == false.

- 543 -
El nuevo estado activo en el editor
Para visualizar estos cambios, en el editor de 4.0, cualquier GameObject que es
inactivo (ya sea porque su propia .activeSelf es configurada a false, o aquel d uno de
sus padres), se volver gris en la jerarqua, y va a tener un icono en gris en el
inspector. La propiedad .activeSelf del GameObject es reflejada por su casilla de
verificacin active, que puede ser activada/des-activada sin importar del estado del
padre (pero solamente va a activar el GameObject si todos los padres estn activos).

Cmo esto afecta a proyectos existentes:


Para que usted est atento a lugares en su cdigo dnde esto lo podra afectar a
usted, la propiedad GameObject.active y la
funcin GameObject.SetActiveRecursively() se han vuelto obsoletas.

Estas son, sin embargo funcionales. Leer el valor de GameObject.active es equivalente


a leer GameObject.activeInHierarchy,, y configurar GameObject.active es equivalente a
llamar GameObject.SetActive(). Llamar GameObject.SetActiveRecursively() es
equivalente a llamar GameObject.SetActive() en el GameObjects y todos sus hijos.

salirse de escenas de 3.5 son importadas al configurar la propiedad selfActive de


cualquier GameObject en la escena a su propiedad activeprevia.

Como resultado, cualquier proyecto importado de versiones previas de Unity debera


funcionar como se espera (con advertencias de compilacin, sin embargo), siempre y
cuando no se base en tener hijos activos de GameObjects inactivos (lo cual ya no es
posible en Unity 4.0).

Si su proyecto depende en tener hijos activos de GameObjects inactivos, usted


necesita cambiar su lgica a un modelo que funcione en Unity 4.0.

Cambios al pipeline de procesamiento de assets.


Durante el desarrollo de 4.0 nuestro pipeline de importacin de assets ha cambiado
en unas maneras significantes de manera interna con el fin de mejorar el
rendimiento, uso de memoria y determinacin. Para la mayora de veces, estos
cambios no tienen un impacto en el usuario con una excepcin: Los Ojbectos en
assets no estn hechos persistentes hasta el final del pipeline de importacin y
cualquier versin importada previamente de un asset ser remplazada
completamente.

- 544 -
La primera parte significa que durante el post-procesamiento usted no puede obtener
las referencias correctas a objetos en el asset y la segunda parte significa si usted
utiliza las referencias a una versin previamente importada del asset durante el post-
procesamiento, por favor almacene la modificaciones ya que estas modificaciones
sern perdidas.

Ejemplo de una referencia siendo perdida ya que no son persistentes todava


Considere este pequeo ejemplo:
public class ModelPostprocessor : AssetPostprocessor
{
public void OnPostprocessModel(GameObject go)
{
PrefabUtility.CreatePrefab("Prefabs/" + go.name, go);
}
}

En Unity 3.5 esto va a crear un prefab con todas las referencias correctas a los meshes
y as ya que todos los meshes ya estaran hechos persistentes, pero debido a que este
no es el caso en Unity 4.0 el mismo post procesador va a crear un prefab dnde todas
las referencias a los meshes desaparecen, simplemente porque Unity 4.0 no sabe
todava cmo resolver las referencias a los objetos en el prefab del modelo original.
Para copiar correctamente un modelprefab a un prefab usted debera
utilizar OnPostProcessAllAssets para ir a travs de todos los assets importados,
encuentre el modelprefab y cree el nuevo prefab como se hace arriba.

Ejemplo de una referencia a unos assets previamente importados siento


descartados
El segundo ejemplo es un poco ms complejo pero en verdad es un caso de uso que
nosotros hemos visto en 3.5 que se rompi en 4.0. Aqu hay un
simple ScriptableObject con una referencias al mesh.
public class Referencer : ScriptableObject
{
public Mesh myMesh;
}

Nosotros utilizamos este ScriptableObject para crear un asset con referencias a un


mesh dentro de un modelo, entonces en nuestro post procesador nosotros tomamos
esa referencia y le damos un nombre diferente, el resultado final siendo que cuando
nosotros hemos re-importado el modelo el nombre del mesh ser lo que el post
procesador determine.

- 545 -
public class Postprocess : AssetPostprocessor
{
public void OnPostprocessModel(GameObject go)
{
Referencer myRef =
(Referencer)AssetDatabase.LoadAssetAtPath("Assets/MyRef.asset",
typeof(Referencer));
myRef.myMesh.name = "AwesomeMesh";
}
}

Esto funciono bien en Unity 3.5 pero en Unity 4.0 el modelo que ya estuvo importado
ser completamente remplazado, por lo que cambiar el nombre de un mesh de una
importacin previa no tendr efecto. La solucin aqu es encontrar el mesh por otros
medios y cambiar su nombre. Lo que es ms importante para tener en cuenta es que
en Unity 4.0 usted debera SOLAMENTE modificar el input dado del post procesador y
no debe depende en la versin previamente importada del mismo asset.

Opcin de Lectura/Escritura del Mesh


Unity 4.0 agrega una opcin Read/Write Enabled en los ajustes de
importacin Mesh. cuando esta opcin se apaga, guarda memoria ya que Unity puede
descargar una copia de datos mesh en el juego.

Sin embargo, si usted est escalando o instanciando meshes en tiempo de ejecucin


con una escala no-uniforme, usted puede tener que activar Read/Write Enabled en
sus ajustes de importacin. La razn es que la escala no-uniforme requiere los datos
mesh en ser mantenidos en memoria. Normalmente nosotros detectamos esto en el
tiempo de construccin pero cuando los meshes son escalados o instanciados en
tiempo de ejecucin usted necesita configurar esto manualmente. De lo contrario no
podran ser renderizado en las construcciones del juego correctamente.

Optimizacin de Mesh
El Importador de Modelo en Unity 4.0 se ha vuelto mejor en las optimizaciones mesh.
La casilla de verificacin Mesh Optimization en el importador del modelo en Unity
4.0 est activado por defecto. Usted puede que tenga algo de cdigo de post-
procesamiento o effectos en su proyecto que dependen en el orden del vrtice de sus
meshes, y estos podran estar rotos por este cambio. En ese caso, apague Mesh
Optimization en el importador de Mesh. Especialmente, si usted est utilizando el
componente SkinnedCloth, la optimizacin mesh va a causar que el mappeo del peso
de vrtice cambie. Por lo que is usted est utilizando SkinnedCloth en un proyecto

- 546 -
importado de 3.5, usted necesita apagar Mesh Optimization para los meshes
afectados, o re-configurar sus pesos del vrtice para que coincidan el nuevo orden de
vrtices.

Input Mvil
Con Unity 4.0, el input del sensor mvil tiene un mejor alineamiento entre
plataformas, que significa que usted puede escribir menos cdigo cuando maneje un
input tpico en plataformas mviles. Ahora el input de aceleracin y de gyro va a
seguir la orientacin de la pantalla de la misma manera que en plataformas iOS y
Android. Para tomar ventaja de este cambio usted debera re-factorizar el cdigo de
input y quitar cdigo especifico de la plataforma y orientacin de pantalla cuando se
maneje el input de aceleracin y gyro. Usted todava puede obtener una vieja versin
en IOS al configurar Input.compensateSensors a falso.

- 547 -
Actualizando a Unity 3.5
Si usted tiene un archivo FBX con un nodo raz marcado como skeleton (esqueleto),
ste ser importado con un nodo raz adicional en 3.4, comparado a 3.4.

Unity 3.5 hace esto ya que cuando se importe los personajes animados, la
configuracin ms comn es tener un nodo raz con todos los huesos debajo y un
esqueleto alado de l en la jerarqua. Cuando se cree animaciones adicionales, es
comn quitar el mesh skinned del archivo fbx. En ese caso, el nuevo mtodo de
importacin asegura que el nodo raz adicional siempre existe y por lo tanto las
animaciones y el mesh skinned de verdad coincide.

Si la conexin entre la instancia y el prefab del archivo FBX ha sido rota en 3.4 la
animacin no coincidir en 3.5, y como resultado su animacin podra no
reproducirse.

En ese caso se recomienda que usted re-cree los prefabs o jerarquas de Game Object
al arrastrar su archivo FBX a su escena y recrendola.

- 548 -

You might also like