Problema com Input
3 participantes
Página 1 de 1
Problema com Input
Bom dia,
eu tenho aqui um projeto de jogo com um menu, abaixo a imagem desse menu:
A ultima opção Quit Game é para fechar o jogo com o Application.Quit
Já tenho o script para selecionar essas opções do menu, a barra escura em cima do Game Start é o identificador de que uma opção está selecionada.
No script eu coloque uma variavel int "numberMain" que vai de 1 a 5 (numero de opções do menu) e que vai aumentando conforme eu vou apertando para baixo e diminuindo quando aperto para cima. e a barra escura tambem vai deslocando p baixo e p cima.
o comando para fechar o jogo é esse:
Mas eu criei um outro menuzinho que ativa quando aperto aperto a tecla ESC, esse tem as opções YES e NO, e se eu teclar ENTER na opção YES o jogo fecha com o Application.Quit; se eu aperto ENTER na opção NO, apenas desativa esse menu.
Primeiro fiz uma breve explicação agora vamos ao que interessa:
em cada uma das opções do main menu acima, se eu apertar Input.GetKeyDown("return") , vai abrir outros menus, ou carregar outra cena.
vamos supor que eu esteja navegando nesse main menu e deixo a ultima opção QUIT GAME selecionada: se eu apertar enter vai fechar o jogo, beleza, é para acontecer isso mesmo.
mas se eu abrir o menuzinho e me arrependo de fechar o jogo e aperto enter na opção NO apenas para desativa esse menu, mesmo assim o jogo fecha com o Application.Quit, e não é isso que é para acontecer.
parece que a tecla enter ("return") ainda continua funcionando e sai abrindo as outras opções que dependem dela para abrir.
entenderam o que está acontecendo?
como corrijo isso para quando eu dar enter na opção NO não fechar o jogo e nem abrir outra opção?
eu tenho aqui um projeto de jogo com um menu, abaixo a imagem desse menu:
A ultima opção Quit Game é para fechar o jogo com o Application.Quit
Já tenho o script para selecionar essas opções do menu, a barra escura em cima do Game Start é o identificador de que uma opção está selecionada.
No script eu coloque uma variavel int "numberMain" que vai de 1 a 5 (numero de opções do menu) e que vai aumentando conforme eu vou apertando para baixo e diminuindo quando aperto para cima. e a barra escura tambem vai deslocando p baixo e p cima.
o comando para fechar o jogo é esse:
- Código:
if (numberMain == 5) {
if (Input.GetKeyDown("return")) {
Application.Quit();
}
}
Mas eu criei um outro menuzinho que ativa quando aperto aperto a tecla ESC, esse tem as opções YES e NO, e se eu teclar ENTER na opção YES o jogo fecha com o Application.Quit; se eu aperto ENTER na opção NO, apenas desativa esse menu.
Primeiro fiz uma breve explicação agora vamos ao que interessa:
em cada uma das opções do main menu acima, se eu apertar Input.GetKeyDown("return") , vai abrir outros menus, ou carregar outra cena.
vamos supor que eu esteja navegando nesse main menu e deixo a ultima opção QUIT GAME selecionada: se eu apertar enter vai fechar o jogo, beleza, é para acontecer isso mesmo.
mas se eu abrir o menuzinho e me arrependo de fechar o jogo e aperto enter na opção NO apenas para desativa esse menu, mesmo assim o jogo fecha com o Application.Quit, e não é isso que é para acontecer.
parece que a tecla enter ("return") ainda continua funcionando e sai abrindo as outras opções que dependem dela para abrir.
entenderam o que está acontecendo?
como corrijo isso para quando eu dar enter na opção NO não fechar o jogo e nem abrir outra opção?
Marc7- Mestre
- PONTOS : 3444
REPUTAÇÃO : 28
Respeito as regras :
Re: Problema com Input
Eu acho que seria mais fácil na opção de fechar o jogo você colocar a tecla ESC, quando pressionada ele pergunta se é para fechar o jogo. Já na questão de quando apertar enter e ele sair abrindo outras opções tenta fazer algum debug no código para ver como ele ta reagindo.
Goustkor- Avançado
- PONTOS : 3074
REPUTAÇÃO : 18
Respeito as regras :
Re: Problema com Input
Realmente não sei o que está acontecendo, fiz um debug para o momento em que eu apertar enter na opção NO, mas esse debug não aparece.
Marc7- Mestre
- PONTOS : 3444
REPUTAÇÃO : 28
Respeito as regras :
Re: Problema com Input
Poderia postar o script?
Goustkor- Avançado
- PONTOS : 3074
REPUTAÇÃO : 18
Respeito as regras :
Re: Problema com Input
- Código:
void BotaoNao() {
if (quitSelect == 2) {
if (Input.GetKeyDown("return")) {
fecharJogo = false;
quitGameMenu.SetActive(false);
quitActive = false;
Debug.Log("Tecla enter ativa");
}
}
}
Marc7- Mestre
- PONTOS : 3444
REPUTAÇÃO : 28
Respeito as regras :
Re: Problema com Input
Eu precisaria do código completo. Essa parte sozinha não me da informação sobre erro.Marc7 escreveu:
- Código:
void BotaoNao() {
if (quitSelect == 2) {
if (Input.GetKeyDown("return")) {
fecharJogo = false;
quitGameMenu.SetActive(false);
quitActive = false;
Debug.Log("Tecla enter ativa");
}
}
}
Goustkor- Avançado
- PONTOS : 3074
REPUTAÇÃO : 18
Respeito as regras :
Re: Problema com Input
codigo completo:
- Código:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class GCMenuQuit : MonoBehaviour {
public GameObject quitGameMenu;
public int quitSelect = 1;
public bool quitActive = false;
public bool fecharJogo;
private AudioSource somMenuQuit;
public Text sim;
public Text nao;
void Start () {
somMenuQuit = GetComponent<AudioSource>();
fecharJogo = false;
}
void Update () {
if (!quitActive && Input.GetKeyDown("escape")) {
quitActive = true;
quitGameMenu.SetActive(true);
}
else if (quitActive && Input.GetKeyDown("escape")) {
quitActive = false;
quitGameMenu.SetActive(false);
}
if (!quitActive) {
QuitDefault();
}
if (fecharJogo) {
Application.Quit();
}
MenuQuitOptions();
BotaoSim();
BotaoNao();
}
void MenuQuitOptions() {
var imagemSim = GameObject.Find("GameStartImage").GetComponent<Image>();
var imagemNao = GameObject.Find("OptionsImage").GetComponent<Image>();
if (quitActive) {
//Navegar nas opçoes do Menu Quit.
if (Input.GetKeyDown("down")) {
quitSelect += 1;
somMenuQuit.Play();
}
if (Input.GetKeyDown("up")) {
quitSelect -= 1;
somMenuQuit.Play();
}
if (quitSelect == 3) {
if (Input.GetKeyDown("down")) {
quitSelect -= 2;
}
}
if (quitSelect == 0) {
if (Input.GetKeyDown("up")) {
quitSelect += 2;
}
}
if (quitSelect == 1) {
GameObject.Find("YesText").GetComponent<Text>().color = new Color(1, 1, 1);
GameObject.Find("NoText").GetComponent<Text>().color = new Color(0.4f, 0.4f, 0.4f);
}
if (quitSelect == 2) {
GameObject.Find("YesText").GetComponent<Text>().color = new Color(0.4f, 0.4f, 0.4f);
GameObject.Find("NoText").GetComponent<Text>().color = new Color(1, 1, 1);
}
}
}
void BotaoSim() {
if (quitSelect == 1) {
if (Input.GetKeyDown("return")) {
fecharJogo = true;
}
}
}
void BotaoNao() {
if (quitSelect == 2) {
if (Input.GetKeyDown("return")) {
fecharJogo = false;
quitGameMenu.SetActive(false);
quitActive = false;
Debug.Log("Tecla enter ativa");
}
}
}
void QuitDefault() {
quitSelect = 1;
}
}
Marc7- Mestre
- PONTOS : 3444
REPUTAÇÃO : 28
Respeito as regras :
Re: Problema com Input
Estranho. eu coloquei seu script e dei build e para mim o script quando aperta No não acontece nada. eu acho que o menu principal ta interferindo.
Goustkor- Avançado
- PONTOS : 3074
REPUTAÇÃO : 18
Respeito as regras :
Re: Problema com Input
Cara, eu precisaria ver como está a cena para poder avaliar melhor, mas pelo que vi, não deveria estar acontecendo isto.
Os 2 scripts compartilham alguma void com o mesmo nome? alguma classe com o mesmo nome? alguma variável com o mesmo nome? Tente checar isto.
Os 2 scripts compartilham alguma void com o mesmo nome? alguma classe com o mesmo nome? alguma variável com o mesmo nome? Tente checar isto.
Re: Problema com Input
Marcos eu já exclui esse projeto porque tive problemas com outro script, onde tinha uma linha desnecessaria que quando eu a apago, dá problema no jogo, acho que isso é porque comecei o projeto em versão 5.xx, não lembro qual, depois que atualizei para a 5.4 começou a acontecer isso.
Abri um novo projeto e vou ter que fazer a cena "Main" tudo de novo, mas como tenho aqui um backup do projeto, mesmo que um pouco atrasado sem esse menu quit game, faço ele de novo e te mando um video de como tudo está.
Agora a questão que vc falou sobre scripts compartilham alguma void com o mesmo nome, na verdade tenho outro script chamado GCMenuPrincipal, esse aqui:
a parte do script que tambem fecha o jogo é essa:
quando eu selecionar a opção Quit Game como na imagem lá em cima, se eu apertar enter tambem vai fechar o jogo, além de eu apertar enter no menu quit opção YES.
Retorno depois com um pequeno video de como tudo está.
Abri um novo projeto e vou ter que fazer a cena "Main" tudo de novo, mas como tenho aqui um backup do projeto, mesmo que um pouco atrasado sem esse menu quit game, faço ele de novo e te mando um video de como tudo está.
Agora a questão que vc falou sobre scripts compartilham alguma void com o mesmo nome, na verdade tenho outro script chamado GCMenuPrincipal, esse aqui:
- Código:
public GameObject menuPrincip;
public GameObject menuOpcoes;
public GameObject menuDesistir;
public int valor = 1;
public int numberMain = 1;
public int quitSelect = 1;
public bool quitActive = false;
public static int difficult = 2;
public static int player = 3;
public static int credits = 3;
public static int habilitaMenu = 1;
private AudioSource somOpcoes;
void Start()
{
somOpcoes = GetComponent<AudioSource>();
}
void Update()
{
if (habilitaMenu == 1)
{
menuPrincip.SetActive(true);
menuOpcoes.SetActive(false);
opcoesMenuPrincipal();
valorPadraoConfig();
}
if (habilitaMenu == 1)
{
if (numberMain == 1)
{
if (Input.GetKeyDown("return"))
{
SceneManager.LoadScene("Loading");
menuPrincip.SetActive(false);
menuOpcoes.SetActive(false);
}
}
}
if (habilitaMenu == 1)
{
if (numberMain == 2)
{
if (Input.GetKeyDown("return"))
{
menuPrincip.SetActive(false);
menuOpcoes.SetActive(true);
opcoesMenuConfig();
}
}
}
if (habilitaMenu == 1)
{
if (numberMain == 4)
{
if (Input.GetKeyDown("return"))
{
SceneManager.LoadScene("Creditos");
}
}
}
//Fechar o jogo caso a opçao Exit seja apertada.
if (habilitaMenu == 1)
{
if (numberMain == 5)
{
if (Input.GetKeyDown("return"))
{
Application.Quit();
}
}
}
//Mantem o valor minimo de habilitaMenu em 1.
if (habilitaMenu == 0)
{
habilitaMenu += 1;
}
trocaMenu();
opcaoDificuldade();
opcaoPlayer();
opcaoCreditos();
opcaoPadrao();
opcaoRetornar();
}
void opcoesMenuPrincipal()
{
var imagemGameStart = GameObject.Find("GameStartImage").GetComponent<Image>();
var imagemOpt = GameObject.Find("OptionsImage").GetComponent<Image>();
var imagemRank = GameObject.Find("RankingImage").GetComponent<Image>();
var imagemCred = GameObject.Find("CreditsImage").GetComponent<Image>();
var imagemExit = GameObject.Find("ExitImage").GetComponent<Image>();
//Navegar nas opçoes do Menu principal.
if (Input.GetKeyDown("down"))
{
numberMain += 1;
somOpcoes.Play();
}
if (Input.GetKeyDown("up"))
{
numberMain -= 1;
somOpcoes.Play();
}
if (numberMain == 6)
{
if (Input.GetKeyDown("down"))
{
numberMain -= 5;
}
}
if (numberMain == 0)
{
if (Input.GetKeyDown("up"))
{
numberMain += 5;
}
}
if (numberMain == 1)
{
imagemGameStart.enabled = true;
imagemOpt.enabled = false;
imagemRank.enabled = false;
imagemCred.enabled = false;
imagemExit.enabled = false;
}
if (numberMain == 2)
{
imagemGameStart.enabled = false;
imagemOpt.enabled = true;
imagemRank.enabled = false;
imagemCred.enabled = false;
imagemExit.enabled = false;
}
if (numberMain == 3)
{
imagemGameStart.enabled = false;
imagemOpt.enabled = false;
imagemRank.enabled = true;
imagemCred.enabled = false;
imagemExit.enabled = false;
}
if (numberMain == 4)
{
imagemGameStart.enabled = false;
imagemOpt.enabled = false;
imagemRank.enabled = false;
imagemCred.enabled = true;
imagemExit.enabled = false;
}
if (numberMain == 5)
{
imagemGameStart.enabled = false;
imagemOpt.enabled = false;
imagemRank.enabled = false;
imagemCred.enabled = false;
imagemExit.enabled = true;
}
}
void opcoesMenuConfig()
{
var imagemDific = GameObject.Find("DifficultImage").GetComponent<Image>();
var imagemPlayer = GameObject.Find("PlayerImage").GetComponent<Image>();
var imagemCredits = GameObject.Find("CreditsImage").GetComponent<Image>();
var imagemSound = GameObject.Find("SoundImage").GetComponent<Image>();
var imagemKey = GameObject.Find("KeyImage").GetComponent<Image>();
var imagemScreen = GameObject.Find("ScreenImage").GetComponent<Image>();
var imagemDefault = GameObject.Find("DefaultImage").GetComponent<Image>();
var imagemReturn = GameObject.Find("ReturnImage").GetComponent<Image>();
//Navegar nas opçoes do Menu Config.
if (Input.GetKeyDown("down"))
{
valor += 1;
somOpcoes.Play();
}
if (Input.GetKeyDown("up"))
{
valor -= 1;
somOpcoes.Play();
}
if (valor == 9)
{
if (Input.GetKeyDown("down"))
{
valor -= 8;
}
}
if (valor == 0)
{
if (Input.GetKeyDown("up"))
{
valor += 8;
}
}
if (valor == 1)
{
imagemDific.enabled = true;
imagemPlayer.enabled = false;
imagemCredits.enabled = false;
imagemSound.enabled = false;
imagemKey.enabled = false;
imagemScreen.enabled = false;
imagemDefault.enabled = false;
imagemReturn.enabled = false;
}
if (valor == 2)
{
imagemDific.enabled = false;
imagemPlayer.enabled = true;
imagemCredits.enabled = false;
imagemSound.enabled = false;
imagemKey.enabled = false;
imagemScreen.enabled = false;
imagemDefault.enabled = false;
imagemReturn.enabled = false;
}
if (valor == 3)
{
imagemDific.enabled = false;
imagemPlayer.enabled = false;
imagemCredits.enabled = true;
imagemSound.enabled = false;
imagemKey.enabled = false;
imagemScreen.enabled = false;
imagemDefault.enabled = false;
imagemReturn.enabled = false;
}
if (valor == 4)
{
imagemDific.enabled = false;
imagemPlayer.enabled = false;
imagemCredits.enabled = false;
imagemSound.enabled = true;
imagemKey.enabled = false;
imagemScreen.enabled = false;
imagemDefault.enabled = false;
imagemReturn.enabled = false;
}
if (valor == 5)
{
imagemDific.enabled = false;
imagemPlayer.enabled = false;
imagemCredits.enabled = false;
imagemSound.enabled = false;
imagemKey.enabled = true;
imagemScreen.enabled = false;
imagemDefault.enabled = false;
imagemReturn.enabled = false;
}
if (valor == 6)
{
imagemDific.enabled = false;
imagemPlayer.enabled = false;
imagemCredits.enabled = false;
imagemSound.enabled = false;
imagemKey.enabled = false;
imagemScreen.enabled = true;
imagemDefault.enabled = false;
imagemReturn.enabled = false;
}
if (valor == 7)
{
imagemDific.enabled = false;
imagemPlayer.enabled = false;
imagemCredits.enabled = false;
imagemSound.enabled = false;
imagemKey.enabled = false;
imagemScreen.enabled = false;
imagemDefault.enabled = true;
imagemReturn.enabled = false;
}
if (valor ==
{
imagemDific.enabled = false;
imagemPlayer.enabled = false;
imagemCredits.enabled = false;
imagemSound.enabled = false;
imagemKey.enabled = false;
imagemScreen.enabled = false;
imagemDefault.enabled = false;
imagemReturn.enabled = true;
}
}
void opcaoDificuldade()
{
var opcoesDific = GameObject.Find("DifficultOptions").GetComponent<Text>();
if (valor == 1)
{
if (Input.GetKeyDown("right"))
{
difficult += 1;
if (difficult == 4)
{
difficult -= 1;
}
}
}
if (valor == 1)
{
if (Input.GetKeyDown("left"))
{
difficult -= 1;
if (difficult == 0)
{
difficult += 1;
}
}
}
if (difficult == 1)
{
opcoesDific.text = "Easy";
}
if (difficult == 2)
{
opcoesDific.text = "Normal";
}
if (difficult == 3)
{
opcoesDific.text = "Hard";
}
}
void opcaoPlayer()
{
var opcoesPlayer = GameObject.Find("PlayerOptions").GetComponent<Text>();
if (valor == 2)
{
if (Input.GetKeyDown("right"))
{
player += 1;
if (player == 6)
{
player -= 1;
}
}
}
if (valor == 2)
{
if (Input.GetKeyDown("left"))
{
player -= 1;
if (player == 0)
{
player += 1;
}
}
}
if (player == 1)
{
opcoesPlayer.text = "1";
}
if (player == 2)
{
opcoesPlayer.text = "2";
}
if (player == 3)
{
opcoesPlayer.text = "3";
}
if (player == 4)
{
opcoesPlayer.text = "4";
}
if (player == 5)
{
opcoesPlayer.text = "5";
}
}
void opcaoCreditos()
{
var opcoesCredits = GameObject.Find("CreditsOptions").GetComponent<Text>();
if (valor == 3)
{
if (Input.GetKeyDown("right"))
{
credits += 1;
if (credits == 6)
{
credits -= 1;
}
}
}
if (valor == 3)
{
if (Input.GetKeyDown("left"))
{
credits -= 1;
if (credits == 0)
{
credits += 1;
}
}
}
if (credits == 1)
{
opcoesCredits.text = "1";
}
if (credits == 2)
{
opcoesCredits.text = "2";
}
if (credits == 3)
{
opcoesCredits.text = "3";
}
if (credits == 4)
{
opcoesCredits.text = "4";
}
if (credits == 5)
{
opcoesCredits.text = "5";
}
}
void opcaoPadrao()
{
if (valor == 7)
{
if (Input.GetKeyDown("return"))
{
difficult = 2;
player = 3;
credits = 3;
}
}
}
void opcaoRetornar()
{
if (valor ==
{
if (Input.GetKeyDown("return"))
{
menuPrincip.SetActive(true); //Ativa o Painel Principal.
menuOpcoes.SetActive(false); //Desativa o Painel de Configurações.
habilitaMenu -= 1;
PlayerPrefs.SetInt("NivelSelecionado", difficult);
PlayerPrefs.SetInt("VidaSelecionada", player);
PlayerPrefs.SetInt("CreditoSelecionado", credits);
if (habilitaMenu == 2)
{
habilitaMenu -= 1;
}
}
}
}
void valorPadraoMain()
{
numberMain = 2;
}
void valorPadraoConfig()
{
valor = 1;
}
void defaultOptionsConfig()
{
difficult = 2;
player = 3;
credits = 3;
}
void trocaMenu()
{
//Botao para trocar de menu.
if (numberMain == 2)
{
if (Input.GetKeyDown("return"))
{
habilitaMenu += 1;
//Mantem o valor maximo de habilitaMenu em 3.
if (habilitaMenu == 4)
{
habilitaMenu -= 1;
}
}
}
}
}
a parte do script que tambem fecha o jogo é essa:
- Código:
//Fechar o jogo caso a opçao Exit seja apertada.
if (habilitaMenu == 1)
{
if (numberMain == 5)
{
if (Input.GetKeyDown("return"))
{
Application.Quit();
}
}
}
quando eu selecionar a opção Quit Game como na imagem lá em cima, se eu apertar enter tambem vai fechar o jogo, além de eu apertar enter no menu quit opção YES.
Retorno depois com um pequeno video de como tudo está.
Marc7- Mestre
- PONTOS : 3444
REPUTAÇÃO : 28
Respeito as regras :
Re: Problema com Input
Ola Marcos, consegui resolver o problema dos menus atraves de outro codigo.
realmente tinha metodos que compartilhavam o mesmo efeito, aí eu tive que criar exceções.
surgindo mais algum problema eu posto um video.
realmente tinha metodos que compartilhavam o mesmo efeito, aí eu tive que criar exceções.
surgindo mais algum problema eu posto um video.
Marc7- Mestre
- PONTOS : 3444
REPUTAÇÃO : 28
Respeito as regras :
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos