Serializar Dictionary no Scriptable Object
4 participantes
Página 1 de 1
Serializar Dictionary no Scriptable Object
Bom dia, estou tentando encontrar materiais ou alguma biblioteca que me possibilite serializar Dictionaries em scriptable objects. Aparentemente o Odin faz isso, mas eu não quero pagar por um asset para algo "tão simples", porém venho procurando nas últimas horas e não encontro nada que funcione dentro dos SO's.
Encontrei alguns códigos neste post, porém a serialização não funciona para SO's (um aviso aparece no console informando o problema, não lembro bem qual). Também já dei uma olhada no youtube, mas todos os tutoriais que eu encontrei são para serialização de Monobehaviours, com nada específico para SOs. Enfim, é incrível que a Unity não tenha essa feature de forma padrão, considerando que Dictionaries são um tipo bem comum de dado...
Encontrei alguns códigos neste post, porém a serialização não funciona para SO's (um aviso aparece no console informando o problema, não lembro bem qual). Também já dei uma olhada no youtube, mas todos os tutoriais que eu encontrei são para serialização de Monobehaviours, com nada específico para SOs. Enfim, é incrível que a Unity não tenha essa feature de forma padrão, considerando que Dictionaries são um tipo bem comum de dado...
Re: Serializar Dictionary no Scriptable Object
basicamente eu tento 3 coisas sempre.
ou uso> [System.Serializable]
ou [SerializeField]
[Serializable]
Sempre um dos 3 vai funcionar, porque sempre esqueço qual serve para oq... no geral é isso.
Uns servem apenas para Classes, outros para variáveis complexas como disctionary, agora não lembro qual é qual.
ou uso> [System.Serializable]
ou [SerializeField]
[Serializable]
Sempre um dos 3 vai funcionar, porque sempre esqueço qual serve para oq... no geral é isso.
Uns servem apenas para Classes, outros para variáveis complexas como disctionary, agora não lembro qual é qual.
Re: Serializar Dictionary no Scriptable Object
Acho que você se enganou, a Unity não serializa Dictionaries por padrão que eu saiba, mesmo utilizando os atributos citados na frente da variável. Existe até uma documentação que mostra um exemplo de como contornar este fato, usando justamente Dictionaries como exemplo. Eu já tinha encontrado essa página antes, mas não tinha lido com cuidado, pode ser que a solução citada resolva o meu problema, vou testar amanhã e informar aqui o resultado. A minha questão toda é referente ao uso deles junto aos Scriptable Objects, porque para Monobehaviours existe bastante tutoriais de como fazer, só para Scriptable Objects que eu não consegui encontrar nada. Talvez seja só um detalhezinho de um para o outro, mas eu não sei como fazer...stratengine escreveu:basicamente eu tento 3 coisas sempre.
ou uso> [System.Serializable]
ou [SerializeField]
[Serializable]
Sempre um dos 3 vai funcionar, porque sempre esqueço qual serve para oq... no geral é isso.
Uns servem apenas para Classes, outros para variáveis complexas como disctionary, agora não lembro qual é qual.
Re: Serializar Dictionary no Scriptable Object
Tinha me esquecido das structs, como eu não preciso especificamente das features que os Dictionaries oferecem, dá para encadear as duas variáveis em uma struct e criar uma lista dela. Continuo implementando a conversão aqui, acredito que vai se encaixar bem no que eu preciso.
Re: Serializar Dictionary no Scriptable Object
Acho que por enquanto a forma mais simples de realmente "simular" uma serialização de dictionary é essa que vc citou mesmo: Criar uma struct serializada com dois campos, um pra key e outro pro value, e depois criar um list dessa struct...
Não vai ser tão cedo que a Unity vai implementar de forma nativa a serialização de dicionários nem tuplas, ou qualquer outra estrutura de dados genérica por este motivo aqui:
"generic structs are never considered 'blittable' even if their generic arguments are blittable themselves."
Citação retirada deste tópico: https://forum.unity.com/threads/argumentexception-system-valuetuple-used-in-nativearray-must-be-blittable.542597/#post-3578001
Não vai ser tão cedo que a Unity vai implementar de forma nativa a serialização de dicionários nem tuplas, ou qualquer outra estrutura de dados genérica por este motivo aqui:
"generic structs are never considered 'blittable' even if their generic arguments are blittable themselves."
Citação retirada deste tópico: https://forum.unity.com/threads/argumentexception-system-valuetuple-used-in-nativearray-must-be-blittable.542597/#post-3578001
Re: Serializar Dictionary no Scriptable Object
Eu acho meio vergonhoso a Unity não dar um jeito nisso, uma organização deste tamanho com anos na indústria já deveria ter criado uma forma melhor considerando que Dictionaries não são uma coisa de outra mundo. Como é a Unreal neste tipo de coisa? Assumo que ela também esteja a frente neste tipo de coisa...MayLeone escreveu:Acho que por enquanto a forma mais simples de realmente "simular" uma serialização de dictionary é essa que vc citou mesmo: Criar uma struct serializada com dois campos, um pra key e outro pro value, e depois criar um list dessa struct...
Não vai ser tão cedo que a Unity vai implementar de forma nativa a serialização de dicionários nem tuplas, ou qualquer outra estrutura de dados genérica por este motivo aqui:
"generic structs are never considered 'blittable' even if their generic arguments are blittable themselves."
Citação retirada deste tópico: https://forum.unity.com/threads/argumentexception-system-valuetuple-used-in-nativearray-must-be-blittable.542597/#post-3578001
Eu estava pensando em pegar aquele Odin, que falam maravilhas, mas eu não deveria ter que pagar por algo tão básico assim.
Mesmo assim gostaria de entender porque as implementações manuais de serialização que funcionam para Monobehaviours não se aplicam a Scriptable Objects. Ou será que eu que cometi alguma barbeiragem e a implementação que funciona para um deveria funcionar para outro...?
Re: Serializar Dictionary no Scriptable Object
Bom esse tópico já faz um tempo mas eu tenho uma possível "solução" para isso, já me deparei com esse problema e depois de varias buscas para tentar resolver achei um script que estou disponibilizando aqui, não me lembro o nome do autor e não o encontrei mais!
https://gist.github.com/weslleyxm/13dc5d4ea671e6f948b344e0ed402a6e
Uso basta criar seu dicionário usando o UDictionary
Resultado
https://gist.github.com/weslleyxm/13dc5d4ea671e6f948b344e0ed402a6e
Uso basta criar seu dicionário usando o UDictionary
Resultado
Weslley- Moderador
- PONTOS : 5705
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Tópicos semelhantes
» NullReferenceException: Object reference not set to an instance of an object tag RayCast
» Unity 5: Object reference not set to an instance of an object
» Error NullReferenceException: Object reference not set to an instance of an object
» NullReferenceException Object reference not set to an instance of an object
» Null Reference Exception: Object reference not set to an instance of an object
» Unity 5: Object reference not set to an instance of an object
» Error NullReferenceException: Object reference not set to an instance of an object
» NullReferenceException Object reference not set to an instance of an object
» Null Reference Exception: Object reference not set to an instance of an object
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos