Dúvida sobre os botões UI,comando de troca de texto por Quest não funciona.
2 participantes
Página 1 de 1
Dúvida sobre os botões UI,comando de troca de texto por Quest não funciona.
Oi boa tarde, estou com uma pequena dúvida sobre algumas funções sobre os botões UI,pois, os botões(legacy) como e chamado na versão 2021.3.2f1 não funciona direito em alguns casos. A parte que estou travado e devido um código que fiz utilizando um pequeno banco de dados, coloquei alguns caracteres dentro string[] para facilitar em colocar texto dentro cenário como base e depois de responder a "quest" faz a troca automática das letras, no final fiz um "void" para seguir na próxima pergunta depois de clicar no botão(estando certo ou não a resposta) e marcar pontos para depois ir na tela de "notaFinal" com os pontos sendo mostrados. Mas ocorreu algum problema,para ficar mais facil, deixei os botões com comando de onclick() classificar uma letra nele(a,b,c,d) e acaso ele for o correto vai marcar ponto(no codigo deixa mais facil de entender). Mas quando clico ele não executa o comando de trocar de pergunta e nem marca ponto, testei nos 2 tipos de botões, o atual com botão"TextMeshPro" e o outro button(legacy). Não ocorreu nenhum evento(comando) nos dois. Vou agora postar o codigo feito,possui uma parte utilizando PlayerPrefs e apenas para pegar os dados e demonstrar na "notaFinal":
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Rendering;
using UnityEngine.UIElements;
using TMPro;
using UnityEngine.SceneManagement;
public class Responder : MonoBehaviour
{
private int idTema;
public TMP_Text Pergunta;
public TMP_Text resposta1,resposta2,resposta3;
public TMP_Text infoRespostas;
public string[] perguntas;//armazena perguntas
public string[] alternativaA,alternativaB,alternativaC;//armazena alternativas
public string[] corretas;//armazena alternativas corretas
private int idPergunta;
private float acertos,questoes,media;
private int notaFinal;
void Start()
{
idTema = PlayerPrefs.GetInt("idTema");
idPergunta = 0;
questoes = perguntas.Length;
Pergunta.text = perguntas[idPergunta];
resposta1.text = alternativaA[idPergunta];
resposta2.text = alternativaB[idPergunta];
resposta3.text = alternativaC[idPergunta];
infoRespostas.text = (idPergunta +1).ToString()+"/"+questoes.ToString();
}
public void respostaAlternativa(string alternativa)
{
if (alternativa == "A")
{
if(alternativaA[idPergunta] == corretas[idPergunta])
{
acertos += 1;
}
}
else if (alternativa == "B")
{
if(alternativaB[idPergunta] == corretas[idPergunta])
{
acertos += 1;
}
}
else if (alternativa == "C")
{
if(alternativaC[idPergunta] == corretas[idPergunta])
{
acertos += 1;
}
}
}
void proximapergunta()
{
idPergunta += 1;
if(idPergunta <= (questoes-1))
{
Pergunta.text = perguntas[idPergunta];
resposta1.text = alternativaA[idPergunta];
resposta2.text = alternativaB[idPergunta];
resposta3.text = alternativaC[idPergunta];
infoRespostas.text = (idPergunta +1).ToString()+"/"+questoes.ToString();
}else{
media = 10 * (acertos / questoes); // calcula a media por base do percentual de acerto.
notaFinal = Mathf.RoundToInt(media); // arrendondar a nota para o inteiro.
if(notaFinal > PlayerPrefs.GetInt("notaFinal"+idTema.ToString()))
{
PlayerPrefs.SetInt("notaFinal"+idTema.ToString(), notaFinal);// !!!!
PlayerPrefs.SetInt("acertos"+idTema.ToString(), (int)acertos);// !!!!
}
PlayerPrefs.SetInt("notaFinalTemp"+idTema.ToString(), notaFinal);// !!!!
PlayerPrefs.SetInt("acertosTemp"+idTema.ToString(), (int)acertos);// !!!!
SceneManager.LoadScene("notaFinal");
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Rendering;
using UnityEngine.UIElements;
using TMPro;
using UnityEngine.SceneManagement;
public class Responder : MonoBehaviour
{
private int idTema;
public TMP_Text Pergunta;
public TMP_Text resposta1,resposta2,resposta3;
public TMP_Text infoRespostas;
public string[] perguntas;//armazena perguntas
public string[] alternativaA,alternativaB,alternativaC;//armazena alternativas
public string[] corretas;//armazena alternativas corretas
private int idPergunta;
private float acertos,questoes,media;
private int notaFinal;
void Start()
{
idTema = PlayerPrefs.GetInt("idTema");
idPergunta = 0;
questoes = perguntas.Length;
Pergunta.text = perguntas[idPergunta];
resposta1.text = alternativaA[idPergunta];
resposta2.text = alternativaB[idPergunta];
resposta3.text = alternativaC[idPergunta];
infoRespostas.text = (idPergunta +1).ToString()+"/"+questoes.ToString();
}
public void respostaAlternativa(string alternativa)
{
if (alternativa == "A")
{
if(alternativaA[idPergunta] == corretas[idPergunta])
{
acertos += 1;
}
}
else if (alternativa == "B")
{
if(alternativaB[idPergunta] == corretas[idPergunta])
{
acertos += 1;
}
}
else if (alternativa == "C")
{
if(alternativaC[idPergunta] == corretas[idPergunta])
{
acertos += 1;
}
}
}
void proximapergunta()
{
idPergunta += 1;
if(idPergunta <= (questoes-1))
{
Pergunta.text = perguntas[idPergunta];
resposta1.text = alternativaA[idPergunta];
resposta2.text = alternativaB[idPergunta];
resposta3.text = alternativaC[idPergunta];
infoRespostas.text = (idPergunta +1).ToString()+"/"+questoes.ToString();
}else{
media = 10 * (acertos / questoes); // calcula a media por base do percentual de acerto.
notaFinal = Mathf.RoundToInt(media); // arrendondar a nota para o inteiro.
if(notaFinal > PlayerPrefs.GetInt("notaFinal"+idTema.ToString()))
{
PlayerPrefs.SetInt("notaFinal"+idTema.ToString(), notaFinal);// !!!!
PlayerPrefs.SetInt("acertos"+idTema.ToString(), (int)acertos);// !!!!
}
PlayerPrefs.SetInt("notaFinalTemp"+idTema.ToString(), notaFinal);// !!!!
PlayerPrefs.SetInt("acertosTemp"+idTema.ToString(), (int)acertos);// !!!!
SceneManager.LoadScene("notaFinal");
}
}
}
PauloGAMES- Iniciante
- PONTOS : 2987
REPUTAÇÃO : 0
Idade : 21
Áreas de atuação : Web Designer, Programador Python, C#,Modelador 3D
Respeito as regras :
Re: Dúvida sobre os botões UI,comando de troca de texto por Quest não funciona.
olá amigo, boa tarde, botões ui funcionam de duas formas na unity. Uma delas vc tem que referenciar o Método que vc quer chamar na area de eventos do botão
Outro método é chamar o método AddListener
Outro método é chamar o método AddListener
- Código:
using UnityEngine;
using UnityEngine.UI;
public class AudioButton : MonoBehaviour
{
private Button button;
private AudioSource audioSource;
private void Awake()
{
button = GetComponent<Button>();
audioSource = GetComponent<AudioSource>();
button.onClick.AddListener(PlayButtonAudio);
}
private void PlayButtonAudio()
{
audioSource.Play();
}
}
Fluttershy28- Avançado
- PONTOS : 2702
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Re: Dúvida sobre os botões UI,comando de troca de texto por Quest não funciona.
Entendi, fiz o mesmo jeito que você colocou, mas so que quando declarei, coloquei o "evento" respostaAlternativa nos botões, mesmo assim ele não funcionava quando clicasse(ele era clicado porque coloquer uma animação quando fosse selecionado), tentarei fazer esse metodo interno como você fez, mas tenho so uma pergunta na parte de fazer direto no codigo, devo colocar o nome do botão dentro do getcomponent? E no caso que eu coloquei uma variavel para definir"a,b,c" das questões. Devo agora fazer scripts diferentes para cada botão na cena?
PauloGAMES- Iniciante
- PONTOS : 2987
REPUTAÇÃO : 0
Idade : 21
Áreas de atuação : Web Designer, Programador Python, C#,Modelador 3D
Respeito as regras :
Re: Dúvida sobre os botões UI,comando de troca de texto por Quest não funciona.
Se eu puder, posso entrar com contato com você? E um trabalho de faculdade que estou fazendo e tenho um prazo curto para fazer, e estou preso nessa parte, e verifiquei, ele esta identificando os "acertos" e a alternativa que esta sendo clicada, coloquei um print() e testei para ver isso. Mas por algum motivo ele não passa para a proxima pergunta que esta escrito dentro do banco de dados..Fluttershy28 escreveu:olá amigo, boa tarde, botões ui funcionam de duas formas na unity. Uma delas vc tem que referenciar o Método que vc quer chamar na area de eventos do botão
Outro método é chamar o método AddListenernesse exemplo eu uso esse scrit no própri botão, mas vc pode usar em um objeto externo ee apenas referenciar o botão
- Código:
using UnityEngine;
using UnityEngine.UI;
public class AudioButton : MonoBehaviour
{
private Button button;
private AudioSource audioSource;
private void Awake()
{
button = GetComponent<Button>();
audioSource = GetComponent<AudioSource>();
button.onClick.AddListener(PlayButtonAudio);
}
private void PlayButtonAudio()
{
audioSource.Play();
}
}
PauloGAMES- Iniciante
- PONTOS : 2987
REPUTAÇÃO : 0
Idade : 21
Áreas de atuação : Web Designer, Programador Python, C#,Modelador 3D
Respeito as regras :
Re: Dúvida sobre os botões UI,comando de troca de texto por Quest não funciona.
claro meu amigo, meu número é (93) 991759276, mas vou sair da cidade amanhã cedo
Fluttershy28- Avançado
- PONTOS : 2702
REPUTAÇÃO : 52
Idade : 27
Áreas de atuação : Modelagem, Animação, Texturização, Design
Respeito as regras :
Tópicos semelhantes
» (DUVIDA) troca textura em degradê
» Duvida em script de troca de cores de um objeto
» [dúvida] Comando tranform.rotatante.x não funcionando direito.
» [DÚVIDA](Multiplayer) Comando para non-Player object
» Texto 3D aparecendo sobre objetos
» Duvida em script de troca de cores de um objeto
» [dúvida] Comando tranform.rotatante.x não funcionando direito.
» [DÚVIDA](Multiplayer) Comando para non-Player object
» Texto 3D aparecendo sobre objetos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos