SerializeField na Unity – Quando usar e porque

Na computação,  a serialização  é o processo de traduzir uma estrutura de dados ou o estado de um objeto em um formato que o computador possa armazenar ou transmitir e reconstruir posteriormente. Em outras palavras, você pega um objeto na memória RAM e faz uma representação em disco do objeto para recriá-lo a qualquer momento no futuro.

Quando a série consequente de bits é relida de acordo com o formato de serialização, os usuários podem usá-la para criar um clone idêntico do objeto original. Muitas vezes, esse processo não é tão direto quanto pode parecer para muitos objetos complexos.

A serialização de um objeto também é chamada de  empacotamento  de um objeto em algumas situações. A operação oposta, extrair uma estrutura de dados de uma série de bytes, é a  desserialização.

 

Unity SerializeField

Quando você aplica o atributo SerializeField a um campo, ele comanda o Unity para salvar ou restaurar seu estado. O Unity SerializeField força o Unity a serializar um campo privado.

Observe que, quando o Unity serializar seus scripts, ele serializará apenas seus campos públicos. Se você deseja serializar seus campos privados, deve adicionar o atributo SerializeField a esses campos.

O Unity serializa os componentes de script, recarrega os novos assemblies e recria os componentes de script de suas contrapartes serializadas. Esse processo é feito no sistema interno de serialização do Unity, não com a funcionalidade de serialização do .NET.

O sistema de serialização pode fazer o seguinte:
• Serializar campos não estáticos públicos (de tipos serializáveis)
• Serialize campos não estáticos não públicos marcados com o atributo SerializeField.

O sistema de serialização não pode fazer o seguinte:
• Serialize campos estáticos.
• Serializar propriedades.

 

Tipos serializáveis

O Unity pode serializar campos dos seguintes tipos:
• Todas as classes de UnityEngine.Object
• Todos os tipos de dados primários, incluindo int, string, float e bool.
• Alguns tipos integrados, incluindo Vector2, Vector3, Vector4, Quaternion, Matrix4x4, Color, Rect e LayerMask.
• Arrays e listas de um tipo serializável
• Enums
• Estruturas

Para saber mais sobre tipos serializáveis, você pode verificar a serialização de script na documentação do Unity.

 

Dicionário Unity SeralizeField

Se esta é a pergunta que o atraiu para este artigo, deixe-me dizer-lhe: Unity não serializará o Dictionary. Ainda assim, você tem opções: Armazenar uma List<> para chaves e uma List<> para valores e misturá-los em um dicionário não serializado em Awake() . Você não poderá modificar o Dicionário e salvá-lo, mas pode ajudá-lo em muitos outros casos.

 

Unity SerializeField vs público

Para entender quando você deve usar SerializeField ou variáveis ​​públicas, você deve saber a diferença entre variáveis ​​públicas e privadas :

As variáveis ​​públicas  podem ser acessadas por qualquer outro código no mesmo assembly ou outro assembly que faça referência a ele. O nível de acessibilidade de membros públicos de um tipo é diferente.

Variáveis ​​privadas  só podem ser acessadas por código na mesma classe ou struct.

Assim, outras classes podem fazer referência a variáveis ​​públicas, enquanto variáveis ​​privadas não. No Unity, os campos públicos são exibidos no Inspetor. Os campos públicos são serializáveis ​​por padrão, assim como as áreas que você marca com SerializeField. Você pode preferir SerializeField em vez de público porque pode querer ver sua variável no Inspetor, mas mantê-la inacessível.

Existem quatro status diferentes que suas variáveis ​​podem ter.
• Eles podem ser públicos, aparecendo no Inspector e também acessíveis por outros scripts.
• Eles podem ser [SerializeField] privados, aparecendo no Inspector, mas não acessíveis por outros scripts.
• Eles podem ser públicos [HideInInspector], não aparecem no Inspector, mas podem ser acessados ​​por outros scripts.
• Eles podem ser privados, nem mostrados no Inspector nem acessíveis por outros scripts.

 2,055 visualizações

Comentários

Subscribe
Notify of
guest
1 Comentário
Mais antigos
Mais recentes
Inline Feedbacks
View all comments
Lucas
02/01/2023 07:57

Top demais

Sobre o autor

Desde 2012 atuo com desenvolvimento de sites, em 2022 fundei a Over Games e comecei atuar também na área de desenvolvimento de jogos. Além de autodidata e muito esforçado, uma das minhas maiores qualidades é ser perfeccionista e ter um raciocínio lógico muito rápido, qualidade que sempre foi reconhecida pelos meus clientes. Durante todos esses anos fui adquirindo bastante experiência e hoje quero aprender mais sobre a indústria de games e contribuir com ela também.

Compartilhe esse post

Facebook
Twitter
Email
WhatsApp
LinkedIn
Pinterest