CocosCreator3.8 Notas de pesquisa (15) Pacote de ativos de gerenciamento de recursos CocosCreator


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 resourcestodos 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.


Insira a descrição da imagem aqui


Insira a descrição da imagem aqui


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 (como Texture, 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.jsde game.jsscript 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 importou .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.jsonarquivo.


Por exemplo:

Insira a descrição da imagem aqui


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.loadBundleEle 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 loadBundlecarregá-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.Bundleinstância da classe será retornada.

loadPodemos carregar os recursos do Asset Bundle através do método na instância . Os parâmetros deste método são resources.loadiguais 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.loadDirsemelhante 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 loadSceneo método para carregar cenas no pacote especificado. Você só precisa passar o nome da cena . A diferença é que ele só
loadScenecarregará a cena no pacote especificado, mas não executará a cena. Você também precisa usar para executar a cena:director.loadSceneloadScenedirector.runScene

bundle.loadScene('test', function (err, scene) {
    director.runScene(scene);
});

(4), pré-carregar recursos

O Asset Bundle fornece preloadinterfaces preloadDirpara pré-carregar recursos no Asset Bundle. O uso específico é assetManagerconsistente 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.releaseAssetSolte usando métodos normais .
 bundle.load(`image/spriteFrame`, SpriteFrame, function (err, spriteFrame) {
    
    
     assetManager.releaseAsset(spriteFrame);
 });

  • Use o método fornecido pelo Asset Bundle releasepara liberar passando o caminho e o tipo. Somente um único recurso no Asset Bundle pode ser liberado. loadOs parâmetros podem ser os mesmos usados ​​no método Asset Bundle .

 bundle.load(`image/spriteFrame`, SpriteFrame, function (err, spriteFrame) {
    
    
     bundle.release(`image`, SpriteFrame);
 });

  • releaseAllUse o método fornecido pelo Asset Bundle . Este método é assetManager.releaseAllsemelhante e releaseAllliberará 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();
 });

Acho que você gosta

Origin blog.csdn.net/lizhong2008/article/details/132858294
Recomendado
Clasificación