Unidad: trampas del desarrollo de juegos en 2D

Hay muchos artículos sobre Unity para el recién llegado, pero no quiero repetirme, pero quiero compartir mi experiencia en el desarrollo del primer juego y, más específicamente, hablar sobre lo que me tropecé. Esto les dará la oportunidad a todos ustedes, queridos desarrolladores, de protegerse en el futuro del trabajo no planificado y la pérdida de tiempo. Espero que los desarrolladores de Unity lean este material para mejorar su producto.

imagen

¡Atención , debajo de las capturas de pantalla del gato 16+ !

Como la mayoría de nosotros somos personas técnicas, pondré todo en estantes, moda y trataré de presentar el material lo más brevemente posible, de manera concisa y sin agua.

Desafío


Quería escribir algo de Año Nuevo, simple de entender y de manejar. Como resultado de la discusión con el público objetivo (mi hijo), se decidió que el juego sería así:

  • 2D (ya que es más conveniente jugar juegos 2D en el teléfono)
  • Control con un dedo (a veces un máximo de dos)
  • Time Killer (solo un golpe para no forzar el cerebro)
  • Sistema de logros (para que al menos sea un poco interesante continuar)
  • Caricatura
  • Buena musica
  • Sin internet
  • Android (facilidad de instalación de archivos apk de prueba)


Todo resultó en la idea " Satan Santa dispara venados que interfieren con su bolso" .

mortal klaus

Y entonces todo comenzó ...

1. Bibliotecas de Android de terceros


Problema: pasé dos días buscando el SDK, JDK, NDK y haciendo que Unity funcionara con ellos. En mi máquina antes de Unity, SDK del estudio de Android ya estaba presente, pero no comenzó con ellos, tuve que buscar otra cosa, instalar, probar, buscar de nuevo ... dos días ...

Sugerencia de mejora: sería bueno si el SDK necesario de las últimas versiones se instalara automáticamente durante la instalación de Unity, y si alguien necesita rebajar o actualizar, entonces deje que éste se configure con bolígrafos.

imagen

2. Gráficos vectoriales


Problema: La unidad fuera de la caja no comprende SVG . Incluso todo tipo de marcos JS pequeños como Paper.js simplemente funcionan de manera inteligente con un vector, pero un elefante como Unity no lo hace.

Solución: instalé un paquete beta que parece leer SVG, pero al final lo convierte en un ráster. Aceptable, pero vergonzoso, ¡Unidad!

3. plataforma 2D


imagen

Problema: como puede ver en la captura de pantalla, hay tierra y una bola de nieve. Y esto también es Mesh y Polygon Collider . Es decir, es una superficie que interactúa con objetos y que se puede cambiar en el editor. Entonces, en la versión actual de Unity, no hay herramientas estándar que puedan usarse para simular esto.

Solución:
  1. Puede dibujar un ráster con alfa (menos; editar bien esto es bastante inconveniente)
  2. Puede comprar un complemento que haga esto (menos - gastar dinero)
  3. Puedes escribir el plugin tú mismo (menos: toma mucho tiempo descifrarlo, toma mucho tiempo escribirlo)

Elegí un camino largo pero gratuito;) Si alguien necesita ese complemento, escriba, comparta, diga cómo usarlo, no me importa :)

Por cierto, vi la demostración de la nueva versión beta de Unity, ¡parece que tal cosa aparecerá de inmediato! ¡Gracias por eso, amigos!

Sí, agregaría un panel para crear rápidamente primitivas 2D, círculos allí, cuadrados ... de lo contrario, simplemente no existen, bueno, o tienes que ir al lado de los activos y mirar.

4. Rotación y cuaternión


Problema: un sistema muy complejo de posicionamiento y rotación en 3D, innecesario en juegos 2D.

Solución: solo necesitas entenderlo y aceptarlo, porque un juego 2D es un juego 3D con la coordenada Z = 0. Pero sería bueno simplificar este sistema en modo 2D, camaradas;)

Maté mucho tiempo y casi me rompí el cerebro, tratando de rotar el objeto en la dirección correcta al ángulo correcto, en relación con otro objeto, cuando en otro motor escribí player.a = 45; Sí, y muchos métodos obvios en la versión actual están depicados.

5. Depuración


Problema: para nosotros, principiantes, la posibilidad de depuración solo está disponible en la forma de enviar el valor variable a la consola utilizando el método print () . Los descansos completos son los que pagan. Corríjame aquí, si me equivoco, pero no pude configurar Visual Studio para la depuración de ninguna manera, aunque encontré un video en el que está claro que no es necesario configurar nada, debería funcionar por sí solo. Concluyó que la depuración está disponible en versiones pagas.

Solución: solo uso print () ... y entiendo que depurar un proyecto complejo será un factor decisivo para adquirir una versión paga de Unity. Los vendedores de la empresa triste respeto :(

Resuelto! Gracias a la solicitud de Leopotam, instalé un paquete adicional para el estudio, apareció el botón "Adjuntar a la unidad de depuración" .

6. Toca y haz clic, desliza y mueve


Problema: a pesar de la conveniencia del sistema de entrada de usuario incorporado, la simplicidad de procesar cintas, clics y deslizamientos simples ordinarios no es suficiente. Me gustaría utilizar un método que devuelva las coordenadas de un solo clic / toque para diferentes tipos de dispositivos: un toque y un escritorio con un mouse, por ejemplo.

Solución: tuve que escribir mi capa de clase y ajustar los eventos necesarios.

Quizás dejaré un comentario más sobre el sistema de gestión. Muchas gracias a los desarrolladores de Unity por la entrada universal, pero para los dispositivos táctiles también me gustaría tener controles universales. Por ejemplo, deslízate hacia arriba: únete a Jump, visualiza la cruz y los botones, como en un joystick, etc. Puedes comprar esto en paquetes pagos o, de nuevo, escribirte tú mismo, pasando tiempo en bicicleta.

7. Confusión con coordenadas.


Problema: no puede asignar las coordenadas de clic al objeto y verlo en el lugar correcto, y esto es un poco obvio.

Solución: Primero debe leer la documentación, comprender y utilizar varios métodos para asignar coordenadas:

WorldToScreenPoint ()
ScreenToViewportPoint ()
transform.TransformPoint ()
y otros ...

Explicaré esto porque la distancia en la escena se mide en unidades arbitrarias que no sean un píxel, y además, los objetos tienen un sistema de anidación, respectivamente, el posicionamiento es relativo al padre.

8. Un magro conjunto de controles de UI


Problema: solo los elementos más básicos se entregan de la caja, e incluso entonces hay que jugar con algunos.

Solución: puede contentarse con poco. Por ejemplo, pasé mucho tiempo para hacer que la lista dinámica se desplace. Puedes comprar controles geniales (menos - gastar dinero).

9. Tamaño de archivo APK grande


Problema: cuando se construye un proyecto vacío, su tamaño es de 21.9 MB (23,061,612 bytes)

Solución: necesita ahorrar en todo. Pellizqué archivos mp3, texturas comprimidas, traté de no incluir nada superfluo en el proyecto. Pero cuando se conectaron paquetes adicionales, el tamaño aumentó sin piedad, luchando por cien.

Google Play pide a los desarrolladores que publiquen aplicaciones <100Mb . (22 ya engullido). Existen, por supuesto, mecanismos de división, carga dinámica de recursos, pero somos recién llegados, y nuestro objetivo es aprender lo básico, realizar nuestros sueños preciados y no luchar con los límites del mercado.

10. cirílico


Problema: Después de haber ensamblado un proyecto para la plataforma JS / HTML5 (para pruebas), resultó que simplemente no había textos escritos en ruso.

Solución: debe descargar el archivo de fuente, importarlo a los activos y luego especificar esta fuente importada en la configuración de cada texto.

Esto es de alguna manera muy extraño.

11. Rendimiento físico


Problema: el juego comienza a ralentizarse terriblemente cuando hay colisionadores complejos, cuando se usa el modo continuo para la detección de colisiones , cuando se usan varios sistemas de partículas en una escena, en resumen cuando se usa todo lo que da a los juegos espectaculares y hermosos.

Solución: use solo los colisionadores de círculo y rectángulo primitivos, la detección de colisión solo debe ser discreta , el número de partículas en el sistema de partículas debe establecerse en el mínimo aceptable. Bueno y aún así, no admitir mi error y no usar colisiones dentro del sistema de partículas. El efecto, por supuesto, es hermoso, ya que la sangre fluye por los objetos, pero requiere muchos recursos.

imagen

Naturalmente, todo esto es cierto para los juegos móviles 2D. Pero me gustaría que Unity se desarrolle, use nuevos sombreadores geniales para partículas y para colisiones, y para todo lo demás complejo y hermoso.

Conclusión


Hubo, por supuesto, otras trampas, pero estas son pequeñas. Hubo ventajas inesperadas, como:

  • Prefabricados
  • Buena documentación y comunidad.
  • Crea automáticamente un colisionador de polígonos usando el canal alfa de un sprite
  • Facilidad de uso de efectos de sonido.
  • Animación muy conveniente en fotogramas clave (con la adición de Anima2D y cinemática inversa)

Pero esta es una historia completamente diferente ...

En cuanto al momento de la tarea, el punto 3 me inhibió mucho (desarrollo de un complemento para modelar la plataforma). Como desarrollador experimentado, evalué el problema por mí mismo y lo califiqué así: 20, 30, 40 (tardes / días libres porque durante el día estoy ocupado con el trabajo principal), donde 20 es optimista y 40 pesimista. Si no fuera por el punto número 3, habría alcanzado 20-30, pero al final pasé unos dos meses. (no, no trabajaba todas las noches, es decir, tenía alrededor de 40).

Si alguien está interesado, diré que tuve que dibujar los gráficos yo mismo, gracias al programa Inkscape . Elegí música exclusivamente con una licencia para uso gratuito.

Tuve que pasar un par de días publicando en Google Play .

Se dedicaron otros dos días a la integración de la publicidad (lo más probable es que no lo veas, solo quería probarlo, aunque el juguete no se consideró comercial)

Sí, se podría haber mejorado mucho, pero quería divertir a mis amigos antes de las vacaciones de Año Nuevo.

No me malinterpreten, esta no es una publicación de relaciones públicas. Sobre todo, quiero que aquellos que hacen que el motor de Unity preste atención a estas deficiencias y, por supuesto, las eliminen (bueno, esto es ideal). Y también quiero ayudar a mis hermanos espirituales a no obtener el mismo rastrillo que yo.

Y si me equivoco en algo, entonces no juzgues estrictamente, ¡comparte tus consejos en los comentarios!

Source: https://habr.com/ru/post/es432946/


All Articles