La mejor respuesta
Bueno, puedo responder la pregunta para Unity .
Allí solía ser un ecosistema próspero para los juegos de Unity en el navegador, especialmente en Facebook. El reproductor web de Unity era lo suficientemente decente para que pudieras obtener buenos gráficos y una velocidad de fotogramas suave (siempre que hicieras muchas tareas de horneado y optimización). Una vez trabajé en un juego / simulación serio que se implementó en el reproductor web, y de alguna manera superó sus límites, así que supe de lo que era capaz.
Todo eso cambió cuando Chrome decidió eliminar el soporte NPAPI, en el que se basa el reproductor web. ¿Qué es NPAPI? Los detalles completos están aquí – NPAPI – Wikipedia ; sin embargo, para abreviar, es un método de desarrollo de complementos para los distintos navegadores convencionales. Sin embargo, NPAPI era antiguo, propenso a problemas de seguridad, y hubo un llamado para usar HTML5 / WebGL, etc., por lo que Chrome decidió eliminarlo.
La mayor diferencia entre NPAPI y el uso de WebGL es que el primero dio acceso casi ilimitado a los recursos de la máquina local (consulte Complementos NPAPI – Google Chrome para obtener más detalles). Para Unity3D WebGL, hay dos grandes problemas:
El primero es que no hay una compilación de código de forma nativa para HTML5 / WebGL. Unity resolvió esto compilando un proyecto en una forma de JavaScript optimizado. Eso es grande , en términos de, ya que la mayor parte del código del motor de Unity tiene que estar ahí para que el proyecto se ejecute, y Unity no es de ninguna manera liviano. En el caso de un reproductor web, la mayor parte del código del motor ya está en la DLL o en el complemento, por lo que puede cargar los datos de la escena y ejecutarlos. Sin embargo, para el reproductor web WebGL, el código del motor debe volver a descargarse de manera constante y no estoy seguro de que haya habido una solución para eso todavía.
Para reducir el tamaño, el código WebGL ha para ser comprimido. Sin embargo, esto significa que el código debe descomprimirse en la computadora del cliente, después de descargarlo , lo que hace que la experiencia sea lenta y torpe.
El problema principal es el de la memoria. A diferencia de NPAPI, cuando ejecuta el reproductor web WebGL, solo puede usar la memoria que tiene el navegador, y eso es francamente fuera de su control. El jugador puede tener más de 100 pestañas abiertas, lo que no deja suficiente memoria para que se ejecute el juego. O tu juego podría ser demasiado grande para los límites de memoria del navegador, lo que provocaría que se bloqueara de manera desagradable, mientras se cargaba, sin un mensaje de error (ese fue el caso hace 2 años cuando lo probé).
Básicamente tienes para conformarse con modelos menos detallados, recursos de juego de peor calidad (sonido, texturas, etc.) para poner algo usando WebGL / HTML5. Franky, dudo que WebGL / HTML5 alguna vez proporcione el nivel de calidad y velocidad de fotogramas que los antiguos complementos NPAPI podían, así que creo que todo el ecosistema de juegos de Unity basados en la web se ha eliminado.
Tenga en cuenta que esto es principalmente para los jugadores Unity3D WebGL; hay otros motores de juegos capaces de ejecutar juegos en WebGL, aunque tienden a estar basados en JavaScript y optimizados para la web. Unity3D es un motor enorme , y la web ya no es un ciudadano de primera clase como plataforma de implementación.
De todos modos, no lo he sido en la escena de Unity durante los últimos dos años, así que espero que alguien me contradiga.
Respuesta
Hay un problema de contenido escondido aquí, así como un problema de ingeniería social, pero estoy voy a hablar de cuestiones técnicas. Podrías escribir un par de libros sobre los dos primeros.
El TL; DR aquí es que realmente no puedes obtener el mismo rendimiento AAA del plataforma web que esperaría de los programas nativos. Hay algunas soluciones, pero son más caras de implementar para los desarrolladores.
1.) Procesamiento de activos y compilación en tiempo de ejecución
A diferencia del método estándar de producción de juegos, un juego web actualmente tiene que compilar su código y acceder a sus activos relacionados en tiempo real. Históricamente, un juego tendría activos y código precompilados que se cargarían y ejecutarían a pedido. La compilación previa de su juego le permite optimizar su juego para que funcione mejor en diferentes situaciones. Parte de esta personalización ocurre cuando se instala (IE, PC / MAC / diferencias de consola) y parte de esto ocurre cuando configura las opciones del juego.
Dado que esta optimización ocurre antes del tiempo de ejecución, puede cargar el juego más rápido (ya sabe lo que debe hacer). Sin embargo, la compilación en tiempo de ejecución significa que debe resolver todo esto en el tiempo de ejecución en lugar de de antemano. Esto suele aumentar los tiempos de carga, entre otras cosas. En teoría, es posible almacenar en caché los datos descargados, pero el navegador (o un usuario desafortunado) puede anular lo que estás haciendo muy fácilmente. Ver # 3.
2.) Mantenimiento del servidor
En un navegador web puede almacenar archivos y activos de forma remota, pero esto representa un problema de mantenimiento para las empresas de juegos: se necesita tiempo y dinero para mantener los servicios del servidor en funcionamiento. Este problema se puede reducir drásticamente instalando el juego una vez en una máquina local y entregando parches periódicamente en lugar de actualizaciones constantes. Ancho de banda = $$$, sin mencionar los profesionales de tecnología de la información necesarios para operar los servidores al máximo tiempo de actividad.
3.) Restricciones / gastos generales del navegador
Ejecutar cualquier cosa en un navegador web significa que debe trabajar no solo con el sistema operativo como requisito del sistema, sino también con la memoria adicional y el tiempo de procesamiento que el navegador utilizará. Por ejemplo, Chrome en este momento está usando ~ 148 MB ¡solo para permitirme responder esta pregunta! Probablemente esto no sea malo para PC o Mac, pero es excelente para tabletas.
Además, la mayoría de los navegadores tienen funciones de seguridad que restringen la forma en que el navegador puede interactuar con su sistema operativo y hardware. Esto significa que ciertos tipos de operaciones de rendimiento que normalmente podrías hacer con un juego precompilado simplemente no son posibles dentro de un navegador (a menudo, acceso directo a la memoria).