[Ajuda] Argument is out of range
4 participantes
Página 1 de 1
[Ajuda] Argument is out of range
bom, eu fiz um random para pegar valores de uma variável e exibir em uma textbox, no script das variáveis eu fiz só 3 elementos para serem sorteados, e quando ja acontece o sorteio deles da um erro chamado ArgumentOutOfRangeException: Argument is out of range..
eu sei que está dando esse erro porque nao tem mais elementos para sortear. Eu queria saber como faço para que quando sortear todas os elementos, aparecesse, um texto por exemplo.
eu sei que está dando esse erro porque nao tem mais elementos para sortear. Eu queria saber como faço para que quando sortear todas os elementos, aparecesse, um texto por exemplo.
Re: [Ajuda] Argument is out of range
Na verdade vc esta passando algum argumento invalido poste o script
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: [Ajuda] Argument is out of range
- Código:
int aleatorios = UnityEngine.Random.Range(0, naoPerguntadas.Count);
perguntaAtual = naoPerguntadas[aleatorios];
naoPerguntadas.RemoveAt(aleatorios);
respostaAtual = perguntaAtual._resposta;
areaPergunta.GetComponent<Text>().text = perguntaAtual._perguntas;
Re: [Ajuda] Argument is out of range
só tenho 3 itens para sortear, ai eles vem aleatoriamente normal, ai depois do terceiro item, se eu clicar no botao que chama o proximo item da isso.weslleyFx escreveu:Na verdade vc esta passando algum argumento invalido poste o script
cole weslley safadaum, me deixou no vácuo sô kkk
Re: [Ajuda] Argument is out of range
Vácuo foi mal vamos a duvida
poste todo o script
mas talvez seja aqui
se o tipo de dados da variável respostaAtual não for do mesmo tipo de dados que perguntaAtual._resposta isso vai gerar um erro automaticamente
poste todo o script
mas talvez seja aqui
- Código:
respostaAtual = perguntaAtual._resposta;
se o tipo de dados da variável respostaAtual não for do mesmo tipo de dados que perguntaAtual._resposta isso vai gerar um erro automaticamente
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: [Ajuda] Argument is out of range
meu script funciona assim, quando eu iniciar a fase, a area de texto vai receber um dos elementos, ai de acordo quando a pessoa vai acertando, esses elementos vao trocando, porém nunca são repetidos, aí quando chega no ultimo, da esse erro, é como se essa linha de comando que te passei nao podesse fazer nada porque ja processou todos os elementos, mas vou te passar o script aqui, vou passar so as partes que tem o erro porque esse scripr é muito grande, é um só para gerenciar o jogo inteiro. mas é um jogo só de UI né.
Script:
aí eu chamo a ultima void quando aperto um botao, funciona de boa.
porém como eu disse, quando chega no final dos elementos armazenados em outro script
que está ai em baixo, da esse erro. eu queria fazer o seguinte, que quando nao tiver mais elementos para sortear (que eu acho que é o motivo do erro) executar uma ação qualquer, tipo aparecer algum objeto UI.
Espero que tenha entendido...
Valeu pela atenção e pela paciencia mano
Esse:
Script:
- Código:
public Perguntas[] perguntas;
private Perguntas perguntaAtual;
private static List<Perguntas> naoPerguntadas;
private static List<Perguntas> respostas;
void Start()
{
if (naoPerguntadas == null || naoPerguntadas.Count == 0) // se as variaveir nao estiverem com nada,
{
naoPerguntadas = perguntas.ToList<Perguntas>(); //elas vão receber uma das perguntas.
}
void PegarPerguntaQualquer()
{
int aleatorios = UnityEngine.Random.Range(0, naoPerguntadas.Count);
perguntaAtual = naoPerguntadas[aleatorios];
naoPerguntadas.RemoveAt(aleatorios);
respostaAtual = perguntaAtual._resposta;
areaPergunta.GetComponent<Text>().text = perguntaAtual._perguntas;
}
aí eu chamo a ultima void quando aperto um botao, funciona de boa.
porém como eu disse, quando chega no final dos elementos armazenados em outro script
que está ai em baixo, da esse erro. eu queria fazer o seguinte, que quando nao tiver mais elementos para sortear (que eu acho que é o motivo do erro) executar uma ação qualquer, tipo aparecer algum objeto UI.
Espero que tenha entendido...
Valeu pela atenção e pela paciencia mano
Esse:
- Código:
[System.Serializable]
public class Perguntas
{
public string _perguntas;
public string _resposta;
}
Última edição por NotoriousDev em Sáb Jun 04, 2016 9:42 pm, editado 1 vez(es) (Motivo da edição : Esqueci as variáveis)
Re: [Ajuda] Argument is out of range
MarcosSchultz escreveu:em qual linha está apontando o erro?
o pior é que nao esta falando de linha, por isso estou ficando doido aqui, vou mandar um print do erro. aí por exemplo, quando dá esse erro, o jogo continua de boa, e a função também, porem fica no ultimo elemente, toda vez que clico no botao e u continuo ganhando pontos, esse erro, deve ser por falta de ter o que randomizar. ai por isso que eu quero por algo quando acabar os argumentos, tipo, Você venceu!!
aí está, no debug.log, todas acertadas, porque se o jogador errar a pergunta ele continua na mesma resposta, ai ele acerta e esse codigo que te passei, randomiza todos os elementos que serão sorteados e mostra na text box, assim quando chega no ultimo elemento, da esse erro, porem continua funcionando, e como fica no mesmo elemento, o jogador vai clicando na resposta e vai ganhando pontos, por ser a mesma resposta.
e então no debug.log voce percebe que o nitrogenio repete 2 vezes, é porque ele foi o ultimo a ser randomizado pelo codigo, e fica parado nele (no caso o ultimo randomizado).
estava olhando no msdn aqui, e tem uma classe chamada ArgumentOutOfRangeException, talvez ela resolva, vou tentar usar ela aqui.. mas nao sei se tem como colocar ela em um script que tem outra classe, faltei a essa aula kkk
Bom, eu consegui aqui adicionando somente essa linha
- Código:
if (naoPerguntadas.Count <= 0)
{
Debug.Log("Acabou");
ganhou.enabled = true;
areaPergunta.enabled = false;
}
aí fica assim, se as perguntas que ainda nao foram chamadas for igual <= 0, aparece um text na tela. e nao dá erro. o/
mais uma vez marcos e wesley, muito obrigado pela atenção
Uma coisa que aprendi nesse forum além das demais, se você quiser ajuda, enquanto os outros usuários te ajudam e não conseguem, você mesmo pode tentar se ajudar e conseguir resolver sozinho, ao invés de ficar esperando a solução de outro usuário, o que gera o famoso CTRL + C CTRL + V
Re: [Ajuda] Argument is out of range
Uma sugestão pra você. Use banco de dados. Muito mais facil e com armazenamento infinito e rapido de ler e escrever.
Com banco de dados você não precisaria guardar os valores ja chamados, já que o proprio SQL faz isso por voce, elabora uma lista de quantas perguntas voce quer sendo elas randomicamente. Ai basta voce associar os ID de cada pergunta sorteada pelo SQL e tcharam, voce tem uma array com (20 exemplo) IDs de perguntas sortidas dentre as 1 trilhoes que voce tem no banco de dados inteiro. Ai basta pegar o id e instanciar a pergunta em si e a resposta, comparar resultados e bum um jogao !
Com banco de dados você não precisaria guardar os valores ja chamados, já que o proprio SQL faz isso por voce, elabora uma lista de quantas perguntas voce quer sendo elas randomicamente. Ai basta voce associar os ID de cada pergunta sorteada pelo SQL e tcharam, voce tem uma array com (20 exemplo) IDs de perguntas sortidas dentre as 1 trilhoes que voce tem no banco de dados inteiro. Ai basta pegar o id e instanciar a pergunta em si e a resposta, comparar resultados e bum um jogao !
RenanMSV- Instrutor
- PONTOS : 4484
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [Ajuda] Argument is out of range
RenanMSV escreveu:Uma sugestão pra você. Use banco de dados. Muito mais facil e com armazenamento infinito e rapido de ler e escrever.
Com banco de dados você não precisaria guardar os valores ja chamados, já que o proprio SQL faz isso por voce, elabora uma lista de quantas perguntas voce quer sendo elas randomicamente. Ai basta voce associar os ID de cada pergunta sorteada pelo SQL e tcharam, voce tem uma array com (20 exemplo) IDs de perguntas sortidas dentre as 1 trilhoes que voce tem no banco de dados inteiro. Ai basta pegar o id e instanciar a pergunta em si e a resposta, comparar resultados e bum um jogao !
mano, a ultima vez que mexi com sql foi no lineage 2, eu sei usar um pouco mas agora com o unity nao tenho a minima, tem algum tutorial que possa me explicar ai?
Re: [Ajuda] Argument is out of range
https://www.schultzgames.com/t1229-tutorial-banco-de-dados-sqlite (banco de dados local, na maquina do usuario)
(banco de dados remoto, num servidor (recomendado) APENAS SE SEU HOST DO BANCO DE DADOS TE DER ACESSO REMOTO AO MYSQL)
( CASO SEU SERVIDOR NAO TE DE ACESSO REMOTO AO MYSQL VOCE TERA QUE CONSULTAR OS DADOS VIA PHP )
Sites com banco de dados free com acesso remoto:
http://www.freesqldatabase.com/ Cada conta pode ter 1 banco de dados de no maximo 5MB.
https://www.db4free.net/ Cada conta pode ter 1 banco de dados de no maximo 200MB.
(banco de dados remoto, num servidor (recomendado) APENAS SE SEU HOST DO BANCO DE DADOS TE DER ACESSO REMOTO AO MYSQL)
( CASO SEU SERVIDOR NAO TE DE ACESSO REMOTO AO MYSQL VOCE TERA QUE CONSULTAR OS DADOS VIA PHP )
Sites com banco de dados free com acesso remoto:
http://www.freesqldatabase.com/ Cada conta pode ter 1 banco de dados de no maximo 5MB.
https://www.db4free.net/ Cada conta pode ter 1 banco de dados de no maximo 200MB.
RenanMSV- Instrutor
- PONTOS : 4484
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [Ajuda] Argument is out of range
RenanMSV escreveu:https://www.schultzgames.com/t1229-tutorial-banco-de-dados-sqlite (banco de dados local, na maquina do usuario)
(banco de dados remoto, num servidor (recomendado) APENAS SE SEU HOST DO BANCO DE DADOS TE DER ACESSO REMOTO AO MYSQL)
( CASO SEU SERVIDOR NAO TE DE ACESSO REMOTO AO MYSQL VOCE TERA QUE CONSULTAR OS DADOS VIA PHP )
Sites com banco de dados free com acesso remoto:
http://www.freesqldatabase.com/ Cada conta pode ter 1 banco de dados de no maximo 5MB.
https://www.db4free.net/ Cada conta pode ter 1 banco de dados de no maximo 200MB.
nossa mano, valeu mesmo, voce me ajudou muito, mas será que compensa eu mudar para sql mesmo?
Re: [Ajuda] Argument is out of range
claro que compensa. Voce n vai precisar adicionar variaveis, ou mexer em algo nos scripts, basta alterar, remover ou adicionar perguntas mexendo apenas no banco de dados.
RenanMSV- Instrutor
- PONTOS : 4484
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [Ajuda] Argument is out of range
RenanMSV escreveu:claro que compensa. Voce n vai precisar adicionar variaveis, ou mexer em algo nos scripts, basta alterar, remover ou adicionar perguntas mexendo apenas no banco de dados.
mas ai o jogador teria que ter o aparelho conectado na internet o tempo todo. :S
Re: [Ajuda] Argument is out of range
Com SQLite não é preciso, ja que o banco fica no PC do usuario. Basta que voce faça com que ao estar conectado ele atualize o banco de dados dele com o mais atualizado (com novas perguntas) e então poderá usar o jogo mesmo offline.
Porém, um usuario mais avançado conseguiria facilmente alterar este banco de dados e ganhar pontuacoes maximas...etc.
Portanto MySQL é mais recomendado para isto.
Porém, um usuario mais avançado conseguiria facilmente alterar este banco de dados e ganhar pontuacoes maximas...etc.
Portanto MySQL é mais recomendado para isto.
RenanMSV- Instrutor
- PONTOS : 4484
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [Ajuda] Argument is out of range
RenanMSV escreveu:Com SQLite não é preciso, ja que o banco fica no PC do usuario. Basta que voce faça com que ao estar conectado ele atualize o banco de dados dele com o mais atualizado (com novas perguntas) e então poderá usar o jogo mesmo offline.
Porém, um usuario mais avançado conseguiria facilmente alterar este banco de dados e ganhar pontuacoes maximas...etc.
Portanto MySQL é mais recomendado para isto.
o bom do meu sistema atual é que eu adiciono uma nova pergunta pelo inspector, mas as novas só aparecerão quando o player atualizar o app todo certo?
Re: [Ajuda] Argument is out of range
No seu sistema sim.
O ponto fraco do seu sistema é que caso voce for colocar muitas perguntas vai ficar enorme o inspector. E teremos um uso enorme de memoria para guardar estas perguntas. Fora isso o sistema é bom sim, para poucas perguntas ele funciona ok.
O ponto fraco do seu sistema é que caso voce for colocar muitas perguntas vai ficar enorme o inspector. E teremos um uso enorme de memoria para guardar estas perguntas. Fora isso o sistema é bom sim, para poucas perguntas ele funciona ok.
RenanMSV- Instrutor
- PONTOS : 4484
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [Ajuda] Argument is out of range
RenanMSV escreveu:No seu sistema sim.
O ponto fraco do seu sistema é que caso voce for colocar muitas perguntas vai ficar enorme o inspector. E teremos um uso enorme de memoria para guardar estas perguntas. Fora isso o sistema é bom sim, para poucas perguntas ele funciona ok.
mas e seu eu fazer respostas separadas por tipo em cada script que serve como db, terei no maximo umas 50 por tipo e olha la se nao menos.
sera que fica pesado?
Re: [Ajuda] Argument is out of range
Creio que não.
RenanMSV- Instrutor
- PONTOS : 4484
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [Ajuda] Argument is out of range
RenanMSV escreveu:Creio que não.
agora outra duvida, eu tenho um array com 3 elementos, ele é privado, eu quero que cada um recebe um valor sem repetir o valor 2 vezes ou mais,
mas antes eu prefiro saber como eu faço para adicionar os valores ao mesmo tempo em cada array
como eu detecto o clique do usuario no botao em um if, por exemplo, se o player clicou nesse botao e condição for true... bla bla bla
Re: [Ajuda] Argument is out of range
- Código:
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
[SerializeField]
private string[] str;
void Start (){
str = new string[] {"Valor1", "Valor2","Valor3"};
}
}
Basta que voce crie o modo de verificar se o valor ja foi repetido e tals. Usando Lists.
RenanMSV- Instrutor
- PONTOS : 4484
REPUTAÇÃO : 356
Áreas de atuação : Programação em C#, PHP. SQL, JavaScript (Web)
Respeito as regras :
Re: [Ajuda] Argument is out of range
kkk acabei de bagunçar minha mente tentando mexer com isso, é melhor dar uma pausa. ^^RenanMSV escreveu:
- Código:
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
[SerializeField]
private string[] str;
void Start (){
str = new string[] {"Valor1", "Valor2","Valor3"};
}
}
Basta que voce crie o modo de verificar se o valor ja foi repetido e tals. Usando Lists.
Tópicos semelhantes
» Respawn Random.Range
» Salvar Random.Range
» Problema no script de lanterna (spotAngle, range e intensity)
» [RESOLVIDO] IA Array index is out of range
» Atacar só quando entrar no range
» Salvar Random.Range
» Problema no script de lanterna (spotAngle, range e intensity)
» [RESOLVIDO] IA Array index is out of range
» Atacar só quando entrar no range
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos