O que há de novo para Prefabs em 2022.2?

STEEN LUND / UNITY TECHNOLOGIESLead Developer
Nov 22, 2022|10 Min
O que há de novo para Prefabs em 2022.2?
Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

Já faz um tempo que a equipe de gerenciamento de cena não compartilha uma atualização sobre Prefabs. Durante os últimos lançamentos, e depois de corrigir um grande número de bugs que vocês relataram (obrigado!), fizemos várias melhorias no sistema Prefab. Vamos dar uma olhada em cada melhoria que será lançada na versão 2022.2 – agora disponível em beta – e como essas atualizações podem beneficiar você.

Substituir ativo pré-fabricado por instância pré-fabricada

Agora você pode substituir o Prefab Asset por uma instância do Prefab que existe em uma cena ou aninhada dentro de outros Prefabs. Esse recurso manterá a posição, a rotação e a escala da instância do Prefab na cena, mas mesclará o conteúdo do novo Prefab Asset, mantendo o máximo de substituições e referências possível por meio de correspondência baseada em nome (por padrão). Mais especificamente:

  • O Inspetor para uma instância do Prefab tem um novo Campo de Objeto que pode ser usado para substituir o Ativo do Prefab.
  • A Hierarquia tem Menus de Contexto que podem substituir o Ativo Prefab da instância.
  • Por fim, um GameObject simples pode ser convertido em uma instância Prefab por meio do Menu de Contexto na Hierarquia ou arrastando e soltando com a tecla modificadora Ctrl/Cmd.
Campo de objeto de ativo pré-fabricado
Substitua um GameObject simples por uma instância Prefab.
Substitua o Prefab Asset por uma instância do Prefab.

Essa funcionalidade não está disponível apenas na interface do usuário, mas, como acontece com a maioria dos recursos que criamos, ela tem uma API que permite gerenciar como os objetos são correspondidos, bem como como as substituições devem ser tratadas. Consulte PrefabUtility.ReplacePrefabAssetOfPrefabInstancee PrefabUtility.ConvertToPrefabInstance.

Reordenar GameObjects e componentes adicionados

Uma das melhorias mais solicitadas foi a capacidade de reordenar GameObjects e componentes adicionados. “GameObjects e componentes adicionados” refere-se aos GameObjects e componentes que não fazem parte de uma instância Prefab, mas são adicionados à instância Prefab em uma cena ou dentro de uma Variant ou Nested Prefab. Portanto, a partir de 2022.1, é possível reordenar os GameObjects adicionados por arrastar e soltar – tanto entre eles quanto entre os GameObjects pertencentes à instância do Prefab. Preparar esse recurso exigiu uma grande refatoração do sistema Desfazer .

Se você quiser reordenar GameObjects adicionados de um script do Editor, basta definir o índice irmão na Transformação do GameObject adicionado. A capacidade de reordenar componentes adicionados no Inspetor está incluída na versão 2022.2. Não há API pública para reordenar componentes.

Excluir GameObjects de instâncias Prefab

A última coisa que precisávamos para atingir a paridade total de recursos entre GameObjects e componentes era a capacidade de excluir GameObjects de instâncias do Prefab como uma substituição. Excluir GameObjects como substituições, uma opção disponível na versão 2022.2, garante que, depois de excluir um GameObject, os fluxos de trabalho usuais para reverter/aplicar a um Prefab Asset funcionem conforme o esperado.

Quando se trata de um script do Editor, use Object.DestroyImmediate para destruir objetos de instância do Prefab e registrar a destruição como uma Substituição armazenada no arquivo de cena.

Inspecionar relacionamentos de variantes pré-fabricadas

Os usuários geralmente perguntam como é a árvore de herança de variantes para um ativo prefabricado específico. Na versão 2022.2, adicionamos o pop-up Família Prefab ao Inspetor. O conteúdo do pop-up depende do Prefab Asset selecionado no Project Browser. Depois de selecionar um Ativo Prefab e abrir o pop-up Família Prefab, o Editor lista todos os ancestrais do Prefab atual, bem como todos os filhos imediatos.

Família pré-fabricada pop-up

Explore ferramentas de substituição aprimoradas

Além de dúvidas sobre a árvore de herança, os usuários frequentemente perguntam como podem se livrar de substituições não utilizadas armazenadas em uma cena, mas nunca acessadas (porque a propriedade foi removida de um script). No pior dos casos, essas propriedades podem fazer referência a ativos que são então puxados para a compilação final, ocupando espaço no dispositivo de armazenamento e na memória, mas nunca são usados.

