Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
2 participantes
Página 1 de 1
Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
[ltr][ltr]Pra quem já publicou games grandes (em tamanho) no Android...
Alguém aqui tem boa experiência com os Asset Bundles? É complicado manter versões para Android e Windows (ou outras plataformas) com o tempo, para games que são atualizados frequentemente?
Adoraria ouvir relatos de quem usa. E se alguém já tentou o que vou experimentar, que é usar cenas para armazenar e chamar prefabs em vez da pasta Resources.
O problema:
Eu tenho um projeto meio ambicioso para os padrões dos jogos similares feitos na Unity (games de simulação de direção com propósitos específicos). Nele terei dezenas de ônibus em boa qualidade... Naturalmente "pesados" em termos de texturas, sons etc. Já tem 4 e o APK chegou no limite, passando dos 100 MB. Fui investigar e era a pasta Resources... Eu carregava eles com Resources.Load. Funciona super bem, são integrados ao jogo, mas passando de 100 MB não dá pra postar na Play Store (no caso o apk ficou com 100 MB mesmo tendo a opção split application binary... o obb com os cenários ficou tão grande quanto).
Eu pensava que o conteúdo da pasta Resources ficaria no obb, não no apk, imaginei que somente a primeira cena ficaria nele. Surpresa meio decepcionante, mas faz parte...
Quando leio ou pesquiso sobre asset bundles bate um desânimo, só de ter que baixar à parte... E pelo que tinha visto são específicos para cada plataforma também, o que me daria um trabalhão. Nas keynotes da Unity isso parece que vai mudar bastante ainda, mas me importo com o hoje, agora.
A ideia milagrosa:
Em vez de usar os famigerados asset bundles e a pasta Resources, eu usaria cenas separadas para os veículos. Não é algo que se faz com todos os prefabs, mas pelo menos nesse caso... As cenas ficariam no OBB, deixando o APK com boa folga longe dos 100 MB. Carregaria elas usando o método additive (apesar de estar tendo problemas gravíssimos com a iluminação no meu open world em vários aparelhos, esse bug seria outra questão).
Nos testes prévios funcionou relativamente bem (é o que importa, afinal de contas), mas adoraria ver outros meios de fazer a mesma coisa rs, se há alguma forma mais eficiente.
Simplificar extremamente o projeto está fora de cogitação, é um game de nicho, o público alvo dele gostou e apoia os modelos detalhados mesmo que o jogo fique um dia com 500 MB.[/ltr][/ltr]
Alguém aqui tem boa experiência com os Asset Bundles? É complicado manter versões para Android e Windows (ou outras plataformas) com o tempo, para games que são atualizados frequentemente?
Adoraria ouvir relatos de quem usa. E se alguém já tentou o que vou experimentar, que é usar cenas para armazenar e chamar prefabs em vez da pasta Resources.
O problema:
Eu tenho um projeto meio ambicioso para os padrões dos jogos similares feitos na Unity (games de simulação de direção com propósitos específicos). Nele terei dezenas de ônibus em boa qualidade... Naturalmente "pesados" em termos de texturas, sons etc. Já tem 4 e o APK chegou no limite, passando dos 100 MB. Fui investigar e era a pasta Resources... Eu carregava eles com Resources.Load. Funciona super bem, são integrados ao jogo, mas passando de 100 MB não dá pra postar na Play Store (no caso o apk ficou com 100 MB mesmo tendo a opção split application binary... o obb com os cenários ficou tão grande quanto).
Eu pensava que o conteúdo da pasta Resources ficaria no obb, não no apk, imaginei que somente a primeira cena ficaria nele. Surpresa meio decepcionante, mas faz parte...
Quando leio ou pesquiso sobre asset bundles bate um desânimo, só de ter que baixar à parte... E pelo que tinha visto são específicos para cada plataforma também, o que me daria um trabalhão. Nas keynotes da Unity isso parece que vai mudar bastante ainda, mas me importo com o hoje, agora.
A ideia milagrosa:
Em vez de usar os famigerados asset bundles e a pasta Resources, eu usaria cenas separadas para os veículos. Não é algo que se faz com todos os prefabs, mas pelo menos nesse caso... As cenas ficariam no OBB, deixando o APK com boa folga longe dos 100 MB. Carregaria elas usando o método additive (apesar de estar tendo problemas gravíssimos com a iluminação no meu open world em vários aparelhos, esse bug seria outra questão).
Nos testes prévios funcionou relativamente bem (é o que importa, afinal de contas), mas adoraria ver outros meios de fazer a mesma coisa rs, se há alguma forma mais eficiente.
Simplificar extremamente o projeto está fora de cogitação, é um game de nicho, o público alvo dele gostou e apoia os modelos detalhados mesmo que o jogo fique um dia com 500 MB.[/ltr][/ltr]
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
Oi amigo, bom, você fez algo errado aí! O APK possui TODOS OS ARQUIVOS necessarios pra rodar a primeira cena, e TODOS os scripts do jogo. Mais mesmo que você faça milhões de linhas de script, os scripts não puxam mais do que alguns Kb de memoria. Então, a minha ideia é que deixe a cena 0 (A primeira) completamente vazia. O OBB possui todos os arquivos que não estão na primeira cena, entendeu? Eu uso o OBB no meu jogo, já tive OBBs de 200 mega e o APK NUNCA passou de 30Mb.
Bom, pra finalizar, aqui estão dois tópicos:
Aqui eu ensino como criar um assistente de download da OBB, que verifica se a OBB existe e ainda baixa ela.
https://www.schultzgames.com/t5302-tutorial-como-fazer-download-da-obb-do-jogo-in-game-android
Aqui eu ensino a como traduzir o assistente de downloads da OBB
https://www.schultzgames.com/t5303-dica-traduzir-o-assistente-de-downloads-do-google-play-obb-downloader
É tudo super fácil, e tu vai conseguir fazer numa boa! Pelo menos tenta aí, garanto que vai gostar! :D
Bom, pra finalizar, aqui estão dois tópicos:
Aqui eu ensino como criar um assistente de download da OBB, que verifica se a OBB existe e ainda baixa ela.
https://www.schultzgames.com/t5302-tutorial-como-fazer-download-da-obb-do-jogo-in-game-android
Aqui eu ensino a como traduzir o assistente de downloads da OBB
https://www.schultzgames.com/t5303-dica-traduzir-o-assistente-de-downloads-do-google-play-obb-downloader
É tudo super fácil, e tu vai conseguir fazer numa boa! Pelo menos tenta aí, garanto que vai gostar! :D
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
Opa, valeu pela mensagem! O OBB é baixado automaticamente pela Play Store na grande maioria dos casos, normalmente não preciso me preocupar com o download dele.
Eu fiz um teste ontem numa live, apenas por remover os prefabs da pasta Resources o tamanho do apk foi reduzido, sendo transferido para o obb. Tais prefabs não eram referenciados em cena alguma, apenas ficavam na pasta Resources!
Quando otimizei outras coisas o resultado foi esse, com 4 ônibus na pasta Resources, chamados em runtime com Resources.Load(string... sem referência nas cenas, hard coded mesmo)
APK: 97 MB
OBB: 93 MB
Total = 190 MB
Eu removi os prefabs da pasta Resources (cada um é linkado a várias texturas e sons diferentes) e coloquei todos eles numa nova cena que foi adicionada à build, porém não a primeira. O resultado:
APK: 79 MB
OBB: 122 MB
Total = 201 MB
Daí conclui que tudo o que está na Resources vai pro apk, independente de estar na primeira cena ou não. Eu vou testar depois com um arquivo de uns 500 MB só pra ter certeza.
Em tempo, bem útil o tutorial, obrigado pela indicação! Em alguns raros casos a Play Store não baixa o OBB e os usuários não conseguem sair da primeira cena (suspeito que seja aquela opção para baixar somente no Wi-Fi, se a pessoa marcar quando estiver na rede móvel, o obb não é baixado).
Eu fiz um teste ontem numa live, apenas por remover os prefabs da pasta Resources o tamanho do apk foi reduzido, sendo transferido para o obb. Tais prefabs não eram referenciados em cena alguma, apenas ficavam na pasta Resources!
Quando otimizei outras coisas o resultado foi esse, com 4 ônibus na pasta Resources, chamados em runtime com Resources.Load(string... sem referência nas cenas, hard coded mesmo)
APK: 97 MB
OBB: 93 MB
Total = 190 MB
Eu removi os prefabs da pasta Resources (cada um é linkado a várias texturas e sons diferentes) e coloquei todos eles numa nova cena que foi adicionada à build, porém não a primeira. O resultado:
APK: 79 MB
OBB: 122 MB
Total = 201 MB
Daí conclui que tudo o que está na Resources vai pro apk, independente de estar na primeira cena ou não. Eu vou testar depois com um arquivo de uns 500 MB só pra ter certeza.
Em tempo, bem útil o tutorial, obrigado pela indicação! Em alguns raros casos a Play Store não baixa o OBB e os usuários não conseguem sair da primeira cena (suspeito que seja aquela opção para baixar somente no Wi-Fi, se a pessoa marcar quando estiver na rede móvel, o obb não é baixado).
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
Há leves equívocos nos números que coloquei, peguei em KB vendo na pasta (arredondando desconsiderando dps do ponto) e não em MB, mas não interfere na visão geral rs.
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
Sim, amigo, esses casos, são o seguinte, a Google Play baixa a OBB mais mesmo assim o jogo não consegue encontra-la, então seguindo esse tutorial meu, você aprende a arrumar isso! Tive problemas com isso quando comecei minha jornada no Android, e descobrir isso mudou minha vida kkkkkk :D
Agora, sim tudo que esta na pasta Resources, vai pro APK, mais tipo.. Você não pode deixar os prefabs fora da pasta resources? Garantir que a primeira cena só tenha uma UI, e um script pra verificar a obb e tal?
Agora, sim tudo que esta na pasta Resources, vai pro APK, mais tipo.. Você não pode deixar os prefabs fora da pasta resources? Garantir que a primeira cena só tenha uma UI, e um script pra verificar a obb e tal?
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
Se conseguir garantir que a primeira cena só faça referencia aos arquivos inciais, vai ser sucesso pra você! Vai poder fazer um jogo de até 4GB que seu APK ainda vai continuar com menos de 50MB!
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
Então, eu não posso fazer isso! rs Deixava na Resources justamente para carregá-los sob demanda, já que são os veículos, não presos aos mapas (cenas). Basicamente a pessoa escolhe um veículo pelo nome (string, sem referência, pra mesma cena não pesar tanto na RAM) e depois o mapa (cena). A cena do mapa é carregada e o prefab instanciado pelo Resources.Load.
Sem estar na pasta de Resources pelo que vi não tem como puxar ele, só se fosse usando referência em algum gameobject numa cena de escolha... O que pesaria na RAM (imagine uma cena com todos os ônibus, o carregamento demoraria, o jogo fecharia por falta de RAM etc).
Deixando em cenas eu só preciso mudar os hábitos, na teoria tem tudo pra funcionar, visto que já funciona para outras cenas.
Criaria cenas com um gameobject com o nome desejado, por exemplo
bus1
bus2
caminhaoTal
carroEtc
Todas elas na build, porém iriam pro obb. Cada veículo poderia ter o tamanho que quisesse em texturas, modelos e sons (sem estourar os 2 GB do OBB, claro kkkk).
Feita a escolha (por string mesmo), carrego a cena que contém o objeto, localizo ele (GameObject.Find mesmo, uso válido aqui, não é no Update msm) e marco para não destruir, em seguida carrego o mapa... Ou faço o contrário, carrego o mapa, depois carrego a cena do veículo de forma aditiva, assim ambas ficam presentes. Vai dar certo haha Confiante.
Se a Unity não tiver nenhum limite baixo para a quantidade de cenas, pelo menos...
Sem estar na pasta de Resources pelo que vi não tem como puxar ele, só se fosse usando referência em algum gameobject numa cena de escolha... O que pesaria na RAM (imagine uma cena com todos os ônibus, o carregamento demoraria, o jogo fecharia por falta de RAM etc).
Deixando em cenas eu só preciso mudar os hábitos, na teoria tem tudo pra funcionar, visto que já funciona para outras cenas.
Criaria cenas com um gameobject com o nome desejado, por exemplo
bus1
bus2
caminhaoTal
carroEtc
Todas elas na build, porém iriam pro obb. Cada veículo poderia ter o tamanho que quisesse em texturas, modelos e sons (sem estourar os 2 GB do OBB, claro kkkk).
Feita a escolha (por string mesmo), carrego a cena que contém o objeto, localizo ele (GameObject.Find mesmo, uso válido aqui, não é no Update msm) e marco para não destruir, em seguida carrego o mapa... Ou faço o contrário, carrego o mapa, depois carrego a cena do veículo de forma aditiva, assim ambas ficam presentes. Vai dar certo haha Confiante.
Se a Unity não tiver nenhum limite baixo para a quantidade de cenas, pelo menos...
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
AAAAAAAAAAAAAAAAAH CARAAAAAAAAAAA!!!!! Acabei de lembrar!! A Unity suporta que você deixe duas cenas abertas ao mesmo tempo(mescladas), então você pode fazer um menu onde o jogador escolhe a cena(mapa), dai quando o mapa carregar, aparece uma janela pra ele escolher qual veiculo ele vai querer dirigir, então, você tera uma cena DESCARREGADA junto com a cena do seu mapa. Essa cena DESCARREGADA, vai ter UM veiculo do jogo, daí, se o jogador escolher esse veiculo, a cena é carregada e o veiculo aparece! Você vai entender melhor se ver esse video do marcos!
Cara, isso tem que funcionar! Se isso funcionar, vai quebrar 90% dos limites que você ta tendo agora! Vale a pena testar!
Cara, isso tem que funcionar! Se isso funcionar, vai quebrar 90% dos limites que você ta tendo agora! Vale a pena testar!
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
É basicamente isso!
Eu já fiz o sistema para carregar cenas de forma assíncrona para permitir que a pessoa ande no mapa sem passar por tela de carregamento (um dia pretendo liberar um asset disso, a ideia é simples mas a implementação me tomou algumas boas semanas de trampo...). Ao entrar num trigger (ou checar uma distância, etc) ele carrega a continuação do mapa, pega o objeto raiz da cena (pelo nome) e "junta" na ponta certa.
Por exemplo, a cena central é 0x0 (0 no x e 0 no Y). Ao ir para o norte a pessoa está indo pra cena 0x1, que é carregada antes da pessoa chegar na borda. Ao chegar na borda estarão as duas cenas carregadas, dando uma transição suave. Quando adentrar a 0x1 e passar de uma certa distância, a 0x0 depois de um tempo é descarregada. E assim vai, permitindo na teoria mapas "infinitos".
Eu me preocupo com o gerenciamento de memória pela Unity, já que ela tem vários bugs pendentes e um relaxo total dos produtores com open world... Dá medo do jogo fechar ao percorrer distâncias longas tendo carregado e descarregado dezenas de cenas. Mas no caso do veículo pelo menos seriam apenas duas, é praticamente garantido que vai dar certo :D
Eu já fiz o sistema para carregar cenas de forma assíncrona para permitir que a pessoa ande no mapa sem passar por tela de carregamento (um dia pretendo liberar um asset disso, a ideia é simples mas a implementação me tomou algumas boas semanas de trampo...). Ao entrar num trigger (ou checar uma distância, etc) ele carrega a continuação do mapa, pega o objeto raiz da cena (pelo nome) e "junta" na ponta certa.
Por exemplo, a cena central é 0x0 (0 no x e 0 no Y). Ao ir para o norte a pessoa está indo pra cena 0x1, que é carregada antes da pessoa chegar na borda. Ao chegar na borda estarão as duas cenas carregadas, dando uma transição suave. Quando adentrar a 0x1 e passar de uma certa distância, a 0x0 depois de um tempo é descarregada. E assim vai, permitindo na teoria mapas "infinitos".
Eu me preocupo com o gerenciamento de memória pela Unity, já que ela tem vários bugs pendentes e um relaxo total dos produtores com open world... Dá medo do jogo fechar ao percorrer distâncias longas tendo carregado e descarregado dezenas de cenas. Mas no caso do veículo pelo menos seriam apenas duas, é praticamente garantido que vai dar certo :D
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
Sim! E ainda tem a vantagem (malandragem) de deixa-los descarregados sem gastar RAM hehehehe
Na teoria é uma boa! Espero que dê certo! E me diz ai se funcionou beleza?! Tambem me diz quanto ficou o APK final! Sucesso aí man!
Um favorzinho: Se você puder, você pode testar o jogo que estou fazendo? Aqui esta o link do tópico dele
https://www.schultzgames.com/t5257-alpha-android-night-hunter-devlog-action-rpg-24-de-julho-de-2017-baixe#37855
Já ta na Google Play! Obrigado!!
Na teoria é uma boa! Espero que dê certo! E me diz ai se funcionou beleza?! Tambem me diz quanto ficou o APK final! Sucesso aí man!
Um favorzinho: Se você puder, você pode testar o jogo que estou fazendo? Aqui esta o link do tópico dele
https://www.schultzgames.com/t5257-alpha-android-night-hunter-devlog-action-rpg-24-de-julho-de-2017-baixe#37855
Já ta na Google Play! Obrigado!!
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
Opa, testo sim! Mais tarde vou baixar e depois de jogar um pouco retorno :D
Esse meu postei a atualização hoje:
https://play.google.com/store/apps/details?id=com.viamep.protonbussimulator
Mas ainda sem essa "técnica" para os veículos (eu tirei a compatibilidade com x86 pro apk ficar abaixo de 100 MB, por pouco kkk).
Esse meu postei a atualização hoje:
https://play.google.com/store/apps/details?id=com.viamep.protonbussimulator
Mas ainda sem essa "técnica" para os veículos (eu tirei a compatibilidade com x86 pro apk ficar abaixo de 100 MB, por pouco kkk).
Re: Opiniões para carregar prefabs pesados: Resources, Asset Bundles ou cenas?
Eu vou dar uma olhada nele aqui sim!
Tópicos semelhantes
» Sistema de Carregar cenas
» Salvar e carregar dados na Unity de objetos prefabs sem sobrescrever os dad
» Como carregar multiplas cenas de uma vez?
» [Duvida] Como carregar cenas aleatoriamente?
» Coletavel para carregar a arma?
» Salvar e carregar dados na Unity de objetos prefabs sem sobrescrever os dad
» Como carregar multiplas cenas de uma vez?
» [Duvida] Como carregar cenas aleatoriamente?
» Coletavel para carregar a arma?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos