When upgrading projects from Unity 5.3 to Unity 5.4, there are some changes you should be aware of which may affect your existing project.
Numerosos cambios a la Networking API.
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.
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.
Una cantidad de variables shader integradas fueron re-nombradas por consistencia:
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.
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).
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.
The internal shader used to compute screen-space directional light shadows has moved to the Graphics settings. If you were using a customized version of directional light shadows by having a copy of that shader in your project, it will no longer be used. Instead, select your custom shader under Edit > Project Settings, then select the Graphics category.
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
.
The data layout of ComputeBuffers in automatically-converted OpenGL shaders has changed to match the layout of DirectX ComputeBuffers. If you use ComputeBuffers in OpenGL, remove any code that tweaks the data to match the previous OpenGL-specific layout rules. Please see Compute Shaders for more information.
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, ScriptPlayable
s ha sido remplazada por CustomAnimationPlayables
.
Ya no es posible derivar de un Playables base. Simplemente agregue Playables en sus Playables personalizados.
Siga estas instrucciones para actualizar su proyecto de Oculus VR de Unity 5.3:
Re-habilite el soporte a realidad virtual.
Quite Oculus Spatializer.
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.
Due to optimisations in the Transform component, using Transform.SetParent
or Destroy
ing parts of hierarchies involving 1000+ GameObjects may now take a long time. Calling SetParent
on or otherwise rearranging such large hierarchies at runtime is not recommended.
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.
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.
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”.
Estos son:
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.
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.