Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
Ubicar objetos en el canvas
Creo la siguiente jerarquía de objetos dentro del camvas:
- Panel (con el componente vertical layout group)
- panel1 (con el componente horizontal layout group)
- carta1
- carta2
- carta3
- carta4
- carta5
- panel2 (con el componente horizontal layout group)
- carta1
- carta2
- carta3
- carta4
- carta5
- panel1 (con el componente horizontal layout group)
Voltear cartas
GameController.cs
public class GameManager : MonoBehaviour{
public Sprite[] cardFace;
public GameObject[] cards;
void Start(){
for (int id = 0; id < 2; id++){
for (int i = 0; i < cardFace.Length; i++){
bool test = false;
int choice = 0;
while (!test){
choice = Random.Range(0, cards.Length);
//Voy buscando hasta encontrar una carta no inicializada
//Si todas las cartas fueron ya inicializadas, obtendré un bucle infinito
test = !(cards[choice].GetComponent<Card>().initialized);
}
cards[choice].GetComponent<Card>().cardFace = cardFace[i];
cards[choice].GetComponent<Card>().initialized = true;
}
}
}
}
Card.cs
public class Card : MonoBehaviour{
public bool initialized = false;
public Sprite cardFace;
void Start(){
GetComponent<Button>().onClick.AddListener(flipCard);
}
public void flipCard(){
GetComponent<Image>().sprite = cardFace;
}
}
using UnityEngine;
using UnityEngine.UI;
public class Card : MonoBehaviour{
public bool initialized = false;
public Image cardBack;
public Sprite cardFace;
GameController gc;
void Start(){
gc = GameObject.Find("GameController").GetComponent<GameController>();
cardBack = GetComponent<Image>();
cardBack.sprite = gc.cardBack;
GetComponent<Button>().onClick.AddListener(flipCard);
}
public void flipCard(){
GetComponent<Image>().sprite = cardFace;
}
}
La carta llama al GameController
Destapo dos cartas
GameController.cs
Card primeraCarta;
Card segundaCarta;
public void EvaluarCartas(Card carta){
if (primeraCarta == null){
carta.GetComponent<Image>().sprite = carta.cardFace;
primeraCarta = carta;
}else if (segundaCarta == null){
carta.GetComponent<Image>().sprite = carta.cardFace;
segundaCarta = carta;
if (primeraCarta.GetComponent<Image>().sprite == segundaCarta.GetComponent<Image>().sprite){
Debug.Log("exito");
primeraCarta = null;
segundaCarta = null;
}else{
StartCoroutine(dejaCartasComoAlPrincipio());
}
}
}
IEnumerator dejaCartasComoAlPrincipio(){
yield return new WaitForSeconds(1f);
primeraCarta.ShowBack();
segundaCarta.ShowBack();
primeraCarta = null;
segundaCarta = null;
}
Card.cs
void Start(){
cardBack = GetComponent<Image>().sprite;
GetComponent<Button>().onClick.AddListener(flipCard);
gm = GameObject.Find("GameManager").GetComponent<GameManager>();
}
public void flipCard(){
//GetComponent<Image>().sprite = cardFace;
gm.EvaluarCartas(GetComponent<Card>());
}
public void ShowBack(){
GetComponent<Image>().sprite = cardBack;
}