Como fazer para aparecer poucas resoluções no meu menu de opções.
3 participantes
Página 1 de 1
Como fazer para aparecer poucas resoluções no meu menu de opções.
E ai pessoal tudo bem, estou usando um script do Marcos de Menu de opções para o meu jogo, porem nas configurações de resolução aparecem todas as resoluções suportadas, e isso me traz mais de 20 resoluções, eu queria que aparecessem umas 3 no máximo, as mais altas. Alguém saberia como fazer isso ? sou bem novo na programação.
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using System.Linq;
public class MENU : MonoBehaviour {
public Button BotaoJogar, BotaoOpcoes, BotaoSair;
[Space(20)]
public Slider BarraVolume;
public Toggle CaixaModoJanela;
public Dropdown Resolucoes, Qualidades;
public Button BotaoVoltar, BotaoSalvarPref;
[Space(20)]
public Text textoVol;
public string nomeCenaJogo = "CENA1";
private string nomeDaCena;
private float VOLUME;
private int qualidadeGrafica, modoJanelaAtivo, resolucaoSalveIndex;
private bool telaCheiaAtivada;
private Resolution[] resolucoesSuportadas;
void Awake() {
DontDestroyOnLoad(transform.gameObject);
resolucoesSuportadas = Screen.resolutions;
}
void Start() {
Opcoes(false);
ChecarResolucoes();
AjustarQualidades();
//
if (PlayerPrefs.HasKey("RESOLUCAO")) {
int numResoluc = PlayerPrefs.GetInt("RESOLUCAO");
if (resolucoesSuportadas.Length <= numResoluc) {
PlayerPrefs.DeleteKey("RESOLUCAO");
}
}
//
nomeDaCena = SceneManager.GetActiveScene().name;
Cursor.visible = true;
Time.timeScale = 1;
//
BarraVolume.minValue = 0;
BarraVolume.maxValue = 1;
//=============== SAVES===========//
if (PlayerPrefs.HasKey("VOLUME")) {
VOLUME = PlayerPrefs.GetFloat("VOLUME");
BarraVolume.value = VOLUME;
AudioListener.volume = VOLUME;
} else {
PlayerPrefs.SetFloat("VOLUME", 1);
BarraVolume.value = 1;
}
//=============MODO JANELA===========//
if (PlayerPrefs.HasKey("modoJanela")) {
modoJanelaAtivo = PlayerPrefs.GetInt("modoJanela");
if (modoJanelaAtivo == 1) {
Screen.fullScreen = false;
CaixaModoJanela.isOn = true;
} else {
Screen.fullScreen = true;
CaixaModoJanela.isOn = false;
}
} else {
modoJanelaAtivo = 0;
PlayerPrefs.SetInt("modoJanela", modoJanelaAtivo);
CaixaModoJanela.isOn = false;
Screen.fullScreen = true;
}
//========RESOLUCOES========//
if (modoJanelaAtivo == 1) {
telaCheiaAtivada = false;
} else {
telaCheiaAtivada = true;
}
if (PlayerPrefs.HasKey("RESOLUCAO")) {
resolucaoSalveIndex = PlayerPrefs.GetInt("RESOLUCAO");
Screen.SetResolution(resolucoesSuportadas[resolucaoSalveIndex].width, resolucoesSuportadas[resolucaoSalveIndex].height, telaCheiaAtivada);
Resolucoes.value = resolucaoSalveIndex;
} else {
resolucaoSalveIndex = (resolucoesSuportadas.Length - 1);
Screen.SetResolution(resolucoesSuportadas[resolucaoSalveIndex].width, resolucoesSuportadas[resolucaoSalveIndex].height, telaCheiaAtivada);
PlayerPrefs.SetInt("RESOLUCAO", resolucaoSalveIndex);
Resolucoes.value = resolucaoSalveIndex;
}
//=========QUALIDADES=========//
if (PlayerPrefs.HasKey("qualidadeGrafica")) {
qualidadeGrafica = PlayerPrefs.GetInt("qualidadeGrafica");
QualitySettings.SetQualityLevel(qualidadeGrafica);
Qualidades.value = qualidadeGrafica;
} else {
QualitySettings.SetQualityLevel((QualitySettings.names.Length - 1));
qualidadeGrafica = (QualitySettings.names.Length - 1);
PlayerPrefs.SetInt("qualidadeGrafica", qualidadeGrafica);
Qualidades.value = qualidadeGrafica;
}
// =========SETAR BOTOES==========//
BotaoJogar.onClick = new Button.ButtonClickedEvent();
BotaoOpcoes.onClick = new Button.ButtonClickedEvent();
BotaoSair.onClick = new Button.ButtonClickedEvent();
BotaoVoltar.onClick = new Button.ButtonClickedEvent();
BotaoSalvarPref.onClick = new Button.ButtonClickedEvent();
BotaoJogar.onClick.AddListener(() => Jogar());
BotaoOpcoes.onClick.AddListener(() => Opcoes(true));
BotaoSair.onClick.AddListener(() => Sair());
BotaoVoltar.onClick.AddListener(() => Opcoes(false));
BotaoSalvarPref.onClick.AddListener(() => SalvarPreferencias());
}
//=========VOIDS DE CHECAGEM==========//
private void ChecarResolucoes() {
Resolution[] resolucoesSuportadas = Screen.resolutions;
Resolucoes.options.Clear();
for (int y = 0; y < resolucoesSuportadas.Length; y++) {
Resolucoes.options.Add(new Dropdown.OptionData() { text = resolucoesSuportadas[y].width + "x" + resolucoesSuportadas[y].height });
}
Resolucoes.captionText.text = "Resolucao";
}
private void AjustarQualidades() {
string[] nomes = QualitySettings.names;
Qualidades.options.Clear();
for (int y = 0; y < nomes.Length; y++) {
Qualidades.options.Add(new Dropdown.OptionData() { text = nomes[y] });
}
Qualidades.captionText.text = "Qualidade";
}
private void Opcoes(bool ativarOP) {
BotaoJogar.gameObject.SetActive(!ativarOP);
BotaoOpcoes.gameObject.SetActive(!ativarOP);
BotaoSair.gameObject.SetActive(!ativarOP);
//
textoVol.gameObject.SetActive(ativarOP);
BarraVolume.gameObject.SetActive(ativarOP);
CaixaModoJanela.gameObject.SetActive(ativarOP);
Resolucoes.gameObject.SetActive(ativarOP);
Qualidades.gameObject.SetActive(ativarOP);
BotaoVoltar.gameObject.SetActive(ativarOP);
BotaoSalvarPref.gameObject.SetActive(ativarOP);
}
//=========VOIDS DE SALVAMENTO==========//
private void SalvarPreferencias() {
if (CaixaModoJanela.isOn == true) {
modoJanelaAtivo = 1;
telaCheiaAtivada = false;
} else {
modoJanelaAtivo = 0;
telaCheiaAtivada = true;
}
PlayerPrefs.SetFloat("VOLUME", BarraVolume.value);
PlayerPrefs.SetInt("qualidadeGrafica", Qualidades.value);
PlayerPrefs.SetInt("modoJanela", modoJanelaAtivo);
PlayerPrefs.SetInt("RESOLUCAO", Resolucoes.value);
resolucaoSalveIndex = Resolucoes.value;
AplicarPreferencias();
}
private void AplicarPreferencias() {
VOLUME = PlayerPrefs.GetFloat("VOLUME");
AudioListener.volume = VOLUME;
QualitySettings.SetQualityLevel(PlayerPrefs.GetInt("qualidadeGrafica"));
Screen.SetResolution(resolucoesSuportadas[resolucaoSalveIndex].width, resolucoesSuportadas[resolucaoSalveIndex].height, telaCheiaAtivada);
}
//===========VOIDS NORMAIS=========//
void Update() {
if (SceneManager.GetActiveScene().name != nomeDaCena) {
AudioListener.volume = VOLUME;
Destroy(gameObject);
}
}
private void Jogar() {
SceneManager.LoadScene(nomeCenaJogo);
}
private void Sair() {
Application.Quit();
}
}
jeancvo3- Membro
- PONTOS : 1504
REPUTAÇÃO : 17
Idade : 27
Respeito as regras :
Re: Como fazer para aparecer poucas resoluções no meu menu de opções.
Tente colocar um limite de tamanho para sua array resolucoesSuportadas, no caso 3 e então fazer um loop for para definir os index da sua array resolucoesSuportadas como os ultimos elementos do Screen.resolutions, fazendo isso subtraindo o tamanho da array Screen resolutions por 1 e pelo valor que aumenta (i), isso para não acarretar em erros como: IndexOutOfRangeException.
Talvez seja complicado explicar, mas olhe na prática:
Talvez seja complicado explicar, mas olhe na prática:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
using System.Linq;
public class MENU : MonoBehaviour {
public Button BotaoJogar, BotaoOpcoes, BotaoSair;
[Space(20)]
public Slider BarraVolume;
public Toggle CaixaModoJanela;
public Dropdown Resolucoes, Qualidades;
public Button BotaoVoltar, BotaoSalvarPref;
[Space(20)]
public Text textoVol;
public string nomeCenaJogo = "CENA1";
private string nomeDaCena;
private float VOLUME;
private int qualidadeGrafica, modoJanelaAtivo, resolucaoSalveIndex;
private bool telaCheiaAtivada;
private Resolution[] resolucoesSuportadas = new Resolution[3];
void Awake() {
DontDestroyOnLoad(transform.gameObject);
for(int i = 0; i < resolucoesSuportadas.Length; i++)
{
resolucoesSuportadas[i] = Screen.resolutions[Screen.resolutions.Length-1 - i];
}
}
void Start() {
Opcoes(false);
ChecarResolucoes();
AjustarQualidades();
//
if (PlayerPrefs.HasKey("RESOLUCAO")) {
int numResoluc = PlayerPrefs.GetInt("RESOLUCAO");
if (resolucoesSuportadas.Length <= numResoluc) {
PlayerPrefs.DeleteKey("RESOLUCAO");
}
}
//
nomeDaCena = SceneManager.GetActiveScene().name;
Cursor.visible = true;
Time.timeScale = 1;
//
BarraVolume.minValue = 0;
BarraVolume.maxValue = 1;
//=============== SAVES===========//
if (PlayerPrefs.HasKey("VOLUME")) {
VOLUME = PlayerPrefs.GetFloat("VOLUME");
BarraVolume.value = VOLUME;
AudioListener.volume = VOLUME;
} else {
PlayerPrefs.SetFloat("VOLUME", 1);
BarraVolume.value = 1;
}
//=============MODO JANELA===========//
if (PlayerPrefs.HasKey("modoJanela")) {
modoJanelaAtivo = PlayerPrefs.GetInt("modoJanela");
if (modoJanelaAtivo == 1) {
Screen.fullScreen = false;
CaixaModoJanela.isOn = true;
} else {
Screen.fullScreen = true;
CaixaModoJanela.isOn = false;
}
} else {
modoJanelaAtivo = 0;
PlayerPrefs.SetInt("modoJanela", modoJanelaAtivo);
CaixaModoJanela.isOn = false;
Screen.fullScreen = true;
}
//========RESOLUCOES========//
if (modoJanelaAtivo == 1) {
telaCheiaAtivada = false;
} else {
telaCheiaAtivada = true;
}
if (PlayerPrefs.HasKey("RESOLUCAO")) {
resolucaoSalveIndex = PlayerPrefs.GetInt("RESOLUCAO");
Screen.SetResolution(resolucoesSuportadas[resolucaoSalveIndex].width, resolucoesSuportadas[resolucaoSalveIndex].height, telaCheiaAtivada);
Resolucoes.value = resolucaoSalveIndex;
} else {
resolucaoSalveIndex = (resolucoesSuportadas.Length - 1);
Screen.SetResolution(resolucoesSuportadas[resolucaoSalveIndex].width, resolucoesSuportadas[resolucaoSalveIndex].height, telaCheiaAtivada);
PlayerPrefs.SetInt("RESOLUCAO", resolucaoSalveIndex);
Resolucoes.value = resolucaoSalveIndex;
}
//=========QUALIDADES=========//
if (PlayerPrefs.HasKey("qualidadeGrafica")) {
qualidadeGrafica = PlayerPrefs.GetInt("qualidadeGrafica");
QualitySettings.SetQualityLevel(qualidadeGrafica);
Qualidades.value = qualidadeGrafica;
} else {
QualitySettings.SetQualityLevel((QualitySettings.names.Length - 1));
qualidadeGrafica = (QualitySettings.names.Length - 1);
PlayerPrefs.SetInt("qualidadeGrafica", qualidadeGrafica);
Qualidades.value = qualidadeGrafica;
}
// =========SETAR BOTOES==========//
BotaoJogar.onClick = new Button.ButtonClickedEvent();
BotaoOpcoes.onClick = new Button.ButtonClickedEvent();
BotaoSair.onClick = new Button.ButtonClickedEvent();
BotaoVoltar.onClick = new Button.ButtonClickedEvent();
BotaoSalvarPref.onClick = new Button.ButtonClickedEvent();
BotaoJogar.onClick.AddListener(() => Jogar());
BotaoOpcoes.onClick.AddListener(() => Opcoes(true));
BotaoSair.onClick.AddListener(() => Sair());
BotaoVoltar.onClick.AddListener(() => Opcoes(false));
BotaoSalvarPref.onClick.AddListener(() => SalvarPreferencias());
}
//=========VOIDS DE CHECAGEM==========//
private void ChecarResolucoes() {
for(int i = 0; i < resolucoesSuportadas.Length; i++)
{
resolucoesSuportadas[i] = Screen.resolutions[Screen.resolutions.Length-1 - i];
}
Resolucoes.options.Clear();
for (int y = 0; y < resolucoesSuportadas.Length; y++) {
Resolucoes.options.Add(new Dropdown.OptionData() { text = resolucoesSuportadas[y].width + "x" + resolucoesSuportadas[y].height });
}
Resolucoes.captionText.text = "Resolucao";
}
private void AjustarQualidades() {
string[] nomes = QualitySettings.names;
Qualidades.options.Clear();
for (int y = 0; y < nomes.Length; y++) {
Qualidades.options.Add(new Dropdown.OptionData() { text = nomes[y] });
}
Qualidades.captionText.text = "Qualidade";
}
private void Opcoes(bool ativarOP) {
BotaoJogar.gameObject.SetActive(!ativarOP);
BotaoOpcoes.gameObject.SetActive(!ativarOP);
BotaoSair.gameObject.SetActive(!ativarOP);
//
textoVol.gameObject.SetActive(ativarOP);
BarraVolume.gameObject.SetActive(ativarOP);
CaixaModoJanela.gameObject.SetActive(ativarOP);
Resolucoes.gameObject.SetActive(ativarOP);
Qualidades.gameObject.SetActive(ativarOP);
BotaoVoltar.gameObject.SetActive(ativarOP);
BotaoSalvarPref.gameObject.SetActive(ativarOP);
}
//=========VOIDS DE SALVAMENTO==========//
private void SalvarPreferencias() {
if (CaixaModoJanela.isOn == true) {
modoJanelaAtivo = 1;
telaCheiaAtivada = false;
} else {
modoJanelaAtivo = 0;
telaCheiaAtivada = true;
}
PlayerPrefs.SetFloat("VOLUME", BarraVolume.value);
PlayerPrefs.SetInt("qualidadeGrafica", Qualidades.value);
PlayerPrefs.SetInt("modoJanela", modoJanelaAtivo);
PlayerPrefs.SetInt("RESOLUCAO", Resolucoes.value);
resolucaoSalveIndex = Resolucoes.value;
AplicarPreferencias();
}
private void AplicarPreferencias() {
VOLUME = PlayerPrefs.GetFloat("VOLUME");
AudioListener.volume = VOLUME;
QualitySettings.SetQualityLevel(PlayerPrefs.GetInt("qualidadeGrafica"));
Screen.SetResolution(resolucoesSuportadas[resolucaoSalveIndex].width, resolucoesSuportadas[resolucaoSalveIndex].height, telaCheiaAtivada);
}
//===========VOIDS NORMAIS=========//
void Update() {
if (SceneManager.GetActiveScene().name != nomeDaCena) {
AudioListener.volume = VOLUME;
Destroy(gameObject);
}
}
private void Jogar() {
SceneManager.LoadScene(nomeCenaJogo);
}
private void Sair() {
Application.Quit();
}
}
Última edição por Pokedlg em Sáb maio 08, 2021 3:34 pm, editado 2 vez(es) (Motivo da edição : Explicação do processo)
Pokedlg- ProgramadorMaster
- PONTOS : 2339
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Como fazer para aparecer poucas resoluções no meu menu de opções.
Edit:
No script foi alterado o:
Pelo loop for que havia dito antes.
Seguindo esta lógica, por exemplo se há 10 resoluções.
O tamanho da array, ou seja o Screen.resolutions.Length é igual a 10, mas nunca se esqueça que os valores dos index começa pelo 0, isso significa que o ultimo valor da array é 9, no caso o Screen.resolutions[9] = "3840x2160" e por este motivo fazemos a subtração por 1. E ao fazer a subtração pelo i vai tirando do utimo valor. Lembrando que utilizamos o tamanho da array resolucoesSuportadas para realizar o loop, a qual ja tinhamos definido como 3, ou seja será repitido 3 vezes, e então conseguimos obter este resultado:
No script foi alterado o:
- Código:
resolucoesSuportadas = Screen.resolutions;
Pelo loop for que havia dito antes.
- Código:
for(int i = 0; i < resolucoesSuportadas.Length; i++)
{
resolucoesSuportadas[i] = Screen.resolutions[Screen.resolutions.Length-1 - i];
}
Seguindo esta lógica, por exemplo se há 10 resoluções.
- Código:
//EXEMPLO
Screen.resolutions =
{
"320x240",
"640x360",
"720x480",
"800x600",
"1024x768",
"1280x720",
"1366x768",
"1920x1080",
"2560x1440",
"3840x2160"
};
O tamanho da array, ou seja o Screen.resolutions.Length é igual a 10, mas nunca se esqueça que os valores dos index começa pelo 0, isso significa que o ultimo valor da array é 9, no caso o Screen.resolutions[9] = "3840x2160" e por este motivo fazemos a subtração por 1. E ao fazer a subtração pelo i vai tirando do utimo valor. Lembrando que utilizamos o tamanho da array resolucoesSuportadas para realizar o loop, a qual ja tinhamos definido como 3, ou seja será repitido 3 vezes, e então conseguimos obter este resultado:
- Código:
resolucoesSuportadas[0] = Screen.resolutions[9]; //Screen.resolutions[Screen.resolutions.Length-1 - i] = (10-1-0) = 9
resolucoesSuportadas[1] = Screen.resolutions[8]; //Screen.resolutions[Screen.resolutions.Length-1 - i] = (10-1-1) = 8
resolucoesSuportadas[2] = Screen.resolutions[7]; //Screen.resolutions[Screen.resolutions.Length-1 - i] = (10-1-2) = 7
Pokedlg- ProgramadorMaster
- PONTOS : 2339
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Como fazer para aparecer poucas resoluções no meu menu de opções.
Cara muito obrigado mesmo, estava tentando fazer isso a semanas. Sucesso pra você!!! É difícil para um novato querer fazer um jogo com tanta coisa assim, mas ainda que existem pessoas que ajudam.Pokedlg escreveu:Edit:
No script foi alterado o:
- Código:
resolucoesSuportadas = Screen.resolutions;
Pelo loop for que havia dito antes.
- Código:
for(int i = 0; i < resolucoesSuportadas.Length; i++)
{
resolucoesSuportadas[i] = Screen.resolutions[Screen.resolutions.Length-1 - i];
}
Seguindo esta lógica, por exemplo se há 10 resoluções.
- Código:
//EXEMPLO
Screen.resolutions =
{
"320x240",
"640x360",
"720x480",
"800x600",
"1024x768",
"1280x720",
"1366x768",
"1920x1080",
"2560x1440",
"3840x2160"
};
O tamanho da array, ou seja o Screen.resolutions.Length é igual a 10, mas nunca se esqueça que os valores dos index começa pelo 0, isso significa que o ultimo valor da array é 9, no caso o Screen.resolutions[9] = "3840x2160" e por este motivo fazemos a subtração por 1. E ao fazer a subtração pelo i vai tirando do utimo valor. Lembrando que utilizamos o tamanho da array resolucoesSuportadas para realizar o loop, a qual ja tinhamos definido como 3, ou seja será repitido 3 vezes, e então conseguimos obter este resultado:
- Código:
resolucoesSuportadas[0] = Screen.resolutions[9]; //Screen.resolutions[Screen.resolutions.Length-1 - i] = (10-1-0) = 9
resolucoesSuportadas[1] = Screen.resolutions[8]; //Screen.resolutions[Screen.resolutions.Length-1 - i] = (10-1-1) = 8
resolucoesSuportadas[2] = Screen.resolutions[7]; //Screen.resolutions[Screen.resolutions.Length-1 - i] = (10-1-2) = 7
jeancvo3- Membro
- PONTOS : 1504
REPUTAÇÃO : 17
Idade : 27
Respeito as regras :
Re: Como fazer para aparecer poucas resoluções no meu menu de opções.
Denada . Sucesso pra voce também!
Pokedlg- ProgramadorMaster
- PONTOS : 2339
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Como fazer para aparecer poucas resoluções no meu menu de opções.
Amigo, na Unity estava tudo certo, aparecendo como devia ser as resoluções, 3 resoluções diferentes como eu queria, porem no jogo em si aparecem 3 resoluções iguais de 1920x1080, antes ele também aparecia 3 ou 4 resoluções de cada repetidas. Você saberia como resolver isso ?Pokedlg escreveu:Denada . Sucesso pra voce também!
jeancvo3- Membro
- PONTOS : 1504
REPUTAÇÃO : 17
Idade : 27
Respeito as regras :
Re: Como fazer para aparecer poucas resoluções no meu menu de opções.
As repetidas tem relação com as taxas de atualização do monitor, você pode achar mais info sobre isso e a solução aqui:
https://www.schultzgames.com/t816p200-tutorial-menu-principal-unity-5-5-3-ou-superior-com-ui?highlight=Menu
https://www.schultzgames.com/t816p200-tutorial-menu-principal-unity-5-5-3-ou-superior-com-ui?highlight=Menu
Fagner- Moderador
- PONTOS : 4445
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Como fazer para aparecer poucas resoluções no meu menu de opções.
Muito obrigado!Fagner escreveu:As repetidas tem relação com as taxas de atualização do monitor, você pode achar mais info sobre isso e a solução aqui:
https://www.schultzgames.com/t816p200-tutorial-menu-principal-unity-5-5-3-ou-superior-com-ui?highlight=Menu
jeancvo3- Membro
- PONTOS : 1504
REPUTAÇÃO : 17
Idade : 27
Respeito as regras :
Tópicos semelhantes
» Como fazer a pontuação aparecer no menu?
» Como Fazer para uma partícula aparecer por um período de tempo e sumir?
» Como fazer para aparecer um objeto na tela ao clicar com o mouse ou apertar um botão?
» Como ignorar um erro? fazer ele parar de aparecer no console?
» Como tirar a tela de opções de resolução e deixar apenas o menu principal?
» Como Fazer para uma partícula aparecer por um período de tempo e sumir?
» Como fazer para aparecer um objeto na tela ao clicar com o mouse ou apertar um botão?
» Como ignorar um erro? fazer ele parar de aparecer no console?
» Como tirar a tela de opções de resolução e deixar apenas o menu principal?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos