[RESOLVIDO] Como fazer com que os valores do bool sejam iguais ao da lista?
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Como fazer com que os valores do bool sejam iguais ao da lista?
Fiz um script onde existe um sistema de cartas que lê os valores aleatoriamente, porém quero passar a carta lida para outra cena.
Para isso, criei a variável bool cartas1true, porém como é um Random apenas com a quantidade atual da lista, a mesma dá problemas, não dando os valores como true.
Exemplo: na lista contém as linhas "bla", "ble" e bli". Então o primeiro Random sorteia os 3 e fica a leulinha[1] como true, mas quando vai sortear de novo, tem apenas "bla" e "bli", e sorteia o "bli", então o leulinha[2] nunca vai ser true.
Para isso, criei a variável bool cartas1true, porém como é um Random apenas com a quantidade atual da lista, a mesma dá problemas, não dando os valores como true.
Exemplo: na lista contém as linhas "bla", "ble" e bli". Então o primeiro Random sorteia os 3 e fica a leulinha[1] como true, mas quando vai sortear de novo, tem apenas "bla" e "bli", e sorteia o "bli", então o leulinha[2] nunca vai ser true.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
public class AbrirCarta : MonoBehaviour
{
int cartas1;
int cartas1true;
bool apertou = false;
public bool[] leuLinha;
public Text[] aviso;
public GameObject panelCartas;
public Text conteudoCartas;
bool estaLendo = false;
public float tempo = 5f;
List<string> lista = new List<string>();
public GameObject[] desativarMovECam;
void Start()
{
string[] cartasFase1 = File.ReadAllLines("Assets\\Txt\\CartasFase1.txt");
for (int i = 0; i < cartasFase1.Length; i++)
{
lista.Add(cartasFase1[i]);
}
leuLinha = new bool[cartasFase1.Length];
aviso[0].gameObject.SetActive(false);
aviso[1].gameObject.SetActive(false);
panelCartas.SetActive(false);
}
void Update()
{
if (estaLendo)
{
tempo -= Time.deltaTime;
Ler();
}
if (Input.GetButtonDown("Fire2"))
{
apertou = false;
estaLendo = false;
panelCartas.SetActive(false);
aviso[1].gameObject.SetActive(false);
desativarMovECam[0].GetComponent<MovimentoPlayer>().enabled = true;
desativarMovECam[1].GetComponent<VisaoMouse>().enabled = true;
}
}
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Carta"))
{
aviso[0].gameObject.SetActive(true);
estaLendo = true;
Collider col = other.gameObject.GetComponent<Collider>();
Destroy(col);
}
}
public void Ler()
{
if ((Input.GetKeyUp(KeyCode.F) && tempo >= 0f))
{
apertou = true;
panelCartas.SetActive(true);
aviso[1].gameObject.SetActive(true);
cartas1 = Random.Range(0, lista.Count);
cartas1true = cartas1;
conteudoCartas.text = lista[cartas1];
leuLinha[cartas1true] = true;
estaLendo = false;
if (lista.Count > 0)
lista.RemoveAt(cartas1);
desativarMovECam[0].GetComponent<MovimentoPlayer>().enabled = false;
desativarMovECam[1].GetComponent<VisaoMouse>().enabled = false;
}
if (tempo <= 0f || apertou)
{
aviso[0].gameObject.SetActive(false);
tempo = 5f;
}
}
}
Th2y- Membro
- PONTOS : 1767
REPUTAÇÃO : 4
Idade : 23
Áreas de atuação : Programação de jogos digitais
Respeito as regras :
Re: [RESOLVIDO] Como fazer com que os valores do bool sejam iguais ao da lista?
Pode ser feito de outra forma, o importante para mim é apenas que esse texto lido possa ser passado para a cena do menu, para isso acredito que usando o PlayerPrefs para guardar se o jogador leu ou não.
Serviria assim: tem todas as cartas no menu, mas estariam bloqueadas até que o jogador pegasse a mesma em jogo.
Serviria assim: tem todas as cartas no menu, mas estariam bloqueadas até que o jogador pegasse a mesma em jogo.
Th2y- Membro
- PONTOS : 1767
REPUTAÇÃO : 4
Idade : 23
Áreas de atuação : Programação de jogos digitais
Respeito as regras :
Re: [RESOLVIDO] Como fazer com que os valores do bool sejam iguais ao da lista?
Consegui encontrar uma solução para o meu problema (apesar de acreditar que existe uma forma melhor de fazer isso, eu não conheço ainda).
Se alguém souber uma forma melhor, por favor me diga como é
Script PegouACarta
Script AbrirCarta
Se alguém souber uma forma melhor, por favor me diga como é
Script PegouACarta
- Código:
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
public class PegouACarta : MonoBehaviour
{
public Text[] cartasPegas;
public Text[] cartasPegasLidas;
public Button[] botoesCartas;
List<string> lista = new List<string>();
private void Update()
{
string[] cartasFase1Lidas = File.ReadAllLines("Assets\\Txt\\CartasFase1.txt");
for (int i = 0; i < cartasFase1Lidas.Length; i++)
{
lista.Add(cartasFase1Lidas[i]);
}
cartasPegas[0].text = PlayerPrefs.GetString("PegouCarta1");
cartasPegas[1].text = PlayerPrefs.GetString("PegouCarta2");
cartasPegas[2].text = PlayerPrefs.GetString("PegouCarta3");
cartasPegas[3].text = PlayerPrefs.GetString("PegouCarta4");
cartasPegas[4].text = PlayerPrefs.GetString("PegouCarta5");
if (cartasPegas[0].text == lista[0] || cartasPegas[1].text == lista[0] || cartasPegas[2].text == lista[0] || cartasPegas[3].text == lista[0] || cartasPegas[4].text == lista[0])
{
botoesCartas[0].interactable = true;
cartasPegasLidas[0].text = cartasFase1Lidas[0];
}
else
botoesCartas[0].interactable = false;
if (cartasPegas[0].text == lista[1] || cartasPegas[1].text == lista[1] || cartasPegas[2].text == lista[1] || cartasPegas[3].text == lista[1] || cartasPegas[4].text == lista[1])
{
botoesCartas[1].interactable = true;
cartasPegasLidas[1].text = cartasFase1Lidas[1];
}
else
botoesCartas[1].interactable = false;
if (cartasPegas[0].text == lista[2] || cartasPegas[1].text == lista[2] || cartasPegas[2].text == lista[2] || cartasPegas[3].text == lista[2] || cartasPegas[4].text == lista[2])
{
botoesCartas[2].interactable = true;
cartasPegasLidas[2].text = cartasFase1Lidas[2];
}
else
botoesCartas[2].interactable = false;
if (cartasPegas[0].text == lista[3] || cartasPegas[1].text == lista[3] || cartasPegas[2].text == lista[3] || cartasPegas[3].text == lista[3] || cartasPegas[4].text == lista[3])
{
botoesCartas[3].interactable = true;
cartasPegasLidas[3].text = cartasFase1Lidas[3];
}
else
botoesCartas[3].interactable = false;
if (cartasPegas[0].text == lista[4] || cartasPegas[1].text == lista[4] || cartasPegas[2].text == lista[4] || cartasPegas[3].text == lista[4] || cartasPegas[4].text == lista[4])
{
botoesCartas[4].interactable = true;
cartasPegasLidas[4].text = cartasFase1Lidas[4];
}
else
botoesCartas[4].interactable = false;
}
}
Script AbrirCarta
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using UnityEngine.SceneManagement;
public class AbrirCarta : MonoBehaviour
{
int num;
int cartas1;
bool apertou = false;
public bool[] leuLinha;
public Text[] aviso;
public GameObject panelCartas;
public Text conteudoCartas;
bool estaLendo = false;
public float tempo = 5f;
List<string> lista = new List<string>();
public string nomeDaCena;
public GameObject[] desativarMovECam;
void Start()
{
nomeDaCena = SceneManager.GetActiveScene().name;
string[] cartasFase1 = File.ReadAllLines("Assets\\Txt\\CartasFase1.txt");
for (int i = 0; i < cartasFase1.Length; i++)
{
lista.Add(cartasFase1[i]);
}
leuLinha = new bool[cartasFase1.Length];
aviso[0].gameObject.SetActive(false);
aviso[1].gameObject.SetActive(false);
panelCartas.SetActive(false);
}
void Update()
{
if (estaLendo)
{
tempo -= Time.deltaTime;
Ler();
}
if (Input.GetButtonDown("Fire2"))
{
apertou = false;
estaLendo = false;
panelCartas.SetActive(false);
aviso[1].gameObject.SetActive(false);
desativarMovECam[0].GetComponent<MovimentoPlayer>().enabled = true;
desativarMovECam[1].GetComponent<VisaoMouse>().enabled = true;
}
}
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Carta"))
{
aviso[0].gameObject.SetActive(true);
estaLendo = true;
Collider col = other.gameObject.GetComponent<Collider>();
Destroy(col);
}
}
public void Ler()
{
if ((Input.GetKeyUp(KeyCode.F) && tempo >= 0f))
{
apertou = true;
panelCartas.SetActive(true);
aviso[1].gameObject.SetActive(true);
cartas1 = Random.Range(0, lista.Count);
conteudoCartas.text = lista[cartas1];
if (num == 0)
PlayerPrefs.SetString("PegouCarta1", conteudoCartas.text);
else if (num == 1)
PlayerPrefs.SetString("PegouCarta2", conteudoCartas.text);
else if (num == 2)
PlayerPrefs.SetString("PegouCarta3", conteudoCartas.text);
else if (num == 3)
PlayerPrefs.SetString("PegouCarta4", conteudoCartas.text);
else if (num == 4)
PlayerPrefs.SetString("PegouCarta5", conteudoCartas.text);
leuLinha[cartas1] = true;
estaLendo = false;
if (lista.Count > 0)
lista.RemoveAt(cartas1);
desativarMovECam[0].GetComponent<MovimentoPlayer>().enabled = false;
desativarMovECam[1].GetComponent<VisaoMouse>().enabled = false;
num++;
}
if (tempo <= 0f || apertou)
{
aviso[0].gameObject.SetActive(false);
tempo = 5f;
}
}
}
Th2y- Membro
- PONTOS : 1767
REPUTAÇÃO : 4
Idade : 23
Áreas de atuação : Programação de jogos digitais
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Pegar Objetos Filhos e Adicionar em uma Lista ou Array para Usálos como Waypoints
» [RESOLVIDO] como fazer um fadeIn
» como fazer um sistema (lista) de captura igual de pokemon generations
» [RESOLVIDO] alguém sabe como fazer um unico Input fazer duas ações?
» [RESOLVIDO] Como criar um botãoUI que liga e desliga uma lista de objetos?
» [RESOLVIDO] como fazer um fadeIn
» como fazer um sistema (lista) de captura igual de pokemon generations
» [RESOLVIDO] alguém sabe como fazer um unico Input fazer duas ações?
» [RESOLVIDO] Como criar um botãoUI que liga e desliga uma lista de objetos?
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos