Usando la Actualización Automática de API
5.4 Cambios a la Networking API

Actualizando a Unity 5.4

Cuando actualice proyectos de 5.3 a 5.4, hay varios cambios que debería tener en cuenta que pueden afectar su proyecto existente. Por favor también revise las Release Notes para todos los cambios y arreglos.

Networking: Cambios en la Multiplayer Service API

Numerosos cambios a la Networking API.

Networking: WebRequest ya no es experimental

La interfaz WebRequest ha sido promovida de UnityEngine.Experimental.Networking a UnityEngine.Networking. Los proyectos de Unity 5.2 y 5.3 que utilizan UnityWebRequest tendrán que ser actualizados.

Scene View: Tone mapping no se aplica automáticamente

Un efecto de imagen con el atributo ImageEffectTransformsToLDR ya no será aplicado directamente a la scene view si se encuentra. Un nuevo atributo existe para aplicar efectos a la Scene View: ImageEffectAllowedInSceneView. Los Standard Assets de 5.4 han sido actualizados para reflejar este cambio.

Shaders: Variables re-nombradas

Una cantidad de variables shader integradas fueron re-nombradas por consistencia:

  • _Object2World and _World2Object are now unity_ObjectToWorld and unity_WorldToObject
  • _World2Shadow is now unity_WorldToShadow[0], _World2Shadow1 is unity_WorldToShadow[1] etc.
  • _LightMatrix0 is now unity_WorldToLight
  • _WorldToCamera, _CameraToWorld, _Projector, _ProjectorDistance, _ProjectorClip and _GUIClipTextureMatrix are now all prefixed with unity

La referencias de variables serán re-nombradas automáticamente en los archivos .shader y .cginc cuando las importes. Sin embargo, después de la importación, los shaders no se utilizarán en Unity 5.3 o previo, sin re-nombrar manualmente las variables.

Shaders: Arreglos uniformes

En Unity 5.4, la manera en que los arreglos de las propiedades shader se manejan ha cambiado. Ahora hay un soporte “nativo” para arreglos float/vector/matrix en shaders (vía MaterialPropertyBlock.SetFloatArray, Shader.SetGlobalFloatArray etc.). Estas nuevas APIs permiten hasta 1,023 elementos.

La manera antigua de utilizar nombres numerados en el sufijo para referirse a elementos individuales de arreglos es obsoleto (e.g. _Colors0, _Colors1) en ambos Material y MaterialPropertyBlock. Las propiedades de este tipo, serializadas con Material ya no son capaces de configurar elementos del arreglo (pero si cualquier nombre del arreglo uniforme tiene como sufijo un número todavía funciona).

Shaders: Cambios diversos en 5.4

El objetivo de compilación shader predeterminado ha cambiado a “#pragma target 2.5” (SM3.0 en DX9, DX11 9.3 feature level en WinPhone). Usted todavía puede apuntar al nivel de características DX9 SM2.0 y DX11 9.1 con “#pragma target 2.0”.

La mayoría de los shaders integrados apuntan 2.5 ahora: Las excepciones notables son Unlit, VertexLit y shaders fixed function. En práctica, esto significa que la mayoría de shaders integrados y nuevos shaders creados, por defecto, no funcionarán en PC GPUs que estén hechas antes de 2004. Mirar este blog post por detalles.

El constructor de la clase Material Material(string) que ya era obsoleto, para de funcionar en 5.4. utilizarlo imprime un error y resulta en un error shader magenta.

El shader interno utilizado para calcular sombras de directional light en screen-space se ha movido a los Graphics Settings. Si usted estuviera usando versión personalizada de sombras directional shadow al tener una copia de ese shader en su proyecto, ya no será usado. En vez, seleccione su su shader personalizado debajo de Edit > Project Settings > Graphics.

Los reflection probes comparten un muestrador entre las dos texturas. Si usted estuviera muestrandolas manualmente en su shader, y obtiene un error “undeclared identifier samplerunity_SpecCube1”, necesitará cambiar el código de UNITY_PASS_TEXCUBE(unity_SpecCube1) a UNITY_PASS_TEXCUBE_SAMPLER(unity_SpecCube1,unity_SpecCube0).

UnityEditor.ShaderUtil.ShaderPropertyTexDim es obsoleto; utilice Texture.dimension.

Incluyendo el Standard Shader en los Always Included Shaders (Shaders Siempre Incluidos)

Incluir el Standard Shader en Always Included Shaders en la ventana de las Graphics Settings causa que todas las permutaciones del Standard Shader sean incluidas. Varias nuevas permutaciones del Standard Shader han sido agregadas en Unity 5.4, por lo que agregar el Standard Shader a Always Included Shaders aumenta sus tiempos de construcción y tamaños de construcción comparado a Unity 5.3. En vez de simplemente incluir el Standard Shader en esta lista, cree una Shader Variant Collection e incluya esto.

Iluminación

Light.actuallyLightmapped se ha vuelto obsoleto; se deberían utilizar más bien Light.isBaked y Light.bakedIndex. Baked Light ahora tiene un indice único, en vez de la flag actuallyLightmapped.

ComputeBuffers

El diseño de los datos de los ComputeBuffers en shaders OpenGL automáticamente convertidos han cambiado para que coincidan con el diseño de los ComputeBuffers de DirectX. Si usted utiliza ComputeBuffers en OpenGL, quite cualquier código que ajuste los datos para que coincidan con las reglas previas de diseño específicas a OpenGL. Por favor mirar Compute Shaders para más información.

DirectX 12

Nosotros introducimos una nueva interfaz nativa de plugin: IUnityGraphicsD3D12v2. La antigua interfaz no funcionará más debido a las diferentes en el envío del trabajo interno de los gráficos.

Playables: Migrando a 5.4

  • Playables ahora son structs en vez de clases.

  • Las structs Playable son manijas a clases Playable nativas, en vez de ser apuntadores a clases Playable nativas.

  • Una struct no-nula Playable no garantiza que el Playable sea utilizable. Utilice el método .IsValid para verificar que su Playable se puede utilizar.

  • Cualquier método que anteriormente devolvía null por inputs/outputs vacíos ahora devolverá Playable.Null.

  • Playable.Null es un Playable invalido.

  • Playable.Null se puede pasar a AddInput, SetInput y SetInputs para reservar cualquier input vacío, o para desconectar de manera implícita cualquier input conectado.

  • Utilizar Playable.Null o cualquier otro Playable invalido como input a cualquier método, o llamar un método en un Playable invalido lanzará las excepciones apropiadas para la operación.

  • Comparar Playables con null ahora no tiene sentido. Compare con Playable.Null.

  • Los Playables se deben asignar utilizando el método estático Create de la clase que desea utilizar.

  • Los Playables deben ser de-asignados utilizando el método .Destroy en el Playable handle.

  • Los Playables que no son de-asignados van a leak.

  • Playables fueron convertidos a structs para mejorar el rendimiento al evitar boxing/unboxing (más información acerca de boxing).

  • Emitir un Playable a un objeto, de manera implícita o explícita, causará boxing/unboxing, por lo tanto reducirá el rendimiento.

  • Heredar de una clase Playable causará el boxing/unboxing de instancias de la clase hijo.

  • Debido a que la animación solamente está disponible por ahora, ScriptPlayables ha sido remplazada por CustomAnimationPlayables.

  • Ya no es posible derivar de un Playables base. Simplemente agregue Playables en sus Playables personalizados.

Oculus Rift: Actualizando su proyecto de Unity 5.3

Siga estas instrucciones para actualizar su proyecto de Oculus VR de Unity 5.3:

Re-habilite el soporte a realidad virtual.

  • Abra los Player Settings. (Menú: Edit > Project Settings > Player)
  • Seleccione Other Settings y marque la casilla de verificación Virtual Reality Supported. Utilice la lista de Virtual Reality SDK mostrada abajo de la casilla de verificación para agregar y quitar Dispositivos de Realidad Virtual para cada objetivo de construcción.

Quite Oculus Spatializer.

  • Quite el plugin de Audio Oculus Spatializer de su proyecto a través de la ventana de las Audio Settings (Menú: Edit > Project Settings > Audio), utilizando el desplegable del Spatializer Plugin. Puede entrar en conflicto con el spatializer nativa y prevenir la construcción.

Re-ordenamiento de hermanos

Ha habido un cambio a los eventos que son activados cuando los GameObjects hermanos son re-organizados en Unity 5.4. Los GameObjects hermanos son GameObjects que comparten el mismo padre en la ventana de Jerarquía. En versiones previas, de Unity, cambiar el orden de los GameObjects hermanos causaría que cada hermano reciba un llamado a OnTransformParentChanged. En 5.4, los GameObjects hermanos ya no reciben esta llamada. Más bien, el GameObject padre recibe una sola llamada a OnTransformChildrenChanged.

Esto significa que si usted tiene código en su proyecto que depende de que OnTransformParentChanged sea llamado cuando los hermanos son re-organizados, estas llamadas ya no ocurrirán, y usted necesita actualizar su código para tomar acción cuando el objeto padre recibe la llamada OnTransformChildrenChanged más bien.

Esto cambio ya que el nuevo comportamiento da un rendimiento mejorado.

Windows Store

El formato del proyecto generado de Visual Studio fue actualizado para todos los .NET scripting backend SDKs. Esto arregla una re-construcción excesiva cuando nada ha cambiado en el proyecto generado. Usted tendría que borrar su *.csproj existente generado, especialmente si fue construido con la opción “Generate C# projects” marcada, para que Unity pueda re-generarla.

