Problemas de resolución al portar un juego de Unity a Android

9

Entonces, estoy portando un juego a Android por primera vez en Unity3D. Y me he encontrado con algunos problemas en el camino. Mi problema actual es que la resolución no parece ser correcta, corta los bordes de la pantalla y mis paradas de desplazamiento para desplazar la pantalla hacia la izquierda / derecha ya no están en el lugar correcto.

Después de investigar un poco, mucha gente dice que necesitas hacer que tu juego sea independiente de la resolución para poder ejecutarse en todos los Android / Iphone / Ipad. ¿Es esto cierto? Si es así, ¿cómo hago para hacer eso? Si no es así, ¿cómo puedo ayudar a solucionar la resolución para que cuando realice la transferencia a dispositivos móviles se vea bien?

EDITAR: todavía no tengo lo que necesito, las resoluciones aún no funcionan correctamente, incluso con el código y los trucos que se enumeran a continuación. Necesito alguna forma para que la resolución se ajuste según el dispositivo. Por alguna razón, cuando intento recuperar la resolución de un dispositivo usando el código de Mungoid, devuelve 0x0

Timothy Williams
fuente
1
Tendrá que pasar por cualquier código que asuma una determinada resolución de pantalla y cambiarlo para que pueda tomar la resolución de pantalla actual y hacer algo con ella. Dependiendo de lo que esté haciendo y cómo, no existe una solución única para todos.
Tetrad
En cuanto a los detalles, esta pregunta entra en algunos detalles (hay muchas preguntas sobre esto en el sitio) gamedev.stackexchange.com/questions/51/…
Tetrad
Ahh, entonces, básicamente, lo que dijo Namar: "Asegúrate de colocar todo con proporciones. Por ejemplo, una barra de salud se colocaría en el 80% del ancho de la pantalla con el 10% del ancho de la pantalla para su escala horizontal", entonces, ¿cómo podría arreglar la referencia? áreas específicas en el espacio? El desplazamiento de mi pantalla se basa en áreas específicas del espacio mundial, pero eso parece confundirse con los cambios de resolución.
Timothy Williams
¿Podría ser más específico sobre su problema? Usted dice que la resolución "no parece ser la correcta" y está "todavía apagada", pero la resolución de la pantalla suele ser una propiedad fija del dispositivo. Entonces, no es la resolución la que está mal, sino la forma en que se procesa en la pantalla. Si hace suposiciones acerca de cuán ancha y alta es la pantalla, siempre tendrá problemas en diferentes dispositivos y relaciones de aspecto.
Kylotan
Supongo que realmente lo que intento hacer es escribir un código para encontrar la resolución más baja, configurar el juego para eso y escalar todos los objetos en consecuencia. Sé cómo configurar la escala del campo de juego, pero parece que no puedo obtener la resolución del dispositivo. por lo tanto, el juego está "demasiado ampliado", o todo es demasiado grande.
Timothy Williams

Respuestas:

7

Un problema con el que se encontrará con Android es que cada dispositivo diferente tiene su propio tamaño de pantalla, resolución y densidad de píxeles. Si quieres que tu juego se vea idéntico en todos los dispositivos, te espera mucho trabajo y probablemente nunca estés satisfecho con los resultados. O el juego aparecerá extendido en pantallas panorámicas o comprimido en pantallas que no sean de pantalla ancha. Le sugiero que decida qué es realmente importante y deje que todo lo demás se deslice un poco.

Sin capturas de pantalla o conocimiento de cuál es su juego y cómo se ve, todos podemos especular soluciones, pero no tenemos una dirección específica para brindarle asesoramiento específico.

En Unity, puede acceder a las dimensiones de la pantalla actual con la clase Screen : Screen.widthy Screen.height(entre otras propiedades). Luego, puede cambiar la relación de aspecto de la cámara para cambiar lo que es visible en sus pantallas de diferentes tamaños según las dimensiones de la pantalla y sus expectativas personales de lo que debería ser visible.

Si necesita asegurarse de que las pantallas de HUD se escalen correctamente, puede hacerlo cambiando la matriz de transformación de la GUI en función de las dimensiones de la pantalla en cada OnGUI()función. Lo he hecho antes haciendo este simple script y adjuntándolo a cualquier cosa que representara elementos de GUI que quería escalar:

//GUI values in code are assigned based on an 800x600 screen
private var nativeWidth : float = 800.0f;  
private var nativeHeight : float = 600.0f;
private var guiMatrix : Matrix4x4;

function Start () 
{
    var scale : Vector3 = Vector3(Screen.width / nativeWidth, 
                                  Screen.height / nativeHeight,
                                  1.0f);
    guiMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, scale);
}

function GetGUIMatrix() : Matrix4x4
{
    return guiMatrix;
}

Luego, en las OnGUI()funciones reales , configuro la matriz de transformación de inmediato:

function OnGUI()
{
    GUI.matrix = guiScale.GetGUIMatrix();
    /* Everything Else */
}
técnico del caos
fuente
Establecer la relación de aspecto de la cámara en función del ancho y la altura de la pantalla no ayuda, cuando el teléfono está vertical no se muestra en absoluto y cuando el teléfono está horizontal muestra exactamente lo mismo que antes. El juego se divide en tres secciones, se desplaza suavemente entre las secciones con el dedo (como en Angry Birds), aquí hay una imagen de cómo se supone que debe verse el lado izquierdo. Y el medio . Aquí está el lado izquierdo cuando mi teléfono se sostiene verticalmente ,
Timothy Williams
Y aquí está horizontalmente . Espero que estas imágenes puedan ayudar, esta es la primera vez que transfiero de Unity a Android, o incluso hago un juego de Android. Estoy un poco perdido.
Timothy Williams
A juzgar por (mi interpretación de) sus explicaciones y sus imágenes, el problema no es la resolución; su cámara no está en una ubicación que posiblemente pueda mostrar todo lo que desea en una pantalla pequeña. Reduce tus niveles o mueve tu cámara hacia atrás para mostrar más o algo. Sugeriría configurar la ventana del juego en un tamaño mucho más pequeño para representar el tamaño de un dispositivo real en lugar del tamaño de 1230x530ish que tiene ahora para que pueda tener una idea de lo que verá cuando lo empuje.
chaosTechnician
El problema es que ya he alejado la cámara de manera sustancial. Si este problema persiste, ¿cómo puedo explicar con precisión varias pantallas y tamaños y modificarlo?
Timothy Williams
@TimothyWilliams, probablemente puedas resolver algo eligiendo una resolución mínima (800x600 o algo así) con la que funcione tu juego. Luego, use Screen.widthy .heighten conjunto con Camera.fieldOfViewy Camera.aspectpara reproducir la misma vista en tamaños de pantalla arbitrarios. Solo requeriría algo de trigonometría para determinar específicamente cómo hacerlo.
chaosTechnician
0

podría intentar algo como lo siguiente y aplicarlo. Supongo que un dispositivo móvil solo debería devolver una resolución.

function Start()
{
    var resolutions : Resolution[] = Screen.resolutions;
    // Print the resolutions
    for (var res in resolutions) {
        print(res.width + "x" + res.height);
    }
    // Switch to the lowest supported fullscreen resolution
    Screen.SetResolution (resolutions[0].width, resolutions[0].height, true);
};

También eche un vistazo aquí para obtener más información sobre Screen in unity http://unity3d.com/support/documentation/ScriptReference/Screen.html

Mungoid
fuente
Esto no me ayudó, la resolución aún está apagada.
Timothy Williams,
Devuelve "0x0" en mi Android por alguna razón ...
Timothy Williams