Existe uma função muito importante no módulo de gerenciamento de recursos: Asset Bundle. Então, o que é Asset Bundle? qual é o efeito? Como usar o pacote de ativos?
1. O que é pacote de ativos? qual é o efeito?
No processo diário de desenvolvimento de jogos, para reduzir o tempo de download e carregamento de recursos quando o jogo é iniciado, só podemos baixar e carregar os módulos de recursos necessários.
O Asset Bundle no CocosCreator é uma ferramenta modular que nos permite dividir recursos como imagens, scripts, cenas, etc. em vários Asset Bundles diferentes de acordo com as necessidades do projeto.
Por exemplo: um lobby integra muitos minijogos, e podemos dividir o lobby e diferentes minijogos em diferentes Asset Bundles para gerenciamento.
O Asset Bundle pode ser colocado em diferentes locais, como em um servidor remoto, localmente ou em um subpacote de uma plataforma de minijogo.
2. Pacote de ativos integrado do CocosCreator
Pacote de ativos integrado | Descrição da função | Configuração | prioridade |
---|---|---|---|
main |
Armazena todos os cenários verificados nos Cenários de Build Participantes no painel Build Release e seus recursos dependentes | Configure o tipo de compactação do pacote principal do painel de lançamento de compilação e configure o pacote principal como um pacote remoto. | 7 |
resources |
Armazene resources todos os recursos no diretório e seus recursos dependentes |
Configurando a pasta no Explorerassets -> resources |
8 |
start-scene |
Se a subcontratação da cena inicial estiver marcada no painel Build Release , a primeira cena será incorporada .start-scene |
Não foi possível configurar | 20 |
internal |
Alguns recursos padrão integrados ao módulo do mecanismo | Não foi possível configurar | 21 |
3. Uso básico do Asset Bundle
1. Configuração do pacote de ativos
Pacotes de ativos personalizados são configurados em unidades de pastas . Você pode clicar no botão Editar no Inspetor de propriedades ou abrir as configurações do projeto através do menu Projeto para configurar o pacote.
Descrição do item de configuração
Itens de configuração | Descrição da função |
---|---|
Nome do pacote | O nome do Asset Bundle após a construção usará o nome desta pasta por padrão e pode ser modificado conforme necessário. |
Prioridade do pacote | O criador abriu 20 prioridades configuráveis. Ao construir, o Asset Bundle será construído em ordem de prioridades grandes para pequenas . |
plataforma de destino | Diferentes plataformas podem usar configurações diferentes. Ao construir, o Asset Bundle será construído de acordo com as configurações da plataforma correspondente. Suporta a seleção de diferentes configurações de plataforma por meio da caixa suspensa, que atualmente é a configuração padrão. Os desenvolvedores podem personalizar seu próprio esquema de configuração em Project Settings- > Bundle Configuration . |
Tipo de compressão | Determina o formato de saída final do Asset Bundle, incluindo 5 tipos de compactação: merge dependencies , no compression , merge all JSON , mini-game sub-packaging e Zip . |
Configurar como pacote remoto | Seja para configurar o Asset Bundle como um pacote remoto, a plataforma Web não é suportada. Se esta opção estiver marcada, o Asset Bundle será colocado na pasta remota após ser construído . Você precisa colocar toda a pasta remota no servidor remoto. Ao construir pequenas plataformas de jogos como OPPO, vivo, Huawei, etc., se esta opção estiver marcada, o Asset Bundle não será empacotado no rpk. |
Filtragem de recursos de pacote | A filtragem de recursos pode filtrar determinados recursos do Bundle. Através do botão de visualização abaixo, você pode visualizar a lista final de recursos do Bundle. A filtragem do Bundle é dividida em duas partes: inclusão e exclusão. |
Construir pacote | Building Bundle pode construir o Bundle atualmente selecionado. |
(1) Descrição das regras de prioridade do pacote
-
Quando o mesmo recurso é referenciado por vários Asset Bundles com prioridades diferentes , o recurso será colocado primeiro no Asset Bundle com maior prioridade e apenas uma informação de registro será armazenada no Asset Bundle com menor prioridade. Neste momento, o Asset Bundle de baixa prioridade dependerá do Asset Bundle de alta prioridade.
Se desejar carregar esse recurso compartilhado em um Asset Bundle de baixa prioridade, você deverá carregar o Asset Bundle de alta prioridade antes de carregar o Asset Bundle de baixa prioridade.
-
Quando o mesmo recurso é referenciado por vários Asset Bundles com a mesma prioridade , o recurso será copiado em cada Asset Bundle. Neste momento, não há dependência entre diferentes Asset Bundles e eles podem ser carregados em qualquer ordem. Portanto, é necessário tentar garantir que o Asset Bundle onde os
recursos compartilhados (comoTexture
,SpriteFrame
, etc.) estão localizados tenha uma prioridade mais alta, para que mais Asset Bundles de baixa prioridade possam compartilhar recursos, minimizando assim o corpo do pacote.Audio
-
O Asset Bundle personalizado não deve ter uma prioridade mais alta do que o Asset Bundle integrado, para que os recursos no Asset Bundle integrado possam ser compartilhados tanto quanto possível.
(2) Descrição do tipo de compressão
O Asset Bundle usa o tipo de compactação de dependência mesclada por padrão. Você pode redefinir o tipo de compactação de todos os Asset Bundles, incluindo os Asset Bundles integrados, ativando-o.
Tipo de compressão | Descrição da função |
---|---|
Mesclar dependências | Ao construir um Asset Bundle, os arquivos JSON de recursos interdependentes serão mesclados para reduzir o número de solicitações de carregamento em tempo de execução. |
Sem compressão | O Asset Bundle é construído sem qualquer compactação |
Mesclar todo JSON | Ao construir um Asset Bundle, os arquivos JSON de todos os recursos serão mesclados em um só, minimizando assim o número de solicitações, mas poderá aumentar o tempo de carregamento de um único recurso. |
Subcontratação de minijogos | Em plataformas de minijogos que fornecem funcionalidade de subpacote, o Asset Bundle será definido como subpacote na plataforma correspondente. |
Fecho eclair | Em algumas plataformas de minijogos, ao construir um Asset Bundle, os arquivos de recursos serão compactados em um arquivo Zip, reduzindo assim o número de solicitações de carregamento em tempo de execução. |
(3), Filtragem de recursos de pacote
A filtragem de recursos pode incluir ou excluir determinados recursos no pacote selecionado do pacote.
Tipo de filtro
Atualmente, existem dois tipos de filtragem: recursos de ativos e URLs . O padrão é URL .
2. Construção de Pacote de Ativos
Ao compilar, os recursos na pasta configurada como Asset Bundle (incluindo cenas, código e outros recursos) e os recursos dependentes relacionados fora da pasta serão mesclados na mesma pasta Asset Bundle. Todos os códigos e recursos
da pasta configurada como Asset Bundle serão processados da seguinte forma:
-
Código : Todos os códigos da pasta serão combinados em um arquivo
index.js
degame.js
script de entrada de acordo com a plataforma de publicação. -
Recursos : Todos os recursos na pasta e recursos dependentes relacionados fora da pasta serão colocados no diretório
import
ou .native
-
Configuração de recursos : todas as informações de configuração de recursos, incluindo caminho, tipo e versão, serão mescladas em um
config.json
arquivo.
Por exemplo:
3. Carregamento do pacote de ativos
(1) Carregando por nome
CocosCreator fornece uma API unificada para carregar o Asset Bundle. Ao carregar, você precisa passar o nome do BundleassetManager.loadBundle
no painel de configuração do Asset Bundle ou a URL do Asset Bundle .
assetManager.loadBundle('name', (err, bundle) => {
bundle.load('xxx');
});
(2) Carregando através de url
Ao reutilizar Asset Bundles de outros projetos, eles só poderão ser carregados através da URL :
assetManager.loadBundle('https://test.com/remote/name', (err, bundle) => {
bundle.load('xxx');
});
(3) Carregando através do caminho do espaço do usuário
assetManager.loadBundle
Ele também oferece suporte à passagem do caminho no espaço do usuário para carregar o Asset Bundle.
Podemos baixar o Asset Bundle para o espaço do usuário antecipadamente através da interface de download fornecida pela plataforma correspondente e, em seguida, usá-lo para loadBundle
carregá-lo.Desta forma, podemos gerenciar completamente o processo de download e armazenamento em cache do Asset Bundle por nós mesmos, fazendo é mais flexível de usar.
// 原生平台
assetManager.loadBundle(jsb.fileUtils.getWritablePath() + '/path/bundleName', (err, bundle) => {
// ...
});
// 微信小游戏平台
assetManager.loadBundle(wx.env.USER_DATA_PATH + '/path/bundleName', (err, bundle) => {
// ...
});
4. Carregue os recursos no Asset Bundle
(1), carregamento normal
Depois que o Asset Bundle for carregado, uma AssetManager.Bundle
instância da classe será retornada.
load
Podemos carregar os recursos do Asset Bundle através do método na instância . Os parâmetros deste método são resources.load
iguais aos do método. Só precisamos passar o caminho do recurso relativo ao Asset Bundle.
Nota: a extensão do arquivo não pode ser incluída no final do caminho.
// 加载 Texture
bundle.load(`image/texture`, Texture2D, function (err, texture) {
console.log(texture)
});
(2) Carregar recursos em lotes
Carregar recursos em lotes é resources.loadDir
semelhante a , basta passar o caminho do diretório relativo ao Asset Bundle.
bundle.loadDir("textures", function (err, assets) {
// ...
});
(3), cena de carregamento
Carregando Cenas O Asset Bundle fornece loadScene
o método para carregar cenas no pacote especificado. Você só precisa passar o nome da cena . A diferença é que ele só
loadScene
carregará a cena no pacote especificado, mas não executará a cena. Você também precisa usar para executar a cena:director.loadScene
loadScene
director.runScene
bundle.loadScene('test', function (err, scene) {
director.runScene(scene);
});
(4), pré-carregar recursos
O Asset Bundle fornece preload
interfaces preloadDir
para pré-carregar recursos no Asset Bundle. O uso específico é assetManager
consistente com .
5. Obtenha pacote de ativos
Quando o Asset Bundle for carregado, ele será armazenado em cache. Você pode usar o nome do Asset Bundle para obter o pacote. Por exemplo:
let bundle = assetManager.getBundle('name');
6. Libere os recursos do Asset Bundle
A liberação pode ser feita de três maneiras:
assetManager.releaseAsset
Solte usando métodos normais .
bundle.load(`image/spriteFrame`, SpriteFrame, function (err, spriteFrame) {
assetManager.releaseAsset(spriteFrame);
});
- Use o método fornecido pelo Asset Bundle
release
para liberar passando o caminho e o tipo. Somente um único recurso no Asset Bundle pode ser liberado.load
Os parâmetros podem ser os mesmos usados no método Asset Bundle .
bundle.load(`image/spriteFrame`, SpriteFrame, function (err, spriteFrame) {
bundle.release(`image`, SpriteFrame);
});
releaseAll
Use o método fornecido pelo Asset Bundle . Este método éassetManager.releaseAll
semelhante ereleaseAll
liberará todos os recursos pertencentes ao pacote (incluindo recursos no Asset Bundle e seus recursos externos dependentes). Use-o com cuidado.
bundle.load(`image/spriteFrame`, SpriteFrame, function (err, spriteFrame) {
bundle.releaseAll();
});