¿Por qué es fácil comenzar con el motor de juego Unity pero difícil de dominar? Por qué
¿Por qué es tan fácil empezar?
Vista 1:
Basta con mirar la documentación y los vídeos tutoriales en el sitio web oficial para descubrirlo. Después de ver algunos vídeos y ejemplos, los principiantes pueden crear algo reproducible que otros motores comerciales similares no pueden. La estructura objeto + componente y el método de edición WYSIWYG reducen el umbral para principiantes al nivel más bajo.
Vista 2:
1. Colgar un componente de script en el objeto de renderizado puede controlar la lógica del objeto. Una vez que aparece el script basado en MonoBehaviour, solo quedan las interfaces de inicialización (Awake, Start) y actualización (FixedUpdate). Los principiantes no necesitan considerar cuestiones como el marco del programa en absoluto, simplemente pueden completar los espacios en blanco. Se parece mucho a jugar juegos flash en los primeros días.
2. El editor es muy potente. El modo de edición WYSIWYG se puede pausar en cualquier momento, ejecutar la lógica del juego en un solo cuadro y proporcionar depuración de escenas y juegos en tiempo real en múltiples ventanas. efectos. Puede ver los valores actuales de todas las variables en tiempo real en el panel del componente del script, lo cual es muy conveniente para depurar la lógica del juego.
El motor 3.3D tiene funciones completas. En comparación con el motor 3D que hemos estado investigando durante 5 o 6 años, todavía está muy por detrás. Además de admitir varios canales de renderizado hacia adelante y hacia atrás y varios efectos posteriores al renderizado, también tiene middleware comercial integrado, como la cocción de mapas de luz basada en Beast y la eliminación de oclusiones basada en Umbra. Ya sabes, solo comprar este middleware cuesta cientos de miles de yuanes, por lo que para un principiante en 3D, no es difícil crear efectos 3D geniales. Aunque el efecto de renderizado puede no ser tan bueno como el de Unreal y Crying, U3D es gratuito en China. Además, U3D es básicamente una plataforma móvil y los efectos 3D actuales son suficientes.
4. Los demás componentes del juego también son muy ricos. Existe un sistema de física basado en PhyX. Es muy fácil para ti hacer juegos como pájaros locos y cortar la cuerda. Además, hay un sistema de navegación basado en NavMesh, un sistema de sonido musical (el antiguo desarrollador de FMOD produce efectos de sonido), etc.
5. Buen ecosistema de comunidad de desarrolladores. El mayor beneficio de Unity es que ha establecido una tienda de activos, donde los desarrolladores de UNITY de todo el mundo pueden vender sus códigos, componentes y recursos artísticos y compartir sus experiencias. Por tanto, el coste de aprendizaje se reduce considerablemente.
6. Publique en varias plataformas con un solo clic, incluidos IOS, Andriod, WP, páginas web, Windows, Mac, etc. Si no desea acceder a bibliotecas relacionadas de otras plataformas (como compras dentro de la aplicación, etc.), casi no necesita aprender conocimientos de programación relacionados con la plataforma (Object-C, Java, etc.). ).
7. Dé un ejemplo para demostrar que Unity es fácil de usar. Cuando comencé a aprender Unity, dediqué un mes y medio en mi tiempo libre a hacer un juego de empujar monedas y ponerlo. en la Appstore. Básicamente gana varios miles de yuanes al mes. Envíame un enlace, no un anuncio, solo una explicación de lo que puedes hacer con Unity en un mes y medio de tu tiempo libre: Clown Circus en iTunes App Store.
¿Por qué Unity es tan competente?
Punto de vista 1:
1. Si los scripts basados en MonoBehaviour se utilizan de manera demasiado conveniente, habrá grandes riesgos arquitectónicos. No puedes evitarlo. El componente A hace referencia al componente B, el componente B hace referencia al componente A... este proyecto es un desastre. Por supuesto, otros motores y otros lenguajes también tienen este problema, pero la clase MonoBehaviour debe utilizar algunas características de UNITY, por lo que para diseñar una arquitectura MVC robusta, es necesario resistir muchas tentaciones y evitar desvíos.
2. Según el script MonoBehaviour, el orden de inicialización de los componentes no puede ser claro. Este error también se menciona en la respuesta.
3. El código subyacente no es de código abierto, especialmente los artículos que se venden en la tienda de activos. Los desarrolladores también están acostumbrados a empaquetarlo con dll. Por lo tanto, algunos requisitos de modificación subyacentes no se pueden cambiar, lo que a veces resulta un dolor de cabeza.
No se puede decir que el problema de GC de 4.C# sea culpa de Unity. Los desarrolladores de C/C++ se volverán sensibles a la memoria durante el trabajo a largo plazo, mientras que los desarrolladores de C# serán mucho más débiles, pero el juego resulta ser una aplicación sensible a la memoria.
Por lo tanto, los desarrolladores deben ser muy sensibles al tiempo de asignación de memoria de C #; de lo contrario, se producirán retrasos debido a la GC frecuente. Preste especial atención a la pequeña asignación de memoria durante cada actualización de cuadro. En este sentido, debemos hacer un buen uso de las herramientas de análisis de rendimiento y memoria propias de UNITY.
5.Unity3d es un motor 3D después de todo. Al fin y al cabo, el conocimiento de los gráficos 3D es muy exigente. Para trabajar en un proyecto en profundidad, es necesario tener un conocimiento profundo del conocimiento 3D. Por lo tanto, al desarrollar algunos proyectos a gran escala, los principiantes suelen tener diversas necesidades y preguntas sobre el 3D. Los funcionarios de Unity se sentirán avergonzados si no los tienen o no pueden encontrarlos en Asset Store.
6. ¡El mayor escollo! En el momento de la publicación, iOS encontró una excepción de tiempo de ejecución relacionada con la compilación de AOT. En pocas palabras, Unity usa mono para compilar C# multiplataforma, pero en la plataforma iOS, Mono se ejecuta en modo AOT completo, por lo que el motor JIT no se puede usar, lo que genera esta excepción. Por lo tanto, a menudo sucede que los juegos funcionan bien en PC y Andriod, ¡pero son secuestrados cuando se ejecutan en la plataforma iOS! Consulte /guides/IOs/advanced_topics/limits/#. net C2 .A0 API C2 .
7. Como ejemplo para demostrar la competencia de Unity, el proyecto Unity de nuestra empresa tardó aproximadamente 8 meses en ingresar a la Appstore y se estima que tardará un año en salir. ....
Vista 2:
De hecho, cualquier motor comercial que pueda usarse para crear juegos geniales y de alta gama es difícil de dominar. Esto se debe a la dificultad del motor. Determinado por la profundidad funcional y la versatilidad. Un motor que integra innumerables middleware empresarial, incluido el sistema de animación, GUI, sistema de iluminación, búsqueda de caminos, física y otras partes, cada parte debe ser dominada por el usuario. Desde esta perspectiva, unidad y falta de autenticidad son básicamente la misma cosa.
Entonces, ¿cuáles son los obstáculos únicos de Unity?
1. Secuencia de ejecución del script: MonoBehavior es el núcleo del sistema de componentes de Unity. Todas las funciones de desarrollo eficientes y fáciles de usar no se pueden mostrar sin esta clase. Sin embargo, controlar el orden de ejecución de los scripts de múltiples componentes siempre ha sido un dolor de cabeza. Los usuarios que no entienden esto pueden fácilmente atascarse en ocultar errores.
2. La estructura funcional del componente brinda a todos más control, pero no puede distinguir bien las responsabilidades de los diferentes miembros del equipo. En comparación con el enfoque de Unreal de dividir la programación en C++, UnrealScript y Kismet, Unity permite a cada desarrollador ver el código fuente del script y realizar modificaciones cuando sea necesario. Es muy conveniente para los desarrolladores de lobos solitarios, pero si la lógica de un juego puede estar restringida por scripts, configuraciones de parámetros preestablecidos y asociaciones de referencias de escenas al mismo tiempo, entonces el mantenimiento será muy confuso y será difícil detectar problemas en el primer lugar. Separar responsabilidades.
3. Los problemas de eficiencia causados por la asignación de memoria y la recolección de basura son difíciles de entender para los principiantes. Una característica importante de Unity es que para permitir que todo el motor llegue a una audiencia más amplia, muchos métodos de uso complejos se ocultan deliberadamente. Por ejemplo, la recolección automática de basura está diseñada para permitir que los usuarios que no comprenden la asignación de memoria la utilicen. Pero los usuarios un poco más avanzados descubrirán rápidamente que la recolección extensiva de basura en tiempo de ejecución puede ralentizar las cosas y convertirse en un obstáculo necesario para comenzar. Si puede decirles a los usuarios en la documentación oficial qué operaciones asignarán memoria, la situación mejorará mucho.
4. Las funciones se repiten muy rápidamente, lo que genera muchos flujos de trabajo inmaduros e imperfectos. Esto no es un inconveniente. Después de todo, muchos usuarios pueden utilizar nuevas funciones interesantes por primera vez. Eso sí, si eres el director técnico de un proyecto comercial, hay que tener cuidado. En términos generales, pasará al menos un año antes de que las funciones lanzadas oficialmente sean más estables y aplicables que complementos similares de terceros en la tienda de activos.
En términos generales, debido a su excelente escalabilidad, estos problemas no son fatales. Siempre hay gente que fabrica excelentes herramientas para compensar las deficiencias de este motor. Y con su usabilidad incomparable, la dirección técnica general de Unity es muy exitosa.