Hola a todos! tengo el siguiente problema, estoy intentando obtener todas las resoluciones que admite el monitor (que creo que es con Screen.resolutions), para poder generar las distintas opciones en el menu del juego y que el player pueda cambiar a la resolucion que quiera. Pongo el codigo que viene en la documentacion para probar...
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void Start() {
Resolution[] resolutions = Screen.resolutions;
foreach (Resolution res in resolutions) {
print(res.width + "x" + res.height);
}
Screen.SetResolution(resolutions[0].width, resolutions[0].height, true);
}
}
y resulta que solo me escribe por consola una resolucion 640 x 480.¿He entendido mal para lo que sirve el Screen.resolutions o es que hago algo mal? He estado mirando en documentacion, si en los parches de la ultima version de Unity, que es la que tengo, habia algun bug corregido referente a esto, he mirado por el foro (preguntas antiguas)... etc pero no he encontrado nada Alguien puede orientarme. Espero vuestra respuesta, un saludo y gracias de antemano.
He probado el codigo, desde el editor y desde un build, y ocurre lo mismo.
¿Estas trabajando sobre Windows?Hace un tiempo tuve un problema similar, si encuentro como lo resolví te paso la referencia, pero era una tontería!..
Cita de: francoe1 date=1455660256" data-ipsquote="" data-cite="francoe1" class="ipsQuote¿Estas trabajando sobre Windows?Hace un tiempo tuve un problema similar, si encuentro como lo resolví te paso la referencia, pero era una tontería!..
Si trabajo desde Windows. Ojalá y lo encuentres porque no se me ocurre la manera de solucionarlo. Gracias por contestar a los dos, un saludo
He puesto la pregunta en el foro oficial. A ver si me contestan y comento la solucion. Saludos
sospecho que es por como estas manejando el array Resolution
Cita de: yugosama date=1456025251" data-ipsquote="" data-cite="yugosama" class="ipsQuotesospecho que es por como estas manejando el array Resolution
Puedes ser algo más claro de cual es tu sospecha?... porque el codigo que utilizo es el que viene en la documentación oficial de Unity (no hay nada cambiado)... y hasta donde yo llego no parece mal utilizado.... pero a saber!Ruego por favor me aclares él por qué de tú sospecha para ver si así averiguamos la causa del problema. Un saludo y gracias por contestar
Es PC, Android, ??
Cita de: iRobb date=1456145218" data-ipsquote="" data-cite="iRobb" class="ipsQuoteEs PC, Android, ??
pc
Te va a devolver esa resolución en el editor. Si le das a Build & Run verás como al ejecutarlo te da las correctas.
Cita de: iRobb date=1456213710" data-ipsquote="" data-cite="iRobb" class="ipsQuoteTe va a devolver esa resolución en el editor. Si le das a Build & Run verás como al ejecutarlo te da las correctas.
Parece que es asi. Es como lo de cambiar las resoluciones en tiempo de ejecucion desde el editor, no funciona pero en la build si. Lo raro es que a kaito tampoco le iba en la buid... Y ya que estoy con este tema... qué tengo que tener en cuenta para poder posicionar los text de UI mediante su "Transform" para que queden bien posicionadas mediante codigo? Me he pegado una hora probando y no consigo posicionarlas donde yo quiero y que al escalarse la Screen o cambiar la resolucion, se adapte la posicion de esos text UI al nuevo tamaño de la pantalla. Mi idea es rescatar del array resolution[] todas las resolution que tenga el monitor y que mediante codigo aparezcan los text y toggle correspondientes y posicionados. Y que no se desajusten en su posicion cuando el tamaño de la pantalla se cambie.Algun consejo por favor...
Pues yo no lo hago así basándome en las posibles resoluciones.Yo creo un panel para todo el Canvas y subpaneles que posiciono con sus anchors. Los objetos UI dentro de los subpaneles también con anchors. Los text con el best fit activado siempre.
Tenes que fijarte en las opciones del Canvas, existe una manera (http://docs.unity3d.com/Manual/script-CanvasScaler.html (http://docs.unity3d.com/Manual/script-CanvasScaler.html)) de resolver estos problemas de múltiples resoluciones y aspec ratio, te recomiendo siempre utilizar la resolución mas alta que tu juego dispondrá, ya que esta función esta hecha para funcionar de esa manera.
Screen.SetResolution(resolutions[0].width, resolutions[0].height, true);
se lo digo, o se lo dice alguien? Suponiendo que no sea eso, podría ser que la estructura de Screen o de Resolution te esté devolviendo la activa en ese momento, no todas las disponibles...
No, pero es cierto que devuelve solamente una en el Editor, y como dije las correctas en Build. El print de su código las mostraría todas.
Gracias de nuevo por contestar.
francoe1 ya tenia en cuenta y activa la opcion
"Scale With Screen Size" en el canvas. Y lo que dice iRobb es practicamente lo que yo tambien hago (si es que he entendido bien a lo que se refiere). Pero el problema viene cuando tengo que construir text y toggles en tiempo de ejecucion y posicionarlos dentro de ese Canvas. A ver si consigo explicarme. Ahora mismo tengo varias opciones de resolucion creadas desde el inspector, en un panel que está dentro del Canvas y funciona perfectamente. Para que el jugador pueda cambiarlas a su antojo desde el menu.Pero si yo no se cuantas resoluciones me voy a encontrar, (ya que segun el monitor soporta mas o menos y pueden diferir entre monitores), debo crear todas las opciones de resolution de forma digamos "abstracta". Por eso creo un array de Resolutions que contendría todas las que soporte el monitor, de ahí el:Resolution[] resolutions = Screen.resolutions;
Pero esto se toma cuando el jugador inicia el juego, y debo ser capaz de posicionar los toggles que necesite para cada resolucion que contenga el array resolution. Digo solo toggle porque ya llevan dentro un Text para imprimir que resolucion corresponde a ese toggle. El caso es que he estado haciendo un monton de pruebas y creo que ya se como conseguirlo de una manera bastante sencilla una vez esté programado... y ademas cualquiera que no sepa nada de programación podría utilizarlo sin tener que complicarse la vida, pero me hace falta saber como puedo acceder a las variables (Width y Height) de los Rect Transform. Si es que se puede...He estado mirando en la interface y no parece que se pueda trabajar con esas variables desde script, solo desde el inspector. Y necesito poder acceder a ellas y modificarlas desde script. Alguien me puede orientar ... Saludos
He pasado por todo eso antes, y el nuevo UI no es sencillo de entender a la primera.Para acceder al widht/height utiliza el sizeDelta del RectTransform. Para posicionarlo usando el RectTransform, utiliza el anc***dPosition del rt. Cuidado que ese valor, y es ahora donde entramos en la complicación, es dependiente del anchor y del sizeDelta. Si no lo entiendes por el post, lo verás claro cuando lo pruebes.Pero no deberías fijarte en la resolución o dependerlo de ella. No es necesario.
Cita de: iRobb date=1457112518" data-ipsquote="" data-cite="iRobb" class="ipsQuoteHe pasado por todo eso antes, y el nuevo UI no es sencillo de entender a la primera.Para acceder al widht/height utiliza el sizeDelta del RectTransform. Para posicionarlo usando el RectTransform, utiliza el anc***dPosition del rt. Cuidado que ese valor, y es ahora donde entramos en la complicación, es dependiente del anchor y del sizeDelta. Si no lo entiendes por el post, lo verás claro cuando lo pruebes.Pero no deberías fijarte en la resolución o dependerlo de ella. No es necesario.
Ok. perfecto el sizeDelta es lo que necesitaba saber. Gracias iRobb Voy a probar algunas cosilla y cuando tenga el script listo lo subo. Saludos
He estado probando unas cosas como dije, pero me han surgido algunas complicaciones y necesito poder utilizar el scripting debugging en una build.He activado las dos casillas en Build settings (Development build y scripting debugging). Version de Unity 5.3.2p4 (lleva un parche). Y utilizo el VStudio que viene con Unity.Una vez he iniciado el juego compilado, ejecuto en el VStudio "Debug->Attach to process..." y selecciono el juego dandole a attach posteriormente para confirmar. El caso es que parece que se attached al juego pero los puntos de interrupcion me salen en blanco y me dice algo asi como: the breackpoint will not currently be hit. No symbols have been loaded for this document. Y claro está!!!! no se detiene en ninguno de ellos cuando el codigo pasa por ahí... Alguien me puede decir como hacerlo correctamente o alguna pagina con informacion acerca de como hacerlo?? He estado mirando y no he encontrado nada. Un saludo EDITO: Acabo de probar con el monodevelop y si funciona pero con el visualStudio no. No se si es que hago algo mal o es que no se puede hacer...
tomando en cuenta que MD es de Mono .NET y VS de MS .NET, talvez tienes que configurar algo para la compatibilidad... talvez la versión de framework en VS? o conectar las DLL de Unity? no se... no uso VS jajaja
En el about de Unity, te aparece que tienes instalada las VS Unity Tools v2.2.0.0 ?
Cita de: iRobb date=1458072651" data-ipsquote="" data-cite="iRobb" class="ipsQuoteEn el about de Unity, te aparece que tienes instalada las VS Unity Tools v2.2.0.0 ?
Si me aparece que la tengo instalada. La v2.2.0.0
Ahora ya, ponte la 5.3.3 y a ver si te pasa lo mismo. A mi no me ha pasado nunca lo de impedirme marcar un breakpoint.
Cita de: iRobb date=1458241334" data-ipsquote="" data-cite="iRobb" class="ipsQuoteAhora ya, ponte la 5.3.3 y a ver si te pasa lo mismo. A mi no me ha pasado nunca lo de impedirme marcar un breakpoint.
Bueno realmente si me marca los breakpoints, pero aparecen de color blanco y la ejecucion del juego no se detiene cuando el codigo pasa por los breakpoint.Voy a actualizar a la 5.3.3 y ya comento en unos dias.... acerca de este problem.Saludos y gracias por la ayuda