Melhor resposta
Bem, eu posso responder à pergunta para Unity .
Há costumava ser um ecossistema próspero para jogos Unity no navegador, especialmente no Facebook. O webplayer Unity era decente o suficiente para você obter bons gráficos e uma taxa de quadros suave (desde que você tenha feito muitos ajustes e otimização). Certa vez, trabalhei em um jogo / simulação sério que foi implantado no jogador da web e meio que ultrapassou seus limites, então eu sabia o que era capaz.
Tudo mudou quando o Chrome decidiu matar o suporte NPAPI, no qual o reprodutor da web é baseado. O que é NPAPI? Os detalhes completos estão aqui – NPAPI – Wikipedia – no entanto, para resumir, é um método de desenvolvimento de plug-in para os vários navegadores principais. No entanto, NPAPI era antigo, sujeito a problemas de segurança e houve uma chamada para usar HTML5 / WebGL etc., então o Chrome decidiu eliminá-lo gradualmente.
A maior diferença entre NPAPI e usar WebGL é que o primeiro forneceu acesso quase ilimitado aos recursos da máquina local (consulte Plug-ins NPAPI – Google Chrome para obter detalhes). Para Unity3D WebGL, existem dois grandes problemas:
O primeiro é que não há compilação de código nativamente para HTML5 / WebGL. O Unity resolveu isso compilando um projeto em uma forma de JavaScript otimizado. Isso é grande , em termos de tamanho de arquivo, já que a maior parte do código do mecanismo do Unity precisa estar lá para que o projeto seja executado, e o Unity não é nada leve. No caso de um web-player, a maior parte do código do motor já está na DLL ou no plugin, então você pode simplesmente carregar os próprios dados da cena e executá-los. No entanto, para Webplayer WebGL, o código do mecanismo deve ser baixado novamente de forma consistente, e não tenho certeza se existe uma solução para isso ainda.
Para reduzir o tamanho, o código WebGL foi para ser compactado. No entanto, isso significa que o código deve ser descompactado no computador do cliente, após baixá-lo , o que torna a experiência lenta e desajeitada.
O problema do assassino é a memória. Ao contrário do NPAPI, quando você executa o WebGL player, você só pode usar a memória que o navegador tem, e isso é francamente fora de seu controle. O jogador pode ter mais de 100 guias abertas, não deixando memória suficiente para o jogo ser executado. Ou seu jogo pode ser muito grande para os limites de memória do navegador, fazendo com que ele trave de maneira indelicada, durante o carregamento, sem uma mensagem de erro (era o caso há 2 anos quando eu tentei).
Você essencialmente tem para se contentar com modelos menos detalhados, recursos de jogo de baixa qualidade (som, texturas etc.) para colocar algo usando WebGL / HTML5. Franky, duvido que o WebGL / HTML5 forneça o nível de qualidade e taxa de quadros que os antigos plug-ins NPAPI podiam, então acho que todo o ecossistema de jogos Unity baseados na web foi eliminado.
Observe que isso é principalmente para jogadores Unity3D WebGL – existem outros motores de jogos capazes de rodar jogos em WebGL, embora estes tendam a ser baseados em JavaScript e otimizados para a web. Unity3D é um mecanismo enorme , e a web não é mais um cidadão de primeira classe como plataforma de implantação.
De qualquer forma, nunca fui no cenário do Unity nos últimos dois anos, então espero que alguém me contradiga.
Resposta
Há um problema de conteúdo escondido aqui, bem como um problema de engenharia social, mas estou vou falar sobre questões técnicas. Você poderia escrever alguns livros sobre os dois primeiros.
O TL; DR aqui é que você não pode realmente obter o mesmo desempenho AAA do plataforma da web que você esperaria de programas nativos. Existem algumas soluções alternativas, mas são mais caras para os desenvolvedores implementarem.
1.) Compilação em tempo de execução e processamento de ativos
Ao contrário do método padrão de produção de jogos, um jogo da web atualmente precisa compilar seu código e acessar seus ativos relacionados em tempo real. Historicamente, um jogo teria ativos e códigos pré-compilados que seriam carregados e executados sob demanda. A pré-compilação do seu jogo permite que você o otimize para funcionar melhor em diferentes situações. Parte dessa personalização acontece quando você instala (diferenças no IE, PC / MAC / console) e parte disso acontece quando você configura as opções do jogo.
Como essa otimização acontece antes do tempo de execução, você pode carregar no jogo mais rápido (você já sabe o que precisa fazer). No entanto, a compilação em tempo de execução significa que você tem que descobrir tudo isso em tempo de execução, em vez de antes. Isso geralmente aumenta o tempo de carregamento, entre outras coisas. Em teoria, é possível armazenar em cache os dados baixados, mas o navegador (ou um usuário infeliz) pode substituir o que você está fazendo com muita facilidade. Consulte o nº 3.
2.) Manutenção do servidor
Em um navegador da web, você pode armazenar arquivos e ativos remotamente, mas isso representa um problema de manutenção para empresas de jogos – é preciso tempo e dinheiro para manter a manutenção dos serviços de servidor. Este problema pode ser reduzido drasticamente instalando o jogo uma vez em uma máquina local e entregando patches periodicamente em vez de atualizações constantes de streaming. Largura de banda = $$$, sem mencionar os profissionais de tecnologia da informação necessários para operar os servidores em tempo de atividade máximo.
3.) Sobrecarga / restrições do navegador
Executar qualquer coisa em um navegador da web significa que você tem que trabalhar não apenas com o sistema operacional como um requisito do sistema, mas também com a memória adicional e o tempo de processamento que o navegador usará. Por exemplo, o Chrome agora está usando ~ 148 MB apenas para me deixar responder a esta pergunta! Isso provavelmente não é ruim para PCs ou Macs, mas é matador para tablets.
Além disso, a maioria dos navegadores tem recursos de segurança que restringem a forma como o navegador pode interagir com seu sistema operacional e hardware. Isso significa que certos tipos de operações de desempenho que você normalmente faria com um jogo pré-compilado simplesmente não são possíveis em um navegador (geralmente acesso direto à memória).