As substituições agora são sinalizadas como não utilizadas para:

  • Objetos de destino nulos
  • Caminhos de propriedade desconhecidos (que não estão sujeitos ao uso de FormlySerializedAsAttribute com script)
  • Componentes removidos
  • GameObjects removidos
  • Dimensões de matriz alteradas (por exemplo, matriz de materiais)

Ao selecionar uma ou mais instâncias do Prefab na Hierarquia e abrir o menu suspenso Substituições , o Editor agora mostra se há Substituições não utilizadas. Você pode então removê-los da cena usando o novo menu suspenso Substituições não utilizadas .

Lista suspensa de substituições não utilizadas

Além disso, você pode remover todas as substituições não utilizadas em uma cena por meio do Menu de contexto da cena da Hierarquia ou por meio do Menu de contexto para uma seleção arbitrária de instâncias do Prefab.

Remover substituições não utilizadas

Não removemos automaticamente substituições não utilizadas. Afinal, a razão de sua existência não pode ser inferida. Remover uma propriedade de um script ou excluir um ativo não deve remover automaticamente as substituições não utilizadas, pois você pode desejar desfazer a remoção e restaurar as substituições posteriormente.

Caso você esteja se perguntando: “Por que ainda tenho substituições na minha instância do Prefab depois de pressionar 'Aplicar tudo'?” A resposta é que essas substituições simplesmente não podem ser aplicadas ao ativo pré-fabricado. Mais comumente, essas substituições são referências a outros objetos na cena que não podem ser referenciados no Prefab Asset. Substituições que normalmente não são aplicáveis agora são destacadas por uma barra azul escura no Inspetor. Elas não podem ser aplicadas; apenas revertidas.

Conheça essas outras melhorias

Agora você pode alterar o comportamento padrão ao abrir o Modo Prefab para Em Isolamento em vez de Em Contexto. Vá para Preferências do Editor > Geral > Modo Prefab Padrão para fazer essa alteração.

Modo Prefab Padrão nas Preferências do Editor

Agora, com a versão 2022.2, Desfazer é registrado como uma única operação Desfazer ao sair do Modo Prefab. Isso faz com que todas as alterações feitas no Prefab sejam revertidas se você executar uma ação Desfazer após sair do Modo Prefab.

Ao longo de vários lançamentos, o tratamento e os relatórios de erros durante o carregamento de cena (e o carregamento de Prefab no Modo Prefab) melhoraram substancialmente e agora indicarão a quais Prefabs os erros estão relacionados e/ou o GUID para Prefabs ausentes. Na verdade, a maneira como lidamos com os ativos dos Prefabs ausentes durante o carregamento da cena é mais segura e estável do que antes.

Em um esforço para melhorar ainda mais o tratamento de erros e evitar a introdução de dados incorretos em seu projeto, adicionamos um Tipo de Ativo Prefab Quebrado, que será produzido pelo Importador Prefab quando forem encontrados erros que não podem ser corrigidos.

O caso mais comum é quando uma variante do Prefab perde seu Prefab pai, talvez porque ele tenha sido excluído. Nesse caso, não podemos produzir uma Variante Prefab significativa, então um Ativo Prefab Quebrado é criado. Este novo recurso mostrará informações sobre o que está errado no Inspetor quando selecionado no Navegador de Projetos. Se for um caso de um pai Prefab ausente, o GUID do Prefab ausente será exibido. Como alternativa, se for uma cadeia de variantes pré-fabricadas que está quebrada, você pode subir a cadeia através do Inspetor até encontrar a variante com o pai ausente.

Ativo de variante pré-fabricado aparecendo como pré-fabricado quebrado devido à perda do pré-fabricado pai

O conceito de instâncias de Prefab desconectadas não existe mais a partir de 2022.1. Ainda oferecemos suporte ao carregamento de instâncias do Prefab Desconectado, mas quando o Editor as encontra durante o carregamento da cena, as instâncias do Prefab Desconectado são despojadas de todas as suas informações do Prefab e se tornam GameObjects comuns.

Como mencionado, nossa equipe corrigiu uma série de bugs que vocês gentilmente nos relataram ao longo do tempo. Alguns deles derivam do sistema Prefab original, mas muitos só se tornaram aparentes com a introdução de nossos Prefabs aprimorados.

Hoje, estamos confiantes de que você aproveitará a estabilidade do mais recente sistema Prefab. Esperamos que você ache o trabalho tranquilo e eficiente.

Tem mais perguntas ou comentários relacionados ao Prefab? Junte-se a nós nos fóruns para compartilhar seu feedback.