[ AJUDA] Estou com problemas para acessar índice de uma Lista e realizar uma acao
3 participantes
Página 1 de 1
[ AJUDA] Estou com problemas para acessar índice de uma Lista e realizar uma acao
Na verdade estou criando um jogo de cartas esse é um dos scripts principais, eu fiz uma limpeza nele pra ficar mais fácil para o entendimento devido as gambiarras, na verdade queria uma orientação do método que devo proceder, no caso eu estou com problemas com lista pois o script movimenta as cartas entre as listas de objetos, e eu acho que cheguei num ponto mais avançado e pra piorar não consegui achar muitos tutoriais a respeito das funcionalidades de listas então me falta muito conhecimento nessa parte, mas o problema é o seguinte ao apertar um botão o player saca uma carta da lista baseada no deck, e essa carta é removida dessa lista e adicionada na lista da mão, 1º ponto eu queria limitar a mão a ter ate 7 cards sendo preciso descartar um card no fim do turno caso o player tenha 7, quando a carta é add a mão ela ocupa um índice e eu queria usar esse índice pra orientar qual animação a próxima carta vai usar ao sair da lista do deck e ir pra mão ou para ocupar uma posição vaga, e esse é o grande problema já tentei varias formas para fazer essa ação mas sem exito, queria ajuda nessa parte, porque não sei direito como acessar individualmente os índices, vale lembrar que coloquei uma lista extra do tipo bool Usados para ir baseando uma posição mais precisa e qual animação deve tocar com base nos índices não usados, se puderem me ajudar vou deixar o script caso tenha jeito de realizar essa ação
.
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class CardsDeck : MonoBehaviour {
public List<GameObject> deck = new List<GameObject>();
public List<GameObject> cards = new List<GameObject>();
public List<GameObject> mao = new List<GameObject>();
private int cardsSacado = 0;
private bool showReset = false;
public Animator Anim;
public List<bool> Usado = new List<bool>();
public GameObject ObjetoSelecionado;
public bool selecionar = false;
public Camera kamera;
void ResetDeck()
{
cardsSacado = 0;
for (int i = 0; i < mao.Count; i++) {
Destroy(mao[i]);
Usado[i] = false;
}
mao.Clear();
cards.Clear();
cards.AddRange(deck);
showReset = false;
}
////esta funcao embaralha as cartas e retira 1 da lista, que sera adicionada a mao depois
GameObject SacaCard (){
if(cards.Count == 0)
{
showReset = true;
return null;
}
int card = Random.Range(0, cards.Count - 1);
GameObject go = GameObject.Instantiate(cards[card]) as GameObject;
cards.RemoveAt(card);
if(cards.Count == 0) {
showReset = true;
}
return go;
}
void Start () {
ResetDeck();
}
// Update is called once per frame
void Update () {
SelectCarta ();
if (!showReset) {
if(Input.GetKeyDown(KeyCode.PageUp))
{
MoveOrdenaCard();
}
}
else {
// Reset button
if(Input.GetKeyDown(KeyCode.Home))
{
ResetDeck();
}
}
// GameOver button
if(Input.GetKeyDown(KeyCode.PageDown))
{
GameOver();
}
}
void GameOver()
{
cardsSacado = 0;
for (int m = 0; m < mao.Count; m++) {
Destroy(mao[m]);
Usado[m] = false;
}
mao.Clear();
cards.Clear();
cards.AddRange(deck);
}
//esta funcao é pra apontar a carta que sera ativa e remove la da mao dando espaco pra sacar outra /ainda nao completa
private void SelectCarta (int index = 0)
{
if(Input.GetMouseButtonDown (0)){
RaycastHit hit;
if(Physics.Raycast(kamera.ScreenPointToRay(Input.mousePosition),out hit, LayerMask.GetMask("Carta")))
{
if (hit.collider.gameObject.tag == "Cartas" && Input.GetMouseButtonDown (0)) {
ObjetoSelecionado = hit.transform.gameObject;
mao.RemoveAt(index);
Usado[index] = false;
Debug.Log(gameObject);
selecionar = true;
}
}
if(selecionar == true && Input.GetMouseButtonDown (0)){
selecionar = false;
}
}
}
//esta funcao chama as animacoes das cartas q sao 7 mas talvez eu vou deixar na propria carta
// a ideia é fazer com q de acordo com o indice vago na mao a carta seja instaciada com a animacao correspondente
public void MaoPlayer ()
{
if(Usado[indic]){
Anim.SetInteger("saca", 0);
}
if(Usado[indic]){
Anim.SetInteger("saca", 1);
}
if(Usado[indic]){
Anim.SetInteger("saca", 2);
}
if(cardsSacado == 3){
}
if(cardsSacado == 4){
}
if(cardsSacado == 5){
}
if(cardsSacado == 6){
}
}
//esta funcao coloca a carta na lista da mao
void MoveOrdenaCard()
{
GameObject newCard = SacaCard();
if (newCard == null) {
Debug.Log("Out of Cards");
showReset = true;
return;
} //if(newCard == null && Usado[cardsSacado] == false && cardsSacado != 0)
newCard.transform.position = new Vector3((float)cardsSacado / 4, (float)cardsSacado / -4, (float)cardsSacado / -4);
mao.Add(newCard);
Usado[cardsSacado] = true;
cardsSacado ++;
//MaoPlayer ();
if(turnoPlay == false){
cardsSacado = 0;
}
}
}
.
Ronmaster- Membro
- PONTOS : 2870
REPUTAÇÃO : 4
Respeito as regras :
Re: [ AJUDA] Estou com problemas para acessar índice de uma Lista e realizar uma acao
UP
Fiz umas pesquisas aqui mais nao achei.
Fiz umas pesquisas aqui mais nao achei.
Re: [ AJUDA] Estou com problemas para acessar índice de uma Lista e realizar uma acao
Consegui fazer assim aqui num script
- Código:
public List<Equipe> equipes;
public int Indice;
public int totalEquip;
void Start()
{
totalEquip = equipes.Count;//Quantidade de item na lista
//AtivarEquipe(indice);//Posso ativar o primeiro script
}
public void AtivarEquipe (int indicePedido){//Aqui ativo e desativo funcao em outro script
if (equipes.Count > 0) {
for (int x = 0; x < equipes.Count; x++) {
if (x == indicePedido) {
equipes[x].controller = true;
} else{
equipes[x].controller = false;
}
}
}
indice = indicePedido;
}
Re: [ AJUDA] Estou com problemas para acessar índice de uma Lista e realizar uma acao
Já resolveu sou problema?
Tiago95- Avançado
- PONTOS : 2628
REPUTAÇÃO : 32
Respeito as regras :
Re: [ AJUDA] Estou com problemas para acessar índice de uma Lista e realizar uma acao
Esse exemplo eu consegui fazer o que queria,
Tópicos semelhantes
» Estou tendo problemas para criar uma conta de desenvolvedor no google play
» Clicar em um Sprite e realizar uma ação
» Ajuda - Apertar botao e executar uma ação
» Estou com problemas com o NavMeshAgent
» Estou com problemas na iluminação da minha Lanterna (jogo de terror)
» Clicar em um Sprite e realizar uma ação
» Ajuda - Apertar botao e executar uma ação
» Estou com problemas com o NavMeshAgent
» Estou com problemas na iluminação da minha Lanterna (jogo de terror)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos