Diretório de artigos
-
- 1. O que é LOD, quais são as vantagens e desvantagens
- 2. O que é o MipMap? efeito?
- 3. Quando um objeto precisa ser criado com frequência no jogo, o que precisamos fazer para economizar memória.
- 4. Como otimizar a memória?
- 5. Como carregar recursos dinamicamente? e diferença
- 6. Descreva brevemente o princípio do agrupamento de objetos e quando usá-lo?
- 7. Quais são os benefícios de usar mipmaps? Em que circunstâncias é usado?
- 8. Otimização da memória da unidade? Coleta de lixo do GC
- 9. Como resolver o problema de congelamento causado pela criação e exclusão excessiva de objetos
- 10. Existem várias maneiras de carregar recursos do Unity, descreva brevemente o pacote de ativos
- 11. Existem apenas 20 grades no sistema de mochila, e agora há um total de 100 objetos. Exceto pelos 20 exibidos no campo de visão, quais são os outros métodos de processamento? (Nota: não é viável ocultar outros, o pool de objetos deve ter instruções específicas)
1. O que é LOD, quais são as vantagens e desvantagens
A tecnologia LOD é a abreviação de Levels of Detail, que significa vários níveis de detalhe. A tecnologia LOD refere-se a determinar a alocação de recursos de renderização de objetos de acordo com a posição e importância dos nós do modelo de objeto no ambiente de exibição, reduzindo o número de faces e detalhes de objetos não importantes, de modo a obter operações de renderização eficientes.
Vantagens: Modelos com detalhes diferentes podem ser selecionados dinamicamente para renderizar de acordo com a distância
Desvantagens: Aumenta a carga dos artistas, e o mesmo modelo com detalhes diferentes precisa ser preparado, o que também aumentará um pouco a capacidade do jogo.
2. O que é o MipMap? efeito?
Uma técnica comumente usada na renderização de textura de gráficos de computador 3D é chamada de Mipmapping. Para acelerar a renderização e reduzir o aliasing da imagem, as texturas são processadas em arquivos que consistem em uma série de imagens pré-computadas e otimizadas, chamadas de mapas MIP ou mipmaps.
3. Quando um objeto precisa ser criado com frequência no jogo, o que precisamos fazer para economizar memória.
Faça um pool, instancie um número suficiente no início do jogo e, em seguida, pegue-o de volta quando for usado
4. Como otimizar a memória?
Existem muitas maneiras, como
1. Compactar a biblioteca de classes interna;
2. Ocultar os objetos que precisam ser usados no futuro em vez de destruí-los diretamente;
3. Liberar os recursos ocupados pelo AssetBundle;
4. Reduzir o número unilateral do modelo, reduza o número de ossos no modelo, reduza o tamanho do mapa
5. Use mapas de luz, use detalhes de vários níveis (LOD), use shaders (Shader), use presets (Prefab).
5. Como carregar recursos dinamicamente? e diferença
1. Através do módulo Resources, chame sua função load: você pode carregar e retornar diretamente um determinado
tipo de objeto, desde que o recurso seja colocado na pasta chamada Resource, o Unity
irá carregá-lo independente de haver uma referência de cena ou não .Tudo no pacote de instalação. Recursos.Carregar();
2. Na forma de pacote: ou seja, coloque o recurso em um pacote de ativos e coloque-o no servidor ou
disco local, use o módulo WWW para obtê-lo e carregue um objeto desse pacote.
AssetBundle
3. Através do AssetDatabase.loadasset: Este método só é válido dentro do escopo do editor,
não existe tal função quando o jogo está rodando, geralmente é usado para depuração em desenvolvimento [Banco de recursos AssetDatabase
]
Diferença: O método de Resources precisa colocar todos os recursos no pacote de instalação, o que não é bom para o
lançamento do sub-pacote (micro-end) e atualização de versão (patch) do jogo, então o método recomendado do Unity
não A maneira de substituir o recurso
e façamos diferentes implementações em diferentes ambientes.
Armazenamento de recursos dinâmicos
Às vezes preciso armazenar alguns arquivos próprios no disco, por exemplo, quero colocar vários bundles
na instalação inicial. O Unity tem um conceito de streaming assets para fornecer
acesso à interface de armazenamento. Precisamos criar uma pasta com o nome de StreamingAssets no editor
, e colocar os arquivos dinâmicos que precisam ser colocados no disco do cliente nesta pasta.Após a
instalação, esses arquivos serão colocados no local especificado do disco do usuário. Esse local pode ser acessado por meio
de Application.streamingAssetsPath para obter.
6. Descreva brevemente o princípio do agrupamento de objetos e quando usá-lo?
A ideia por trás do pool de objetos é bem simples.
Em vez de instanciar um novo objeto a cada vez, armazenamos objetos em um pool e os reutilizamos quando necessário. A característica mais importante do pooling, e a essência do padrão de projeto do pooling de objetos, é que ele nos permite obter um "novo" objeto independentemente de ser realmente um objeto novo ou um objeto reciclado.
Os pools de objetos geralmente são usados para objetos que precisam ser criados e destruídos com frequência, como mobs em nossa cena, que geralmente precisam ser criados e destruídos. Quando os mobs são destruídos, em vez de realmente destruí-los, coloque-os em Digite o objeto pool e espere até a próxima vez que precisarmos criar mobs e, em seguida, retire-o do pool de objetos.
7. Quais são os benefícios de usar mipmaps? Em que circunstâncias é usado?
A tecnologia de textura Mipmap é atualmente a maneira mais eficaz de resolver a relação entre a resolução da textura e a distância do ponto de vista. Ela primeiro compactará a imagem em muitas imagens gradualmente reduzidas, como uma imagem 64 64, que gerará 64 64, 32 32 , 16 16 , 7 fotos de 8 , 4 4 , 2 2 , 1 1, quando o pixel precisa ser desenhado na tela é 20 20, o programa usa apenas as duas fotos de 32 32 e 16 16 para calcular o tamanho de 20 20 que será exibida Uma imagem, que é muito melhor e mais rápida do que a imagem calculada usando apenas a peça original de 32*32.
8. Otimização da memória da unidade? Coleta de lixo do GC
Introdução ao mecanismo de gerenciamento de memória da unidade
O Unity adota principalmente o mecanismo de gerenciamento automático de memória. Durante o desenvolvimento, não é necessário informar ao Unity como executar o gerenciamento de memória em detalhes no código. O próprio Unity executará o gerenciamento de memória. Comparado com a necessidade de gerenciar a memória a qualquer momento no desenvolvimento C++, isso tem algumas vantagens, claro, a desvantagem é que você precisa prestar atenção ao crescimento da memória a qualquer momento.
O gerenciamento automático de memória do Unity pode ser entendido como as seguintes partes:
1. O Unity tem dois pools de gerenciamento de memória: memória heap e memória de pilha. A memória de pilha (stack) é usada principalmente para armazenar dados pequenos e de curta duração, e a memória de heap (heap) é usada principalmente para armazenar dados grandes e de longo prazo.
2. Variáveis em unidade serão alocadas apenas na pilha ou memória heap, variáveis do tipo valor são alocadas na pilha e outros tipos de variáveis são alocados no heap.
3. Enquanto a variável estiver ativa, a memória ocupada por ela será marcada como usada, e a memória desta parte ficará no estado alocado.
4. Uma vez que a variável não é mais ativada, a memória ocupada por ela não é mais necessária e essa parte da memória pode ser reciclada no pool de memória para reutilização.Essa operação é a reciclagem de memória. A memória na pilha é recuperada muito rapidamente, a memória no heap não é recuperada a tempo e a memória correspondente ainda será marcada como usada.
5. A coleta de lixo refere-se principalmente à alocação e reciclagem de memória no heap.Unity executará regularmente operações de GC na memória do heap.
Introdução ao GC (coleta de lixo)
Quando o jogo está em execução, os dados são armazenados principalmente na memória. Quando os dados do jogo não são necessários, a memória que armazena os dados atuais pode ser reciclada para reutilização. O lixo de memória refere-se à memória ocupada por dados atualmente descartados, e a coleta de lixo (GC) refere-se ao processo de recuperação de memória descartada para reutilização.
No Unity, a coleta de lixo é considerada parte do gerenciamento de memória. Se os dados descartados no jogo ocuparem uma grande quantidade de memória, o desempenho do jogo será bastante afetado. Neste momento, a coleta de lixo se tornará um grande obstáculo para desempenho do jogo.
9. Como resolver o problema de congelamento causado pela criação e exclusão excessiva de objetos
Pool de objetos, armazenar em cache objetos não utilizados em uma lista de objetos
10. Existem várias maneiras de carregar recursos do Unity, descreva brevemente o pacote de ativos
- Publicar um objeto diretamente no script e atribuí-lo no painel do monitor
- encontre diretamente no programa
- Recurso.carregar
- Digite o recurso no Assetbudle e, em seguida, carregue-o no
assetbundle ao usá-lo, que é o empacotamento do recurso. Ao mesmo tempo, esse formato de recurso é fácil de baixar da Internet.
11. Existem apenas 20 grades no sistema de mochila, e agora há um total de 100 objetos. Exceto pelos 20 exibidos no campo de visão, quais são os outros métodos de processamento? (Nota: não é viável ocultar outros, o pool de objetos deve ter instruções específicas)
- Cada entrada de rolagem é uma instância da mesma predefinição
- Para cache, desde que a entrada de rolagem dentro do campo de visão seja instanciada, a parte além do campo de visão será preenchida automaticamente até a parte inferior do campo de visão.