¿Qué novedades hay para Prefabs en 2022.2?

STEEN LUND / UNITY TECHNOLOGIESLead Developer
Nov 22, 2022|10 minutos
¿Qué novedades hay para Prefabs en 2022.2?
Para tu comodidad, tradujimos esta página mediante traducción automática. No podemos garantizar la precisión ni la confiabilidad del contenido traducido. Si tienes alguna duda sobre la precisión del contenido traducido, consulta la versión oficial en inglés de la página web.

Ha pasado un tiempo desde que el equipo de administración de escenas compartió una actualización sobre los prefabricados. Durante los últimos lanzamientos, y después de corregir una gran cantidad de errores que nos habéis informado (¡gracias!), hemos realizado varias mejoras en el sistema Prefab. Echemos un vistazo a cada mejora que llega en la versión 2022.2 (ahora disponible en versión beta) y cómo estas actualizaciones pueden beneficiarlo.

Reemplazar el activo prefabricado por la instancia prefabricada

Ahora puedes reemplazar el recurso Prefab por una instancia Prefab que exista en una escena o anidada dentro de otros Prefabs. Esta función mantendrá la posición, la rotación y la escala de la instancia Prefab en la escena, pero fusionará los contenidos del nuevo recurso Prefab, todo ello conservando tantas anulaciones y referencias como sea posible a través de la coincidencia basada en nombres (de manera predeterminada). Más específicamente:

  • El Inspector de una instancia Prefab tiene un nuevo Campo de Objeto que se puede usar para reemplazar el Activo Prefab.
  • La jerarquía tiene menús contextuales que de manera similar pueden reemplazar el activo prefabricado de la instancia.
  • Finalmente, un GameObject simple se puede convertir en una instancia Prefab a través del Menú contextual en la Jerarquía, o arrastrándolo y soltándolo con la tecla modificadora Ctrl/Cmd.
Campo de objeto de activo prefabricado
Reemplace un GameObject simple con una instancia Prefab.
Reemplace el activo prefabricado por una instancia prefabricada.

Esta funcionalidad no solo está disponible en la interfaz de usuario, sino que, como ocurre con la mayoría de las funciones que desarrollamos, tiene una API que le permite administrar cómo se combinan los objetos, así como también cómo se deben tratar las anulaciones. Consulte PrefabUtility.ReplacePrefabAssetOfPrefabInstancey PrefabUtility.ConvertToPrefabInstance.

Reordenar los GameObjects y componentes añadidos

Una de las mejoras más solicitadas ha sido la capacidad de reordenar los GameObjects y componentes añadidos. “GameObjects y componentes agregados” se refiere a los GameObjects y componentes que no son parte de una instancia Prefab, pero se agregan a la instancia Prefab en una escena o dentro de una Variante o Prefab Anidado. A partir de la versión 2022.1, es posible reordenar los GameObjects agregados mediante arrastrar y soltar, tanto entre ellos como entre GameObjects que pertenecen a la instancia Prefab. Para preparar esta función fue necesario realizar una importante refactorización del sistema Deshacer .

Si desea reordenar GameObjects agregados desde un script del Editor, simplemente es cuestión de configurar el índice hermano en la Transformación del GameObject agregado. La capacidad de reordenar componentes agregados en el Inspector está incluida en 2022.2. No existe una API pública para reordenar componentes.

Eliminar GameObjects de instancias Prefab

Lo último que necesitábamos para lograr la paridad de funciones completa entre GameObjects y componentes era la capacidad de eliminar GameObjects de las instancias Prefab como una anulación. Eliminar GameObjects como anulaciones, una opción disponible en 2022.2, garantiza que una vez que hayas eliminado un GameObject, los flujos de trabajo habituales para revertir desde/aplicar a un Prefab Asset funcionen como esperas.

Cuando se trata de un script del Editor, utilice Object.DestroyImmediate para destruir objetos de instancia Prefab y registrar la destrucción como una Anulación almacenada en el archivo de escena.

Inspeccionar las relaciones de variantes prefabricadas

Los usuarios a menudo preguntan cómo se ve el árbol de herencia de variantes para un activo prefabricado específico. En 2022.2, agregamos la ventana emergente Familia Prefab al Inspector. El contenido de la ventana emergente depende del activo prefabricado seleccionado en el Navegador de proyectos. Después de seleccionar un activo prefabricado y abrir la ventana emergente Familia prefabricada, el Editor enumera todos los ancestros del prefabricado actual, así como todos los hijos inmediatos.

Ventana emergente de familia prefabricada

Explorar herramientas de anulación mejoradas

Además de las consultas sobre el árbol de herencia, los usuarios a menudo preguntan cómo pueden deshacerse de los Overrides no utilizados almacenados en una escena pero a los que nunca se accede (porque la propiedad se ha eliminado de un script). En el peor de los casos, dichas propiedades podrían hacer referencia a activos que luego se incorporan a la compilación final y ocupan espacio en el dispositivo de almacenamiento y en la memoria, pero nunca se utilizan.

