Menu Button UI
+3
MarcosSchultz
George Lucas Vieira
artplayer
7 participantes
Página 1 de 1
Menu Button UI
Estou fazendo um jogo e o menu inicial tem um botão (UI) que eu utilizo para iniciar o jogo. Na função OnClick() do Botão ele chama a seguinte funçao:
mas ao clicar no botão, tanto no play da unity quanto no meu celular, o jogo demora mais de 5 segundos para carregar a cena, e durante esse tempo fica travado na tela do menu inicial, todas as outras cenas do jogo carregam instantaneamente.
O que pode estar acontecendo? Como Resolver?
- Código:
public void Play(){
if (mundo == 1) {
SceneManager.LoadScene ("MenuFases1");
}
}
mas ao clicar no botão, tanto no play da unity quanto no meu celular, o jogo demora mais de 5 segundos para carregar a cena, e durante esse tempo fica travado na tela do menu inicial, todas as outras cenas do jogo carregam instantaneamente.
O que pode estar acontecendo? Como Resolver?
TassoCervi- Membro
- PONTOS : 2915
REPUTAÇÃO : 7
Idade : 25
Áreas de atuação : Progamador C#
Respeito as regras :
Re: Menu Button UI
A tua cena MenuFases1 é pesada?
Já pensou em fazer um sistema de loading entre as cenas?
Já pensou em fazer um sistema de loading entre as cenas?
Re: Menu Button UI
A fase não é pesada pois sempre que acaba uma fase o jogador retorna a essa cena e não trava, a troca é instantânea.artplayer escreveu:A tua cena MenuFases1 é pesada?
Já pensou em fazer um sistema de loading entre as cenas?
Acho que um sistema de loading pode ser uma solução, caso eu não consiga arrumar para a troca ser rápida eu o farei.
TassoCervi- Membro
- PONTOS : 2915
REPUTAÇÃO : 7
Idade : 25
Áreas de atuação : Progamador C#
Respeito as regras :
Re: Menu Button UI
Bom, tu colocou só o método do botão pra gente analisar... Assim não dá pra responder nada. Posta o script todo ai, ou pelo menos a parte importante dele.
George Lucas Vieira- Avançado
- PONTOS : 3394
REPUTAÇÃO : 132
Idade : 21
Áreas de atuação : Programação, Modelagem e Animação.
Respeito as regras :
Re: Menu Button UI
O script todo tem varias coisas que estão relacionadas ao resto do menu e não ao botão de Play, mas ta ai o script, tambem estarei colocando a parte do inspector:George Lucas Vieira escreveu:Bom, tu colocou só o método do botão pra gente analisar... Assim não dá pra responder nada. Posta o script todo ai, ou pelo menos a parte importante dele.
- Código:
public class MenuControl : MonoBehaviour {
public GameObject manager;
public GameObject setaVolta;
public GameObject setaVai;
public GameObject menuCanvas;
public GameObject optionsCanvas;
public GameObject statsCanvas;
public Image imagem;
public Text texto;
public int mundo;
public int lingua;
public Sprite vazio;
public Sprite setaAvanca;
public Sprite mundo1;
public Sprite mundo2;
void Start(){
manager.GetComponent<GameManager> ().Load ();
manager.GetComponent<GameManager> ().Save ();
mundo = manager.GetComponent<GameManager> ().menuMundo;
}
void Update(){
lingua = manager.GetComponent<GameManager> ().language;
if (mundo == 1) {
setaVolta.GetComponent<Image> ().sprite = vazio;
setaVai.GetComponent<Image> ().sprite = setaAvanca;
}
if (mundo == 2) {
setaVai.GetComponent<Image> ().sprite = setaAvanca;
setaVolta.GetComponent<Image> ().sprite = setaAvanca;
}
if (mundo == 3) {
setaVai.GetComponent<Image> ().sprite = vazio;
setaVolta.GetComponent<Image> ().sprite = setaAvanca;
}
if (mundo == 1) {
imagem.GetComponent<Image> ().sprite = mundo1;
if (lingua == 0) {
texto.GetComponent<Text> ().text = "Challenger Tower";
}
if (lingua == 1) {
texto.GetComponent<Text> ().text = "Torre do Desafiante";
}
}
if (mundo == 2) {
imagem.GetComponent<Image> ().sprite = mundo2;
if (lingua == 0) {
texto.GetComponent<Text> ().text = "Enchanted Forest";
}
if (lingua == 1) {
texto.GetComponent<Text> ().text = "Floresta Encantada";
}
}
if (mundo == 3) {
imagem.GetComponent<Image> ().sprite = vazio;
if (lingua == 0) {
texto.GetComponent<Text> ().text = "Coming Soon";
}
if (lingua == 1) {
texto.GetComponent<Text> ().text = "Em Breve";
}
}
}
public void Play(){
if (mundo == 1) {
SceneManager.LoadScene ("MenuFases1");
}
}
public void Stats(){
statsCanvas.SetActive (true);
menuCanvas.SetActive (false);
}
public void Options(){
optionsCanvas.SetActive (true);
menuCanvas.SetActive (false);
}
public void Quit(){
Application.Quit ();
}
public void ProximoMundo(){
if (mundo < 3) {
mundo++;
manager.GetComponent<GameManager> ().menuMundo = mundo;
manager.GetComponent<GameManager> ().Save ();
}
}
public void MundoAnterior(){
if (mundo > 1) {
mundo--;
manager.GetComponent<GameManager> ().menuMundo = mundo;
manager.GetComponent<GameManager> ().Save ();
}
}
}
[/img]
TassoCervi- Membro
- PONTOS : 2915
REPUTAÇÃO : 7
Idade : 25
Áreas de atuação : Progamador C#
Respeito as regras :
Re: Menu Button UI
Precisamos ver o projeto ou ter mais detalhes do mesmo...
Não acredito que seja algo neste script. Provavelmente é algum evento que acontece no start da cena, algum renderer demorado
Não acredito que seja algo neste script. Provavelmente é algum evento que acontece no start da cena, algum renderer demorado
Re: Menu Button UI
Segui aqui duas imagens, uma do menu principal e uma do menu de seleção de fases:
[/img]
Sempre que eu aperto no Botão Play no menu inicial ele trava por uns 12 segundos antes de carregar a cena da seleção de fases, e quando eu aperto no botão de retornar ao menu tanto na seleção de fases quanto dentro das fases ele trava por cerca de 4 segundos antes de abrir o menu.
No entanto ao ir para alguma das fases apertando os botoes de cada fase ou retornar a seleção de fases de dentro da fase ele também da uma travada, mas é algo muito rápido, 1 segundo ou menos e já abre a cena.
O script usado no botão Play do menu:
O script usado no botão de Retornar ao menu:
O script usado para ir as fases:
O script usado para retornar ao menu de seleção de fases de dentro da fase:
[/img]
Sempre que eu aperto no Botão Play no menu inicial ele trava por uns 12 segundos antes de carregar a cena da seleção de fases, e quando eu aperto no botão de retornar ao menu tanto na seleção de fases quanto dentro das fases ele trava por cerca de 4 segundos antes de abrir o menu.
No entanto ao ir para alguma das fases apertando os botoes de cada fase ou retornar a seleção de fases de dentro da fase ele também da uma travada, mas é algo muito rápido, 1 segundo ou menos e já abre a cena.
O script usado no botão Play do menu:
- Código:
public void Play(){
if (mundo == 1) {
SceneManager.LoadScene ("MenuFases1");
}
}
O script usado no botão de Retornar ao menu:
- Código:
public void MainMenu(){
SceneManager.LoadScene ("MenuInicio");
}
O script usado para ir as fases:
- Código:
public void AbreFase(){
if (unlock == 1) {
unlock = 0;
SceneManager.LoadScene (level);
}
}
O script usado para retornar ao menu de seleção de fases de dentro da fase:
- Código:
public void LevelSelect(){
mundo = manager.GetComponent<GameManager> ().menuMundo;
if (mundo == 1) {
SceneManager.LoadScene ("MenuFases1");
}
}
TassoCervi- Membro
- PONTOS : 2915
REPUTAÇÃO : 7
Idade : 25
Áreas de atuação : Progamador C#
Respeito as regras :
Re: Menu Button UI
Sabe utilizar o Profiller? deixa ele aberto enquanto faz o load da cena... ai você vai conseguir saber o que está causando o gargalo, se é um script, um renderer, etc, etc
O Profiller acusa tudo, informa tudo em relação ao desempenho... Uso muito quando trabalho com physics.
O Profiller acusa tudo, informa tudo em relação ao desempenho... Uso muito quando trabalho com physics.
Re: Menu Button UI
MarcosSchultz escreveu:Sabe utilizar o Profiller? deixa ele aberto enquanto faz o load da cena... ai você vai conseguir saber o que está causando o gargalo, se é um script, um renderer, etc, etc
O Profiller acusa tudo, informa tudo em relação ao desempenho... Uso muito quando trabalho com physics.
Vou dar uma pesquisada na internet sobre como usar. Valeu cara. :D
TassoCervi- Membro
- PONTOS : 2915
REPUTAÇÃO : 7
Idade : 25
Áreas de atuação : Progamador C#
Respeito as regras :
Re: Menu Button UI
O Profiler não é só da Unity Pro? :scratch:
Weverton Borges da Silva- Avançado
- PONTOS : 3133
REPUTAÇÃO : 49
Idade : 33
Respeito as regras :
Re: Menu Button UI
O LoadScene vai travar a thread do jogo e carregar a nova cena, dependendo dos recursos alocados no momento pode demorar mesmo sendo uma cena leve.
O LoadSceneAsync vai carregar a fase em um segundo plano, fazendo não travar, mas irá demorar o mesmo tanto para carregar.
O LoadSceneAsync vai carregar a fase em um segundo plano, fazendo não travar, mas irá demorar o mesmo tanto para carregar.
RenanMSV- Instrutor
- PONTOS : 4486
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: Menu Button UI
Weverton Borges da Silva escreveu:O Profiler não é só da Unity Pro? :scratch:
Unity 5 tem TUDO free
Re: Menu Button UI
Caramba, bom saber. Obrigado pela informação :DMarcosSchultz escreveu:Weverton Borges da Silva escreveu:O Profiler não é só da Unity Pro? :scratch:
Unity 5 tem TUDO free
Weverton Borges da Silva- Avançado
- PONTOS : 3133
REPUTAÇÃO : 49
Idade : 33
Respeito as regras :
Re: Menu Button UI
Você sabe usar o switch case ? Alguns dos seus "if" não tem o "else if" e sim outro "if" em seguida, isso faz com que todas as condições sejam verificadas por exemplo:assoCervi escreveu:O script todo tem varias coisas que estão relacionadas ao resto do menu e não ao botão de Play, mas ta ai o script, tambem estarei colocando a parte do inspector:George Lucas Vieira escreveu:Bom, tu colocou só o método do botão pra gente analisar... Assim não dá pra responder nada. Posta o script todo ai, ou pelo menos a parte importante dele.
- Código:
public class MenuControl : MonoBehaviour {
public GameObject manager;
public GameObject setaVolta;
public GameObject setaVai;
public GameObject menuCanvas;
public GameObject optionsCanvas;
public GameObject statsCanvas;
public Image imagem;
public Text texto;
public int mundo;
public int lingua;
public Sprite vazio;
public Sprite setaAvanca;
public Sprite mundo1;
public Sprite mundo2;
void Start(){
manager.GetComponent<GameManager> ().Load ();
manager.GetComponent<GameManager> ().Save ();
mundo = manager.GetComponent<GameManager> ().menuMundo;
}
void Update(){
lingua = manager.GetComponent<GameManager> ().language;
if (mundo == 1) {
setaVolta.GetComponent<Image> ().sprite = vazio;
setaVai.GetComponent<Image> ().sprite = setaAvanca;
}
if (mundo == 2) {
setaVai.GetComponent<Image> ().sprite = setaAvanca;
setaVolta.GetComponent<Image> ().sprite = setaAvanca;
}
if (mundo == 3) {
setaVai.GetComponent<Image> ().sprite = vazio;
setaVolta.GetComponent<Image> ().sprite = setaAvanca;
}
if (mundo == 1) {
imagem.GetComponent<Image> ().sprite = mundo1;
if (lingua == 0) {
texto.GetComponent<Text> ().text = "Challenger Tower";
}
if (lingua == 1) {
texto.GetComponent<Text> ().text = "Torre do Desafiante";
}
}
if (mundo == 2) {
imagem.GetComponent<Image> ().sprite = mundo2;
if (lingua == 0) {
texto.GetComponent<Text> ().text = "Enchanted Forest";
}
if (lingua == 1) {
texto.GetComponent<Text> ().text = "Floresta Encantada";
}
}
if (mundo == 3) {
imagem.GetComponent<Image> ().sprite = vazio;
if (lingua == 0) {
texto.GetComponent<Text> ().text = "Coming Soon";
}
if (lingua == 1) {
texto.GetComponent<Text> ().text = "Em Breve";
}
}
}
public void Play(){
if (mundo == 1) {
SceneManager.LoadScene ("MenuFases1");
}
}
public void Stats(){
statsCanvas.SetActive (true);
menuCanvas.SetActive (false);
}
public void Options(){
optionsCanvas.SetActive (true);
menuCanvas.SetActive (false);
}
public void Quit(){
Application.Quit ();
}
public void ProximoMundo(){
if (mundo < 3) {
mundo++;
manager.GetComponent<GameManager> ().menuMundo = mundo;
manager.GetComponent<GameManager> ().Save ();
}
}
public void MundoAnterior(){
if (mundo > 1) {
mundo--;
manager.GetComponent<GameManager> ().menuMundo = mundo;
manager.GetComponent<GameManager> ().Save ();
}
}
}
- Código:
if (mundo == 2) {
imagem.GetComponent ().sprite = mundo2;
if (lingua == 0) {
texto.GetComponent ().text = "Enchanted Forest";
}
if (lingua == 1) {
texto.GetComponent ().text = "Floresta Encantada";
}
}
Mesmo que o primeiro if da língua for verdadeiro ele ainda vai continuar verificando todo o seu código, quando você usa o switch case ou o else if, ao encontrar a condição desejada o código seguinte não será executado.
Última edição por kalielson em Sex Jan 27, 2017 1:01 am, editado 1 vez(es)
kalielson- ProgramadorMaster
- PONTOS : 3575
REPUTAÇÃO : 120
Idade : 40
Áreas de atuação : Mestrando em Computação
Respeito as regras :
Re: Menu Button UI
Realmente, eu não tinha percebido isso kalielson, vou dar uma otimizada nos meus códigos, ver se melhora.
TassoCervi- Membro
- PONTOS : 2915
REPUTAÇÃO : 7
Idade : 25
Áreas de atuação : Progamador C#
Respeito as regras :
Tópicos semelhantes
» (Ajuda) MENU com Button
» Pause Menu: botões de "Restart" e "Menu"
» Menu Principal com Load Game e Menu de Pause com Save Game?
» Button
» Button
» Pause Menu: botões de "Restart" e "Menu"
» Menu Principal com Load Game e Menu de Pause com Save Game?
» Button
» Button
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos