¿Trabajar con resolución fija?

Yerboth

Hola artemaníacos, estoy preparando una alfa/demo para mi juego y empezando a hacer alguna build de prueba me empezaron a pasar cosas raras.

Resulta que al jugar tenía un campo de visión más grande, por lo que mis enemigos programados con un rango de visión en el que empiezan a atacarte justo cuando aparecen en pantalla, se veían desde más lejos. Aunque tampoco se les podía atacar porque tengo unas colisiones para que las balas no vayan más allá del límite de la cámara, ahora ese límite era más pequeño y veía las balas chocar con una pared invisible.. un desastre.

Mirando las opciones de la build me di cuenta que tomaba la resolución nativa, mientras que yo lo he programado todo para jugar a 720p, al ser todo más pequeño se veía desde más lejos y la jugabilidad se me iba a la verga por lo que comentaba antes.

La primera solución y que seguro voy a usar para el alfa es poner la build a una resolución fija de 720p así será la única resolución posible y todo funciona perfecto.
Lo malo de esto es que los menús se ven enormes, incluso el logo del principio de "Made in Unity" se ve borroso xD

¿Cuál sería la solución definitiva? se me ocurren varias cosas pero no sé si son viables o si sería correcto...
La primera es adaptar el tamaño de la cámara y acercarla más a mayor resolución, si encontrara una formula mágica para hacer un cálculo entre la resolución y el tamaño sería maravilloso, pero no tengo claro que vaya a saber implementar esto xD

Otra es aplicar la resolución nativa a toda la build pero luego en los niveles cambiarla a 720, esto ni siquiera sé si se podría hacer.

También he pensado que estoy haciendo el juego con una resolución panorámica pero ¿y si alguien lo juega en una pantalla cuadrada? ahí no habría manera porque los enemigos horizontalmente te verían a ti antes que tú a ellos y eso si que no se me ocurre como solucionarlo.

¿Se os ocurre algo? ¿Cómo se hace esto normalmente? Igual debería currarme más el script de los enemigos para que de alguna manera sepan cuando están dentro de la cámara en lugar de funcionar a radios fijos?

carra
#1Yerboth:

¿y si alguien lo juega en una pantalla cuadrada?

No creo que a estas alturas vayan a haber muchos con pantalla 4:3. Y si fuera así seguramente es un PC tan antiguo que no podrá con Unity. De todas formas siempre lo podrían jugar en ventana. Y si es en pantalla completa puedes dejar bordes negros para forzar el 16:9.

#1Yerboth:

Resulta que al jugar tenía un campo de visión más grande, por lo que mis enemigos programados con un rango de visión en el que empiezan a atacarte justo cuando aparecen en pantalla, se veían desde más lejos.

Si el gameplay depende de la resolución, yo te recomendaría que sí lo hagas con resolución fija. Si después la quieres reescalar hazlo sin suavizado para que no se vea borroso.

1 respuesta
Yerboth

#2

Si el gameplay depende de la resolución, yo te recomendaría que sí lo hagas con resolución fija. Si después la quieres reescalar hazlo sin suavizado para que no se vea borroso.

Más bien el gameplay depende de lo que se vea o no en pantalla, que una torreta empiece a disparate sin que la estés viendo sería injusto, lo mismo con los que se lanzan hacia tí, si se lanzan antes de que los veas serían imposible de esquivar.

Investigaré lo del rescalado porque creo que será lo mejor, y si no siempre puedo hacer un trigger con el tamaño exacto de la cámara para que los enemigos sepan cuando están en pantalla.

Buscaré información de cómo lo hacen otros juegos a ver qué se me ocurre. Parece una gilipollez pero estoy un poco en blanco xD

r2d2rigo

Aqui tienes un problema de game design.

Que el juego funcione en cualquier resolucion nativa es no negociable. Ni bandas negras, ni reescalado, ni chapuzas para justificar el eS qUe El JuEgO sOlO fUnCiOnA aSi.

Lo que tienes que hacer es que un mayor campo de vision no afecte al gameplay:

  • que los enemigos solo puedan dispararte desde una distancia fija que este ajustada a los margenes de la pantalla del aspect ratio estandar.
  • si que tu veas a los enemigos desde mas lejos supone una ventaja en determinadas resoluciones, a;ade niebla de guerra u otro efecto que la elimine.
2 respuestas
Yerboth

#4

que los enemigos solo puedan dispararte desde una distancia fija que este ajustada a los margenes de la pantalla del aspect ratio estandar.

Creo que esto es lo que necesito, ajustar la distancia a lo que se esté viendo según la resolución.

Pero pienso por ejemplo en un MOBA donde la cantidad de mapa que ves tiene que ser la misma para no tener ventaja, pero tú puedes elegir la resolución que quieras y solo afecta a la UI y los menús. ¿Cómo hacen esto? ¿Ajustando la cámara a la resolución?

Luego pienso que me estoy flipando y que un juego más retro tipo Metal Slug que sería algo más parecido a lo que quiero, realmente si usa una resolución fija de pantalla cuadrada y si juegas en panorámico bandas negras y a pastar xD

Aunque ajustar a los enemigos sería fácil tampoco quiero que una resolución más grande te enseñe más del escenario, ya que por ejemplo en el plataformeo te da más ventaja ver antes el obstáculo, no sé si me explico.

Voy a descargarme esta tarde plataformas indies que tenga en Steam y a ir probando distintas resoluciones a ver cómo se adaptan.

carra
#4r2d2rigo:

Lo que tienes que hacer es que un mayor campo de vision no afecte al gameplay

Ojo, un campo de visión mayor o menor siempre afecta algo al gameplay. No juegas igual si ves que un poco más adelante te vas a encontrar una torreta más, o un precipicio, o una puerta... que si no sabes lo que habrá.

De todas formas, en un juego tipo pixel art como este yo vería más justificable el reescalado (siempre manteniendo las proporciones, claro). Si fuera otro estilo gráfico, entonces como dice r2d2rigo podría ser un poco chapuza.

1
puntocom

Para el tema de la interfaz, mira que el Canvas que estás utilizando tenga el componente "Canvas Scaler" y que esté el "UI Scale Mode" en "Scale With Screen Size" y con la resolución de referencia que has utilizado, tendrás que toquetear unas cuantas cosas de la interfaz, pero de esta manera se adaptará a cada resolución adecuadamente.

Para el otro tema, creo que para 2D usar una "Pixel Perfect Camera" te ayudará, míralo a ver, creo que aquí explican un poco:
https://blog.unity.com/technology/2d-pixel-perfect-how-to-set-up-your-unity-project-for-retro-8-bits-games

1 respuesta
Yerboth

#7 gracias, el tema de la interfaz ya lo estoy adaptando para que se escale y queda bien, además el juego no tiene interfaz mientras juegas, es solo para menús.

La pixel perfect camera la tengo puesta desde el principio, ahora estoy con movidas porque se pelea con Cinemachine por el control de la cámara y a veces me deja cambiar el tamaño y otras no, no termino de entender la diferencia, en todas las cámara virtuales tengo el componente de Cinemachine pixel perfect que se supone que lo arregla pero igual a veces no funciona.

Si consigo que me deje modificar el tamaño de la cámara virtual siempre podré adaptarla para que siempre se vea lo mismo sea cual sea la resolución.

1
Yerboth

Después de una tarde dandome cabezazos con Unity ya entiendo más el problema aunque sigo sin más solución que poner una resolución fija.

El tema es que al utilizar el componente pixel perfect camera, este fuerza el tamaño de la cámara (orthographic size) para que solo utilices tamaños donde los pixeles sean perfectos.

Si por ejemplo pongo el juego a 720p y en mi cámara virtual le digo que quiero un tamaño de 7, la pixel perfect determina que el tamaño más cercano donde los píxeles son perfectos es 7.2

Pero si lo pongo a 1080 el 7.2 ya no es un tamaño válido y me obliga a dejarlo en 10.8 o 5.3, con lo cual el campo de visión cambia.

Todo esto depende de los valores que tenga en la pixel perfect camera, sobretodo el pixel per unir, pero aquí hay que utilizar el mismo que en los assets para no perder nitidez.

Ahora veo que poniendo el PPU a 1 sí que se permiten todos los tamaños a cualquier resoluciónprácticamente, pero esto supondría que todo se vuelve gigante y tener que volver a ajustar toda la física y sobre todo los sistemas de partículas que no son pocos xD

Por lo pronto voy a terminar la build con una resolución fija de 720p y valoraré cuánto me llevarían los ajustes cambiando el PPU de todo a 0.

Si alguien que haya trabajado con pixel perfect camera en Unity se le ocurre alguna otra solución que me diga por favor xD

Usuarios habituales

  • Yerboth
  • puntocom
  • carra
  • r2d2rigo