Las anulaciones ahora se marcan como no utilizadas para:

  • Objetos de destino nulos
  • Rutas de propiedades desconocidas (que no están sujetas al uso de FormerlySerializedAsAttribute en script)
  • Componentes eliminados
  • GameObjects eliminados
  • Se cambiaron las dimensiones de la matriz (por ejemplo, la matriz de materiales)

Al seleccionar una o más instancias de Prefab en la Jerarquía y abrir el menú desplegable Anulaciones , el Editor ahora muestra si hay Anulaciones sin usar. Luego puedes eliminarlos de la escena usando el nuevo menú desplegable Anulaciones no utilizadas .

Menú desplegable de anulaciones no utilizadas

Además, puedes eliminar todas las anulaciones no utilizadas en una escena a través del menú contextual de escena de la jerarquía o mediante el menú contextual de una selección arbitraria de instancias de prefabricados.

Eliminar anulaciones no utilizadas

No eliminamos automáticamente las anulaciones no utilizadas. Después de todo, no se puede inferir la razón de su existencia. Quitar una propiedad de un script o eliminar un activo no debería eliminar automáticamente las anulaciones no utilizadas, ya que es posible que posteriormente desees deshacer la eliminación y restaurar las anulaciones.

En caso de que te lo estés preguntando: "¿Por qué sigo teniendo anulaciones en mi instancia de Prefab después de presionar 'Aplicar todo'?" La respuesta es que esas anulaciones simplemente no se pueden aplicar al activo prefabricado. Lo más común es que dichas anulaciones sean referencias a otros objetos de la escena a los que no se puede hacer referencia desde el recurso prefabricado. Las anulaciones que normalmente no se aplican ahora aparecen resaltadas con una barra azul oscuro en el Inspector. Estos no se pueden aplicar, solo revertir.

Conozca estas otras mejoras

Ahora puedes cambiar el comportamiento predeterminado al abrir el modo Prefab a En aislamiento en lugar de En contexto. Vaya a Preferencias del editor > General > Modo prefabricado predeterminado para realizar este cambio.

Modo prefabricado predeterminado en las preferencias del editor

Ahora, con 2022.2, Deshacer se registra como una única operación de Deshacer al salir del modo Prefab. Esto da como resultado que todos los cambios realizados en el Prefab se reviertan si realiza una acción Deshacer después de salir del Modo Prefab.

A lo largo de varias versiones, el manejo y los informes de errores durante la carga de la escena (y la carga de Prefab en el modo Prefab) han mejorado sustancialmente y ahora indicarán con qué Prefabs están relacionados los errores y/o el GUID de los Prefabs faltantes. De hecho, la forma en que manejamos los activos de Prefabs faltantes durante la carga de la escena es más segura y estable que antes.

En un esfuerzo por mejorar aún más el manejo de errores y evitar la introducción de datos erróneos en su proyecto, hemos agregado un Tipo de activo de prefabricado roto, que será producido por el Importador de prefabricados cuando se encuentren errores que no se puedan rectificar.

El caso más común es cuando una variante de prefabricado ha perdido su prefabricado padre, quizás porque fue eliminado. En este caso, no podemos producir una variante de prefabricado significativa, por lo que se crea un activo de prefabricado roto en su lugar. Este nuevo activo mostrará información sobre lo que está mal en el Inspector cuando se selecciona en el Navegador de proyectos. Si se trata de un caso de un Prefab padre faltante, se muestra el GUID del Prefab faltante. De manera alternativa, si se trata de una cadena de variantes prefabricadas que está rota, puedes recorrer la cadena a través del Inspector hasta encontrar la variante con el padre faltante.

El activo de la variante prefabricada aparece como prefabricado roto debido a la pérdida del prefabricado principal

El concepto de instancias Prefab desconectadas ya no existe a partir de 2022.1. Aún admitimos la carga de instancias de Prefab desconectadas, pero cuando el Editor las encuentra durante la carga de la escena, las instancias de Prefab desconectadas se eliminan de toda su información de Prefab y se convierten en GameObjects normales.

Como se mencionó, nuestro equipo ha corregido una serie de errores que ustedes amablemente nos informaron a lo largo del tiempo. Algunos de ellos derivan del sistema Prefab original, pero muchos solo se hicieron evidentes tras la introducción de nuestros Prefabs mejorados.

Hoy, estamos seguros que usted disfrutará de la estabilidad del último sistema Prefab. Esperamos que trabajar con nosotros le resulte sencillo y eficiente.

¿Tiene más preguntas o comentarios relacionados con Prefab? Únase a nosotros en los foros para compartir sus comentarios.