Errores de serialización Script

Hay dos nuevos errores de serialización script que atrapar cuando el Unity API es llamada de los inicializadores de campo y constructores durante la de-serialización (carga). La de-serialización puede ocurrir en un thread diferente al thread principal y por lo tanto no es seguro llamar la Unity API durante la de-serialización. Hay más detalles al final de la página de (Script Serialization)[script-Serialization] en el Manual de Unity.

Soportando pantallas de Retina

El Editor ahora soporta resoluciones de Retina en Mac OS X con texto de alta resolución, UI y vistas 3D.

El Editor GUI ahora se define en point space en vez de pixel space. En pantallas de resolución estándar, no hay cambio ya que cada punto es un pixel. En pantallas Retina, sin embargo, cada punto es dos pixeles. La pantalla actual a escala UI está disponible como EditorGUIUtility.pixelsPerPoint. Ya que Unity tiene varias ventanas, cada una en monitores de diferentes densidades de pixel, este valor podría cambiar entre las vistas.

Si su código de editor utiliza métodos Editor/GUI/Layout regulares, es bastante probable que no necesite cambiar algo.

Si usted está utilizando Screen.width/height, cambie a EditorWindow.position.width/height más bien. Esto se debe a que el tamaño de la pantalla se mide en pixeles, pero el UI está definido en puntos. Para editores personalizados que se muestran en el Inspector, utilice EditorGUIUtility.currentViewWidth, que representa correctamente la presencia de un scroll bar.

Si usted está mostrando otros contenidos en su UI, como lo es RenderTexture, probablemente está calculando su tamaño en puntos. Para soportar resoluciones retinas, necesita convertir sus tamaños punto a tamaños de pixel. Hay nuevos métodos en el EditorGUIUtility para esto.

Si usted está utilizando GUIStyles con fondos personalizados, puede agregar versiones Retina de texturas de fondo al colocar una textura con exactamente el doble de dimensiones a un arreglo ‘GUIStyleState.scaledBackgrounds’.

Macs con hardware de gráficos de poca potencia pueden experimentar frame rates del editor lentas no aceptables en vistas 3D debido al aumento de resolución. El soporte Retina se puede des-activar escogiendo “Get Info” en la Unity.app en el Finder, y marcar “Open in Low Resolution”.

Physics: Meshes y physics transform drift

Estos son:

  • Cambios para rechazar meshes físicos si contienen vértices no válidos (no-finitos).
  • Cambios para evitar physics transform drift al no enviar actualizaciones de transform redundantes.

El comportamiento de 5.3 es que si el sistema de animación siempre envía mensajes de actualización del Transform para curvas de animación que son constantes. Estos mensajes despiertan Rigidbodies y arreglar esto resulta muy riesgoso en 5.3

El comportamiento de 5.4 es que si no hay cambios en la posición, el Rigidbody no se despierta (como la mayoría de gente esperaría).

Si su proyecto depende en el comportamiento de 5.3 de despertar el Rigidbody todo el tiempo, puede que no funcione como se espera en 5.4.

Web Player

El objetivo Unity Web Player ha sido quitado de Unity 5.4. Si usted actualiza su proyecto a 5.4, no podrá desplegar a la plataforma Web Player.

Si usted tiene proyectos legacy de Web Player que necesita mantener, no los actualice a 5.4 o posterior.

Android

WebCam ya no funciona en dispositivos Gingerbread.

VR - Oculus

Upgrading your VR project from Unity 5.3

  • Re-habilite el soporte a realidad virtual. Abra los Player Settings. (menú: Edit > Project Settings > Player), seleccione Other Settings y marque la casilla de verificación Virtual Reality Supported. Utilice la lista de SDK de Realidad Virtual mostrada debajo de la casilla de verificación para agregar y quitar dispositivos de Realidad Virtual para cada objetivo de construcción.

  • Quite el Plugin de Audio Oculus Spatializer de su proyecto a través de la ventana de Audio Settings (menú: Edit > Project Settings > Audio), utilizando el desplegable Spatializer Plugin . Este puede tener conflicto con el spatializer nativo y prevenir la construcción.

Upgrading your VR project from Oculus Unity Integration Plugin

  • Quite la carpeta OVR y cualquier plugin de Oculus de su proyecto.
  • Quite o desactive el Camera Rig. Remplace con la cámara estándar de Unity.
  • Habilite el soporte a realidad virtual. Abra los Player Settings. (menú: Edit > Project Settings > Player), seleccione Other Settings y marque la casilla de verificación Virtual Reality Supported. Utilice la lista de SDK de Realidad Virtual mostrada debajo de la casilla de verificación para agregar y quitar dispositivos de Realidad Virtual para cada objetivo de construcción.
  • Ingrese al modo de reproducción en el editor para probar la construcción.
Usando la Actualización Automática de API
5.4 Cambios a la Networking API